gpt4 book ai didi

apache-spark - GCP 上的数据湖、图层和 ETL 处理

转载 作者:行者123 更新时间:2023-12-02 21:59:55 24 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

1年前关闭。




Improve this question




enter image description here
我来自本地/hadoop 数据平台背景,现在想了解在 GCP 云技术上执行此操作的良好实践。
如图所示,我使用 HDFS/Hive 来存储所有 3 层的数据:“Landing”、“Cleansed”和“Processed”。对于 ETL 流程,我使用了 Spark。它还支持不同的摄取模式:插入新记录、插入以及更新以前的数据。
对于“服务层”,我们使用了 Presto。
此外,使用 DeltaLake 等新技术,可以保持几乎相同的架构,以统一的方式支持流式处理和批处理。
在 GCP 上,我可以想到以下选项:
选项1:

  • “登陆层”是谷歌存储。
  • DataFlow“ETL流程”将数据转换并加载到“Cleansed Layer”中。“Cleansed Layer”是
    存储为 BigQuery 表。
  • “清理层”到“处理层”ETL 在 BigQuery 本身内完成

  • 选项 2:
  • “登陆层”是谷歌存储。
  • DataFlow/DataProc“ETL流程”将数据转换并存储在“Cleansed Layer”中。“Cleansed Layer”存储在Cloud Store中。
  • “清理层”到“处理层”ETL 使用 DataFlow/DataProc 完成,“处理层”也在 Cloud Store 中。
  • “服务层”是 BigQuery 表。BigQuery 加载的“处理层”是通过对 BigQuery 性能的非规范化来完成的。

  • 我的问题:
  • 如选项 1 中所述:在 BigQuery 本身内部执行 ETL 是一种好习惯吗? (使用 BQ DML 语句)。我的印象是不应该在 BQ 中完成繁重的 ETL,因为它不是为大量数据突变而设计的。
  • 在选项 2 中:如果数据摄取模式仅插入,则可以使用 b'q load' 完成 BigQuery 加载的“已处理层”。如果我们必须更新以前的数据怎么办?在这种情况下如何使用 bq-load,因为它只支持追加和替换/覆盖模式。替换一个大表只是为了更新它的一部分记录是不高效的。
  • 进行 ETL 和处理 BQ 表更新的一般良好做法是什么?
  • 最佳答案

    有很多方法可以设计这个解决方案,这是我的建议:
    enter image description here
    数据湖:
    将数据从源系统按原样加载到 BigQuery,因此数据库操作将只是 INSERT。
    数据中心:
    在这里,您可以维护 OLTP 结构,但实现渐变维度(Type-II)。 (A) 为所有新交易插入数据
    (B) INSERT 用于退出事务,也只更新操作列,如 END_DATE 和 ACTIVE_FLAG。因此,您可以维护记录的历史记录。
    enter image description here
    enter image description here
    数据分析:
    在这里,您可以使用像 Data Hub 这样的 SCD Type-II 构建维度建模,以最大限度地减少像 UPDATE 这样的巨大 DML 操作

    关于apache-spark - GCP 上的数据湖、图层和 ETL 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64207513/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com