【问题标题】:Complex join with google dataflow与谷歌数据流的复杂连接
【发布时间】:2016-01-27 17:26:50
【问题描述】:

我是一个新手,试图了解我们如何将批处理 ETL 流程重写到 Google Dataflow 中。我已经阅读了一些文档,运行了一些示例。

我提议新的 ETL 流程将由业务事件(即源 PCollection)驱动。这些将触发该特定业务实体的 ETL 流程。 ETL 过程将从源系统中提取数据集,然后将这些结果(PCollection)传递到下一个处理阶段。处理阶段将涉及各种类型的连接(包括笛卡尔连接和非键连接,例如带日期的连接)。

这里有几个问题:

(1) 我提出的方法是否有效且高效?如果不是更好的话,我还没有看到任何关于使用 Google Dataflow 的现实世界复杂 ETL 流程的演示,只有简单的场景。

是否有更适合的“更高级别”ETL 产品?关注 Spark 和 Flink 有一段时间了。

尽管只有大约 30 个核心表(经典 EDW 维度和事实)和大约 1000 个转换步骤,但我们当前的 ETL 相当复杂。源数据很复杂(大约 150 个 Oracle 表)。

(2) 复杂的非键连接,如何处理?

我显然被 Google Dataflow 所吸引,因为它首先是一个 API,而且并行处理功能似乎非常适合(我们被要求从一夜之间的批处理转向增量处理)。

为这个用例提供一个很好的 Dataflow 示例将真正推动采用!

谢谢, 迈克S

【问题讨论】:

    标签: join etl google-cloud-dataflow


    【解决方案1】:

    听起来 Dataflow 很合适。我们允许您编写一个接受PCollection 业务事件并执行 ETL 的管道。管道可以是批处理(定期执行)或流式处理(只要输入数据到达就执行)。

    各种连接在数据流中大部分是相对容易表达的。对于笛卡尔积,您可以查看使用 side inputs 使 PCollection 的内容可用作处理另一个 PCollection 中每个元素的输入。

    您还可以查看使用GroupByKeyCoGroupByKey 来实现连接。这些扁平化多个输入,并允许在一个地方使用相同的键访问所有值。您还可以使用Combine.perKey 计算与键关联的所有元素的关联和交换组合(例如,SUM、MIN、MAX、AVERAGE 等)。

    带日期的连接听起来很适合windowing,它允许您编写一个消耗数据窗口的管道(例如,每小时窗口、每日窗口、每天滑动的 7 天窗口等) .).


    编辑:提及GroupByKeyCoGroupByKey

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多