我们在 BigQuery 中有一个大表,数据正在流入其中。每天晚上,我们都想运行处理过去 24 小时数据的 Cloud Dataflow 管道。
在 BigQuery 中,可以使用“表装饰器”来执行此操作,并指定我们想要的范围,即 24 小时。
从 BQ 表中读取时,Dataflow 中是否可能以某种方式实现相同的功能?
我们已经查看了 Dataflow 的“ Windows ”文档,但我们无法确定这是否是我们需要的。到目前为止,我们想出了这个(我们希望最后 24 小时的数据使用FixedWindows
),但它仍然尝试读取整个表:
pipeline.apply(BigQueryIO.Read
.named("events-read-from-BQ")
.from("projectid:datasetid.events"))
.apply(Window.<TableRow>into(FixedWindows.of(Duration.standardHours(24))))
.apply(ParDo.of(denormalizationParDo)
.named("events-denormalize")
.withSideInputs(getSideInputs()))
.apply(BigQueryIO.Write
.named("events-write-to-BQ")
.to("projectid:datasetid.events")
.withSchema(getBigQueryTableSchema())
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE) .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED));
我们走在正确的轨道上吗?