【发布时间】:2018-12-29 20:27:18
【问题描述】:
为了保持列的唯一性,我的几个客户端将数据流式传输到 BQ 中的临时表中(如果主表中不存在,则重试 2 次,间隔 10 分钟),并使用另一个 cron 作业将临时表合并到列每隔几分钟分区表。
如果暂存表合并到主表中,我需要截断它,但我的客户似乎一直在将数据流式传输到其中。这里有什么推荐吗?
【问题讨论】:
标签: google-bigquery
为了保持列的唯一性,我的几个客户端将数据流式传输到 BQ 中的临时表中(如果主表中不存在,则重试 2 次,间隔 10 分钟),并使用另一个 cron 作业将临时表合并到列每隔几分钟分区表。
如果暂存表合并到主表中,我需要截断它,但我的客户似乎一直在将数据流式传输到其中。这里有什么推荐吗?
【问题讨论】:
标签: google-bigquery
警告:不要截断正在接收流式传输结果的表。
见https://cloud.google.com/bigquery/troubleshooting-errors#streaming:
删除和/或重新创建表可能会在一段时间内创建流式插入有效地传递到旧表并且不会出现在新创建的表中。
截断表的数据(例如,通过使用 WRITE_TRUNCATE 的 writeDisposition 的查询作业)可能同样会导致一致性期间的后续插入被删除。
有关流式传输到 BigQuery 时的替代最佳做法,请参阅:
在这种情况下 - 为什么不让您的多个客户改为写入 Pub/Sub?然后,您可以使用 Dataflow 将这些数据移动到永久表中。
奖励:Pub/sub + Dataflow + BigQuery 可以保证“Exactly Once”交付。
【讨论】: