数据湖库结合了数据湖和数据仓库的优势,支持原始数据的可扩展存储以及结构化和半结构化数据的强大分析和管理。一个核心元素是开放表格式 (OTF),它可以有效地存储结构化数据并允许用户像在传统数据库中一样工作。
Apache Iceberg、Apache Hudi 和 Delta Lake 等常见 OTF 都是开源的,并且与 Apache Spark 和 Presto 等技术兼容。这些格式提供支持 ACID 事务的高效读取、写入和管理操作。它们支持高效的数据分区以提高查询性能、访问历史数据版本以进行分析和恢复,以及对变更数据捕获的本机支持以跟踪和进一步处理数据变更。
CDC在Medallion数据架构中的应用
数据湖站通常使用奖章数据架构来组织数据,分为三层:铜牌、银牌和金牌,以实现高效的数据变更管理和分发 (CDC)。
铜级:存储原始数据。外部 CDC 工具(例如 Debezium 和 Kafka)捕获更改和新数据,并将其写入青铜表。
银级:清理、过滤和丰富原始数据以 老年人保险线索 生成可用的数据集。铜牌级别的更改通过临时视图和合并操作集成到银牌表中。
黄金层:聚合和优化数据以进行业务分析和报告。白银级别的变化通过临时视图和合并操作被采纳到黄金表中。
这种结构提高了数据质量和可靠性,同时 CDC 确保所有数据更改都能有效地通过各层传播,以提供一致的最新且可分析的数据。
Medallion 架构的图形表示,来源
在数据湖房中使用 CDC 的示例
一家电子商务公司既使用传统数据库来管理日常运营,又使用数据湖库来进行高级分析和报告。该公司需要管理大量的销售、客户和产品数据。假设 PostgreSQL 数据库中存在以下初始销售数据:
现在操作数据库中发生了变化。新的销售被输入到操作数据库中
Debezium 识别此输入并向 Kafka 发送一个事件。 Kafka 将事件发送到配置了 Apache Spark 结构化流的使用者。结构化流处理事件并将新记录插入青铜表中。此外,还更新现有数据记录
Debezium 也会检测到此更改并将其作为事件发送到 Kafka。配置了 Apache Spark Structured Streaming 的 Kafka 使用者也会处理此事件,并将更新的记录作为副本插入到 Bronze 表中。 Bronze 表中的数据现在如下所示:
在下一阶段(银级)中,数据将被清理和转换。删除重复项并纠正缺失值。此示例删除 sale_id 为 2 的重复行并更正 customer_id 的任何缺失值。如果无法更正,则删除相应的行。经过清洗和转换后,Silver 表中的数据如下所示:
最后将数据汇总到黄金级别。每个客户的总销售额计算如下:
CDC 示例:Delta Lake 中的变更数据源 (CDF)
Delta Lake 是一个保证 ACID 事务的 OTF。每个数据修改操作,无论是插入、更新还是删除,都被视为一个完整且独立的事务。 Delta Lake 的一个关键特性是事务日志,它记录所有更改。该协议允许恢复数据的先前版本(时间旅行功能)并确保正确记录和应用任何更改。此外,Delta Lake 可以自动检测并应用数据模式的更改,使数据结构管理变得更加容易。