Google Apps脚本和Bigquery - tabledata.insertAll

时间:2014-05-12 14:50:20

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

一直在努力解决这个问题...... Google Apps脚本和Big Query API运行良好,但是当我尝试使用BigQuery.Tabledata.insertAll时,我不断收到错误消息说“没有这样的字段&#39 ;

当我尝试通过Google API资源管理器运行相同的操作时,它可以正常工作。文档说命令是:

BigQuery.TableData.insertAll(TableDataInsertAllRequest resource, String projectId, String datasetId, String tableId)

我根据文档https://developers.google.com/bigquery/docs/reference/v2/tabledata/insertAll构建了TableDataInsertAllRequest资源,它看起来像这样:

{
  "kind": "bigquery#tableDataInsertAllRequest",
  "rows": 
  [
    {
      "json": 
      {
        "domain": "test",
        "kind": "another test"
      }
    }
  ]
}

这匹配我的表架构。

当我运行该命令时,返回的错误是:

{
    "insertErrors": [
        {
            "index": 0,
            "errors": [
                {
                    "message": "no such field",
                    "reason": "invalid"
                }
            ]
        }
    ],
    "kind": "bigquery#tableDataInsertAllResponse"
} 

正如我所说,同样的TableDataInsertAllRequest资源在API资源管理器中工作正常(单击上面文档页面上的Try It),它无法通过Apps脚本运行。

感激不尽的任何帮助。

1 个答案:

答案 0 :(得分:1)

我也遇到过这种情况,并且在这种变化方面运气好一些。

var rowObjects = [];
// Generally you'd do this next bit in a loop
var rowData = {};
rowData.domain = 'test';
rowData.kind = 'another test';
rowObjects.push(rowData);
// And at this point you'd have an array rowObjects with a bunch of objects
var response = BigQuery.TableData.insertAll({'rows': rowObjects}, projectId, datasetId, tableId);

有些注意事项:

  • 我没有表示kind - 来自insertAll()
  • 的电话暗示了这一点
  • 我使用点符号(是正确的术语吗?)而不是字符串来将属性填充到我的"行对象"

我不确定这些是什么秘密酱。无论如何,最后,调用的结构看起来像这样:

BigQuery.TableData.insertAll({'rows' : [
                                         {
                                           'domain' : 'test',
                                           'kind' : 'another test'
                                         }
                                       ]
                              },
                              projectId,
                              datasetId,
                              tableId);