2

我正在尝试使用此示例代码插入一行:

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 错误。我不介意解决它(如果是这样的话),但我不知道该怎么做。我可以尝试什么?我为每一列硬编码了简单的值,我尝试了一个不同的表,我尝试了一个不同的、全新的项目/数据集/表集。结果相同。

这在 dev 或 GAE 环境中。

如果有帮助:

项目编号:1066943214796(注意我没有使用它,我在调用中使用字符串 id),datasetid 和 table 现在在上面的代码中。

[1]使用服务帐户请求 google big query API 时出现 HTTP 错误 500

4

2 回答 2

3

我能够重现并确定问题!

我得到完全相同的错误,除非我重命名数据集。在我将“6bc2cf53x8684x42a4x8149x9ff20fa8beed”更改为现有的更简单的字符串后,一切正常。

您可以尝试不同的数据集名称吗?我将提交一个错误以了解为什么会在此期间发生这种情况。

于 2013-10-09T15:02:59.863 回答
3

您是否已删除并重新创建了您试图插入数据的表?

我们(BigQuery 团队)一直在调查该错误,并认为这是由系统中的缓存不一致问题引起的。如果出现以下情况,缓存可能会处于此状态:

1) 创建表 2) 一些行被流式传输到表 3) 表被删除并重新创建 4) 更多行被流式传输到表 - internalError

知道这是否与您尝试的操作顺序相匹配会很有用。

缓存本身会在大约 30 分钟内使自己失效,此时操作应该会成功。我们正在努力修复,但临时解决方法是避免重用表名。

问题解决后,我将更新此问题。

于 2013-10-02T19:59:59.900 回答