【发布时间】:2021-01-15 16:37:42
【问题描述】:
我使用 JAVA 使用 InsertAll 方法将行插入 BigQuery。它总是工作正常。但是当我们尝试从 JAVA 代码更新同一行时,出现以下错误,
com.google.cloud.bigquery.BigQueryException 对表 project123:mydataset.test 的 UPDATE 或 DELETE DML 语句会影响流缓冲区中的行,这是不受支持的
所以我尝试了 BigQueryConsole。
我使用 INSERT 查询插入一行,然后立即UPDATE 同一行。效果很好。
当我阅读 BIGQUERY 的文章时,他们提到了来自 JAVA 的 InsertAll 和使用 Streaming Buffer 的控制台的 INSERT 查询。在这种情况下,控制台查询执行应该会失败。
为什么控制台查询工作正常?但是从 Java InsertAll 开始,它向我抛出了一个异常。
如果有人帮助我了解确切的细节,那将非常有帮助。
如果有任何建议使用从 Java 而不是 InsertAll 到 BigQuery 的 Native insert 查询插入,这将是一个很大的帮助。
请找代码sn-p
首先使用以下代码 sn-p 将值插入 BigQuery
Map<String, Object> map = new HashMap<>();
map.put("1", "name");
map.put("2", "age");
BigQuery bQuery = BigQueryOptions.newBuilder().setCredentials(credentials).setProjectId(id)
.build().getService();
InsertAllResponse response = bQuery .insertAll(InsertAllRequest.newBuilder(tableId).addRow(map).build());
一旦它被插入,我会尝试使用以下代码 sn-p 更新该表中的行
String updateQuery = String.format( "UPDATE `%s` SET name = \"%s\" WHERE age = \"%s\")", name, age);
QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();
bQuery.query(queryConfig);
插入工作正常。当我尝试更新相同的插入行时,出现流缓冲区错误。
提前致谢。
【问题讨论】:
-
如果你能提供你得到的错误的截图或堆栈跟踪就更好了。会更容易理解问题
-
感谢您的 cmets。我在上面发布的错误只是我在本地得到的。如果您遇到过此类错误,请添加您的建议
-
您在哪里读到控制台上的 INSERT 在流中添加数据?
-
@guillaumeblaquiere 当我尝试通过控制台更新列(我使用插入查询添加)时工作正常。但是当我从 Java API 尝试同样的操作时,它会抛出 Streaming buffer 错误。
标签: java google-cloud-platform google-bigquery