离线数仓 ETL:Spark、Hive、Iceberg 如何协作
离线数仓通常用 Spark 执行 ETL,用 Hive Metastore 管理元数据,用 Iceberg 等表格式支持快照、Schema 演进和多引擎访问。
离线数仓 ETL:Spark、Hive、Iceberg 如何协作
离线数仓的核心任务是把原始数据加工成可复用的数据层。常见分层包括 ODS、DWD、DWS、ADS。
Spark、Hive、Iceberg 经常一起出现:Spark 负责计算,Hive Metastore 管理元数据,Iceberg 管理湖仓表。
Rendering diagram...
数仓分层
ODS 保存原始数据,尽量少加工。
DWD 清洗成明细事实表,字段标准化。
DWS 按主题汇总,比如用户主题、订单主题、商品主题。
ADS 面向具体应用,比如报表、看板、推荐特征。
Spark ETL
orders = spark.read.table("ods.orders")
clean_orders = orders.filter("status is not null")
clean_orders.writeTo("dwd.orders_detail").append()
Spark 适合这种大批量清洗和转换。
Hive Metastore
Hive Metastore 提供表、库、分区、Schema 的元数据管理。Spark、Trino、Flink 都可以通过 Catalog 访问这些表。
Iceberg
Iceberg 提供表格式能力,包括快照、Schema 演进、分区演进、隐藏分区、多引擎访问。
CREATE TABLE prod.db.orders (
order_id BIGINT,
user_id BIGINT,
amount DECIMAL(12, 2),
order_date DATE
) USING iceberg
PARTITIONED BY (days(order_date));
小结
离线数仓不是一个引擎能解决所有问题。Spark 负责计算,Catalog 负责元数据,Iceberg 负责表格式和快照,多引擎共同访问同一份数据。