首页 > 解决方案 > java bigquery存储写api

问题描述

使用此处记录的 java bigquery 存储 api https://cloud.google.com/bigquery/docs/write-api。根据此https://cloud.google.com/bigquery/docs/write-api#error_handling在发生不可重试错误之一时保持写入流长期存在并刷新它

我坚持使用默认流。我有两个表和负责写入每个表的代码的不同部分,维护自己的流编写器。

如果数据在流动,一切都很好。没有错误。但是我也想测试刷新流编写器的工作,所以我等待默认流超时(10 分钟)关闭流并再次尝试写入。我可以很好地创建流,那里没有错误,但是对于其中一个表,我不断收到被取消的错误,包含在前提条件中失败,使我的代码一次又一次地刷新。

原始错误,因为流因不活动而关闭

! io.grpc.StatusRuntimeException: FAILED_PRECONDITION: Stream is closed due to com.google.api.gax.rpc.AbortedException: io.grpc.StatusRuntimeException: ABORTED: Closing the stream because it has been inactive for 600 seconds. Entity: projects/<id>/datasets/<id>/tables/<id>/_default
! at com.google.cloud.bigquery.storage.v1beta2.StreamWriterV2.appendInternal(StreamWriterV2.java:263)
! at com.google.cloud.bigquery.storage.v1beta2.StreamWriterV2.append(StreamWriterV2.java:234)
! at com.google.cloud.bigquery.storage.v1beta2.JsonStreamWriter.append(JsonStreamWriter.java:114)
! at com.google.cloud.bigquery.storage.v1beta2.JsonStreamWriter.append(JsonStreamWriter.java:89)

新流上的进一步重复错误

! io.grpc.StatusRuntimeException: FAILED_PRECONDITION: Stream is closed due to com.google.api.gax.rpc.CancelledException: io.grpc.StatusRuntimeException: CANCELLED: io.grpc.Context was cancelled without error
! at com.google.cloud.bigquery.storage.v1beta2.StreamWriterV2.appendInternal(StreamWriterV2.java:263)
! at com.google.cloud.bigquery.storage.v1beta2.StreamWriterV2.append(StreamWriterV2.java:234)
! at com.google.cloud.bigquery.storage.v1beta2.JsonStreamWriter.append(JsonStreamWriter.java:114)
! at com.google.cloud.bigquery.storage.v1beta2.JsonStreamWriter.append(JsonStreamWriter.java:89)

我不确定为什么它被取消而没有错误。有关如何调试此问题的任何指示或有关如何维护和刷新长寿命流式编写器的建议?

标签: javagoogle-cloud-platformgoogle-bigquery

解决方案


更新 Java 客户端库版本应该可以解决此问题,因为为 JsonStreamwriter 添加了重新连接支持。它应该处理重试,而不是抛出此错误。


推荐阅读