我正在尝试使用此示例代码插入一行:
https://developers.google.com/bigquery/streaming-data-into-bigquery#streaminginsertexamples
TableRow row = new TableRow();
row.set("Col1", 50);
row.set("Col2", 50);
TableDataInsertAllRequest.Rows rows = new TableDataInsertAllRequest.Rows();
rows.setInsertId("" + System.currentTimeMillis());
rows.setJson(row);
List rowList = new ArrayList();
rowList.add(rows);
TableDataInsertAllRequest content = new TableDataInsertAllRequest().setRows(rowList);
try
{
TableDataInsertAllResponse response =
bigquery
.tabledata()
.insertAll("<myprojectid>", "6bc2cf53x8684x42a4x8149x9ff20fa8beed", "TestTable", content)
.execute();
System.out.println("Response: " + response);
}
catch (IOException e)
{
// handle
}
架构就是这样:
Col1 INTEGER NULLABLE
Col2 INTEGER NULLABLE
我收到错误:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 500
{
"code" : 500,
"errors" : [ {
"domain" : "global",
"message" : "Unexpected. Please try again.",
"reason" : "internalError"
} ],
"message" : "Unexpected. Please try again."
}
项目存在,数据集存在,表存在,数据类型与列规范匹配,我正在使用示例代码。 Jordan在这个问题[1]上说,500意味着一个BigQuery错误。我不介意解决它(如果是这样)但我不知道如何。我该怎么办?我为每一列编写了简单的硬编码,我尝试了另一个表,我尝试了一个不同的,全新的项目/数据集/表集。结果相同。
这是开发或GAE环境。
如果有帮助:
项目编号:1066943214796(注意我没有使用它,我在调用中使用字符串id),数据提示和表现在在上面的代码中。
[1] HTTP error 500 when requesting google big query API using service account
答案 0 :(得分:3)
您是否已删除并重新创建了您尝试将数据插入的表格?
我们(BigQuery团队)一直在调查错误,并认为它是由系统中的缓存不一致问题引起的。如果出现以下情况,缓存可能会以此状态结束:
1)创建一个表 2)一些行被流式传输到表中 3)删除并重新创建表 4)更多行被流式传输到表 - internalError
了解这是否符合您尝试的操作顺序会很有用。
缓存本身在~30分钟内使自身无效,此时操作应该成功。我们正在努力修复,但临时解决方法是避免重用表名。
问题解决后,我会更新此问题。
答案 1 :(得分:3)
我能够重现并识别问题!
除非我重命名数据集,否则我会得到完全相同的错误。在我将“6bc2cf53x8684x42a4x8149x9ff20fa8beed”更改为现有的更简单的字符串后,一切正常。
您可以尝试使用其他数据集名称吗?我将提交一个错误来发现为什么会发生这种情况。