与谷歌数据流的复杂加入

Mik*_*ith 7 etl join google-cloud-dataflow

我是新手,试图了解我们如何将批量ETL流程重新编写到Google Dataflow中.我已经阅读了一些文档,举几个例子.

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

所以这里有几个问题:

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

是否有更高级别的"更高级别"ETL产品?我一直在关注Spark和Flink.

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

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

我显然被Google Dataflow所吸引,因为它首先是API,而并行处理功能似乎非常合适(我们被要求从批处理过夜到增量处理).

对于这个用例,Dataflow的一个很好的工作示例将真正推动采用!

谢谢,迈克S.

Ben*_*ers 8

听起来Dataflow非常合适.我们允许您编写一个管道,该管道接受一些PCollection业务事件并执行ETL.管道可以是批处理(定期执行)或流式处理(每当输入数据到达时执行).

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

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

日期带状连接听起来像是非常适合窗口,允许您编写消耗数据窗口的管道(例如,每小时窗口,每日窗口,每天滑动的7天窗口等).


编辑:提及GroupByKeyCoGroupByKey.