使用 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 中的大查询解析错误的主要内容,如果未能解决你的问题,请参考以下文章

从 InsertAll 中查看数据的延迟

无法使用 table.insertall() 将任何数据上传到 bigquery

使用 JDBC executeBatch() 通过 appscript 批量插入 Cloud SQL,耗时过多

在中查找最近标记的邮件邮件.app使用appscript

如何使用 AppScript 在 BigQuery 中将 Google 工作表持久化为表格

Scala slick 2.0 updateAll 等同于 insertALL?