Dataflow Template/Pattern 通过流式传输 Pubsub 数据来丰富固定的 BigQuery 数据
Dataflow Template/Pattern in enriching fixed BigQuery data by streaming Pubsub data
我有一个 BigQuery 维度 table(变化不大)和来自 PubSub 的流式 JSON 数据。我想要做的是查询这个维度 table,并通过连接来自 PubSub 的传入数据来丰富数据,然后将这些连接数据流写入另一个 BigQuery table.
由于我是Dataflow/Beam的新手,概念对我来说还不是很清楚(或者至少我开始写代码有困难),我有很多问题:
- 最好的模板或模式是什么?我应该先执行 BigQuery 的 PTransform(然后执行 PubSub 的 PTransform)还是先执行 PubSub 的 PTransform?
- 如何加入?喜欢
ParDo.of(...).withSideInputs(PCollectionView<Map<String, String>> map)
?
- PubSub 的最佳 window 设置是什么? BigQuery 的 PTransform 部分的 window 设置与 Pubsub 的 PTransform 部分不同是否正确?
您需要加入两个 PCollection。
- 包含来自 Pub/Sub 的数据的 PCollection。这可以通过使用 PubSubIO.Read PTransform.
创建
- 包含来自 BigQuery 的数据的 PCollection。如果数据是静态的,例如 BigQueryIO.Read transform can be used. If data can change though, the current BigQuery transforms available in Beam probably will not work. One option might be to use transform
PeriodicImpulse
and your own ParDo
to create a periodically changing input. See here(请注意最近添加了 PeriodicImpulse
转换)。
您可以在 ParDo
中组合数据,其中 PCollection
(1) 是主要输入,PCollection
(2) 是辅助输入(类似于上面的示例) .
最后,您可以使用 BigQueryIO.Write 转换将输出流式传输到 BigQuery。
我有一个 BigQuery 维度 table(变化不大)和来自 PubSub 的流式 JSON 数据。我想要做的是查询这个维度 table,并通过连接来自 PubSub 的传入数据来丰富数据,然后将这些连接数据流写入另一个 BigQuery table.
由于我是Dataflow/Beam的新手,概念对我来说还不是很清楚(或者至少我开始写代码有困难),我有很多问题:
- 最好的模板或模式是什么?我应该先执行 BigQuery 的 PTransform(然后执行 PubSub 的 PTransform)还是先执行 PubSub 的 PTransform?
- 如何加入?喜欢
ParDo.of(...).withSideInputs(PCollectionView<Map<String, String>> map)
? - PubSub 的最佳 window 设置是什么? BigQuery 的 PTransform 部分的 window 设置与 Pubsub 的 PTransform 部分不同是否正确?
您需要加入两个 PCollection。
- 包含来自 Pub/Sub 的数据的 PCollection。这可以通过使用 PubSubIO.Read PTransform. 创建
- 包含来自 BigQuery 的数据的 PCollection。如果数据是静态的,例如 BigQueryIO.Read transform can be used. If data can change though, the current BigQuery transforms available in Beam probably will not work. One option might be to use transform
PeriodicImpulse
and your ownParDo
to create a periodically changing input. See here(请注意最近添加了PeriodicImpulse
转换)。
您可以在 ParDo
中组合数据,其中 PCollection
(1) 是主要输入,PCollection
(2) 是辅助输入(类似于上面的示例) .
最后,您可以使用 BigQueryIO.Write 转换将输出流式传输到 BigQuery。