一直在努力解决这个问题...... 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脚本运行。
感激不尽的任何帮助。
答案 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);