gcp上的数据湖、层和etl处理

3qpi33ja  于 2021-05-24  发布在  Spark
关注(0)|答案(1)|浏览(1185)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

三个月前关门了。
改进这个问题

我来自prem/hadoop数据平台背景,现在想了解在gcp云技术上这样做的良好实践。
如图所示,我使用hdfs/hive来存储所有3层的数据:“landing”、“cleansed”和“processed”。对于etl进程,我使用了spark。它还支持不同的摄取模式:插入新记录、插入以及更新以前的数据。
对于“服务层”,我们使用了presto。同样,使用像deltalake这样的新技术,可以保持几乎相同的体系结构,以统一的方式支持流式处理和批处理。
在gcp上,我可以想到以下选项:
方案1:
“登陆层”是谷歌存储。
数据流“etl进程”将数据转换并加载到“清理层”中。“清理层”存储为bigquery表。
“清理层”到“处理层”etl是在bigquery本身内部完成的
方案2:
“登陆层”是谷歌存储。
dataflow/dataproc“etl进程”将数据转换并存储在“净化层”中,“净化层”存储在云存储中。
“清理层”到“处理层”etl使用dataflow/dataproc完成,“处理层”也在云存储中。
“服务层”是bigquery表。“处理层”对bigquery加载是通过对bigquery性能的非规范化来完成的。
我的问题:
正如选项1中所解释的:在bigquery内部执行etl是一种好的实践吗(使用bq dml语句)。我的印象是,重型etl不应该在bq中完成,因为它不是为重型数据突变而设计的。
在选项2中:“processed layer”到bigquery加载可以使用b'q load来完成,如果数据摄取模式是insert only。如果我们必须更新以前的数据怎么办?在这种情况下,如何使用bq load,因为它只支持append和replace/overwrite模式。
进行etl和处理bq表更新的一般良好实践是什么?

r8uurelv

r8uurelv1#

设计这个解决方案有很多方法,我的建议是:

数据湖:
按原样将数据从源系统加载到bigquery,这样数据库操作将只执行insert。
数据中心:
在这里,您可以维护oltp结构,但是实现缓慢变化的维度(类型ii)。
(a) 为所有新事务插入数据
(b) 用于退出事务的insert也只更新操作列,如end\ U date和active\ U flag。所以,你可以保存历史记录。


数据分析:
在这里,您可以使用类似于scd type ii的数据集线器构建维度建模,以最小化诸如update之类的大型dml操作

相关问题