1

我们在 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));

我们走在正确的轨道上吗?

4

1 回答 1

5

谢谢你的问题。

此时,BigQueryIO.Read 需要“project:dataset:table”格式的表信息,因此指定装饰器不起作用。
在对此提供支持之前,您可以尝试以下方法:

  • 运行一个批处理阶段,提取整个大查询并过滤掉不必要的数据并处理该数据。如果表真的很大,如果读取的数据量明显小于数据总量,您可能希望将数据分叉到单独的表中。
  • 使用流式数据流。例如,您可以将数据发布到 Pubsub,并创建一个 24 小时窗口的流式传输管道。流式传输管道连续运行,但提供滑动窗口与每日窗口。

希望这可以帮助

于 2015-03-24T23:28:40.640 回答