【发布时间】:2020-06-06 17:10:43
【问题描述】:
以下代码 sn-p 显示了 BigQuery 的写入方法(它从 PubSub 中获取数据)。 “写入 BigQuery”数据流步骤接收 TableRow 数据,但它以非常高的延迟(超过 3-4 小时)写入 BigQuery,甚至根本不写入数据。日志中没有错误/警告,我可以看到数据到达这里。我希望它尽可能通用,所以不想在代码中提供模式。这段代码 sn-p 是否有任何可能导致此行为的错误?
PCollection<TableRow> tableRows;
...
tableRows.apply("Write to BigQuery",
BigQueryIO.writeTableRows().to(options.getTable())
.withExtendedErrorInfo()
.withCreateDisposition(CreateDisposition.CREATE_NEVER)
.withWriteDisposition(WriteDisposition.WRITE_APPEND)
.withMethod(Method.STREAMING_INSERTS)
.withFailedInsertRetryPolicy(InsertRetryPolicy.retryTransientErrors()));
更新: 我将代码修改为:
tableRows.apply("Write to BigQuery",
BigQueryIO.writeTableRows().to(options.getTable())
.withCreateDisposition(CreateDisposition.CREATE_NEVER));
现在它可以正常工作了。原版代码有什么问题?
【问题讨论】:
-
您的管道中是否设置了任何窗口?
-
@JoachimIsaksson 仅 1 分钟
-
您确定数据不存在,它可能在流缓冲区中吗?您可以通过执行“SELECT * FROM table WHERE _PARTITIONTIME IS NULL”来检查这一点
-
为问题添加了更新。 @xeli
-
您能否提供更多详细信息,说明您如何检查选项 1 与选项 2 的延迟情况。
标签: google-bigquery google-cloud-dataflow apache-beam apache-beam-io