我正在尝试使用insertAll参数在大查询表中插入数据。要在json中正确解析它,这是我正在使用的方法
var datasetId = 'XXXXXXX';
var tableId = 'XXXXXX';
var rowobjects = [];
var rowData = {};
rowData.ldap = ldap;
rowData.avgrating = rating;
rowData.emails = 0;
rowData.jediemails = 0;
rowobjects.push(rowData);
Logger.log(rowobjects);
var rjob = BigQuery.Tabledata.insertAll(ProjectID, datasetId, tableId, rowobjects);
这似乎不起作用。我得到了error。我不确定我怎么不正确解析它。我希望有人可以建议如何解析这个问题。
答案 0 :(得分:0)
不确定这是否是实际问题,但在代码的最后一行,您尝试使用由于空格而不存在的变量 -
var rjob = BigQuery.Tabledata.insertAll(ProjectID, datasetId, tableId, row objects);
应该是
var rjob = BigQuery.Tabledata.insertAll(ProjectID, datasetId, tableId, rowobjects);
将rowobjects
数组传递给insertAll函数。如果这解决了您的问题,请告诉我们!
答案 1 :(得分:0)
我没有使用AppScript的经验,但我应该指出,您的行对象看起来像是与表格架构匹配的字典。 insertAll API采用"插入行"它有一个" insertId"用于唯一标识行以在请求重试时重复删除的字段,以及" json"应该指向与您的架构匹配的字典的字段。
也许你的代码应该更像:
var rowData = {};
rowData.insertId = <some deduplication id for retries>;
rowData.json = {};
rowData.json.ldap = ldap;
rowData.json.avgrating = rating;
rowData.json.emails = 0;
rowData.json.jediemails = 0;
rowobjects.push(rowData);
实际上,如果insertAll的最后一个参数是为了匹配请求的主体,那么你应该用一个属性&#34; rows&#34;来填充一个字典。指向上面的rowobjects,并根据需要设置其他参数(请参阅问题中的insertAll链接)。
我最后编辑:
基于this部分:
除了传递与insertAll请求的主体匹配的字典(在&#34;请求正文&#34;部分here中描述)之外,您的参数应按以下顺序进行:
insertAll(requestBody, projectId, datasetId, tableId)