使用insertAll时,在Appscript中的大查询解析错误

时间:2016-05-03 04:10:05

标签: json google-apps-script google-bigquery

我正在尝试使用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。我不确定我怎么不正确解析它。我希望有人可以建议如何解析这个问题。

2 个答案:

答案 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)