首页 > 解决方案 > 使用 apache beam 中的 beam.io.gcp.bigquery.WriteToBigQuery 模块写入日期分区的 Bigquery 表

问题描述

我正在尝试编写一个数据流作业,该作业需要处理位于存储中的日志并将它们写入不同的 BigQuery 表中。将使用哪些输出表取决于日志中的记录。因此,我对日志进行了一些处理,并使用基于日志中的值的键生成它们。之后,我将日志分组到密钥上。我需要将按同一键分组的所有日志写入表。

我正在尝试使用beam.io.gcp.bigquery.WriteToBigQuery带有可调用的模块作为表参数,如文档here中所述

我想使用一个日期分区表,因为这可以很容易地让我write_truncate在不同的分区上。

现在我遇到两个主要问题:

The destination table's partition table_name_x$20190322 is outside the allowed bounds. You can only stream to partitions within 31 days in the past and 16 days in the future relative to the current date."

这似乎是流插入的限制,有什么方法可以进行批量插入?

也许我正在接近这个错误,应该使用另一种方法。任何有关如何解决这些问题的指导表示赞赏。

我使用 python 3.5 和 apache-beam=2.13.0

标签: python-3.xgoogle-bigquerygoogle-cloud-dataflowapache-beam

解决方案


当混合使用摄取时间分区表和列分区表时,可以记录该错误消息(请参阅此类似问题)。从链接总结,不可能使用基于列的分区(不是摄取时间分区)并写入具有分区后缀的表。

在您的情况下,由于您想根据日志中的值写入不同的表并在每个表中都有分区,所以在选择哪个表时放弃使用分区装饰器(使用“[prefix]_YYYYMMDD”)然后让每个单个表是基于列的分区


推荐阅读