【发布时间】:2021-12-02 13:37:37
【问题描述】:
我有一个 Dataflow 管道,它从 PubSub Lite 读取消息并将数据流式传输到 BigQuery 表中。该表按天分区。查询表时:
SELECT * FROM `my-project.my-dataset.my-table` WHERE DATE(timestamp) = "2021-10-14"
BigQuery 用户界面告诉我 This query will process 1.9 GB when run。但是当实际运行查询时,我没有得到任何结果。我的管道现在运行了一整周,过去两天我得到了相同的结果。但是,对于 2021-10-11 和之前的几天,我看到了实际结果。
我目前使用的是 Apache Beam 2.26 版,我的数据流编写器如下所示:
return BigQueryIO.<Event>write()
.withSchema(createTableSchema())
.withFormatFunction(event -> createTableRow(event))
.withCreateDisposition(CreateDisposition.CREATE_NEVER)
.withWriteDisposition(WriteDisposition.WRITE_APPEND)
.withTimePartitioning(new TimePartitioning().setType("DAY").setField("timestamp"))
.to(TABLE);
为什么 BigQuery 花了这么长时间将值提交到分区,但同时告诉我实际上有可用数据?
编辑 1:
【问题讨论】:
-
如果您的表确实是分区创建的,并且该日期没有数据,查询编辑器应该告诉您将处理 0b,这就是分区的工作方式。根据您的描述,接缝表分区无法正常工作。请在 BigQuery 上打开您的表并查看详细信息 -> 表信息,您可以看到字段 Table Type Partitioned Partitioned by DAY 请同时提供您的数据示例和数据架构(请删除敏感信息)。这样我可以尝试重现。
-
此外,向主题发布一条包含表数据的消息,并在数据流作业中显示输出,它必须说明数据是否已写入或是否发生了错误。
gcloud pubsub topics publish test-topic --message='{"ts": "2021-10-25 00:00:00 UTC","storeName":"zabka","itemId": "3","itemName": "New line from dataflow"}'
标签: google-bigquery google-cloud-dataflow google-cloud-pubsublite