使用 insertAll 时 Appscript 中的大查询解析错误
Posted
技术标签:
【中文标题】使用 insertAll 时 Appscript 中的大查询解析错误【英文标题】:Big query Parse Error in Appscript when using insertAll 【发布时间】:2016-05-03 04:10:05 【问题描述】:我正在尝试使用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。我不确定我怎么没有正确解析它。我希望有人可以建议如何解析。
【问题讨论】:
那是一个错字。对不起!我仍在努力解决这个问题。 【参考方案1】:我没有使用 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 的最后一个参数旨在匹配请求的主体,那么您应该使用指向上述行对象的属性“rows”填充字典,并根据需要设置其他参数(请参阅问题中的 insertAll 链接)。
我发誓的最终编辑:
基于this 部分:
除了传递与 insertAll 请求的正文相匹配的字典(在“请求正文”部分 here 中描述)之外,您的参数应按以下顺序排列:
insertAll(requestBody, projectId, datasetId, tableId)
【讨论】:
我将代码更改为您建议的内容,但仍然出现同样的错误。我确实尝试更改参数的顺序,但它开始给我一个错误,上面写着“请求中没有行”。我不确定它要求什么样的解析。【参考方案2】:不确定这是否是实际问题,但在代码的最后一行中,您尝试使用由于空格而不存在的变量 -
var rjob = BigQuery.Tabledata.insertAll(ProjectID, datasetId, tableId, row objects);
应该是
var rjob = BigQuery.Tabledata.insertAll(ProjectID, datasetId, tableId, rowobjects);
将rowobjects
数组传递给insertAll 函数。如果这能解决您的问题,请告诉我!
【讨论】:
以上是关于使用 insertAll 时 Appscript 中的大查询解析错误的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 table.insertall() 将任何数据上传到 bigquery
使用 JDBC executeBatch() 通过 appscript 批量插入 Cloud SQL,耗时过多