跳到主要内容

Delta Lake

问题

什么是 Delta Lake?它和 Iceberg 有什么区别?

答案

Delta Lake 核心特性

Delta Lake 是 Databricks 开源的数据湖表格式,基于 Parquet + JSON 事务日志实现 ACID。

特性说明
ACID 事务事务日志保证原子性
时间旅行查询/恢复历史版本
Schema 演进添加/合并 Schema
Upsert(MERGE)高效更新/删除
Z-Ordering多维聚类优化查询
Liquid Clustering自动优化数据布局

事务日志机制

事务日志原理
  • 每次操作在 _delta_log/ 目录产生一个 JSON 文件
  • JSON 记录添加/删除了哪些 Parquet 文件
  • 每 10 次提交自动生成 Checkpoint(Parquet 格式)加速读取
  • 通过日志重放确定当前表的文件集合

常用操作

-- Spark SQL 操作 Delta Lake

-- 创建 Delta 表
CREATE TABLE events (
event_id BIGINT,
user_id BIGINT,
event_name STRING,
event_time TIMESTAMP
) USING delta
PARTITIONED BY (date_trunc('day', event_time));

-- MERGE(Upsert):CDC 数据合并
MERGE INTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;

-- 时间旅行
SELECT * FROM events VERSION AS OF 5;
SELECT * FROM events TIMESTAMP AS OF '2024-01-01';

-- 恢复到历史版本
RESTORE TABLE events TO VERSION AS OF 5;

-- Z-Ordering:优化多列查询
OPTIMIZE events ZORDER BY (user_id, event_name);

-- 清理历史版本
VACUUM events RETAIN 168 HOURS; -- 保留 7 天

Delta Lake vs Iceberg

维度Delta LakeIceberg
开源方DatabricksNetflix → Apache
元数据格式JSON 事务日志Manifest + Metadata
分区演进⚠️ 有限✅ 强
隐藏分区
多引擎支持Spark 原生,其他通过 UniForm多引擎原生支持
Databricks 集成⭐⭐⭐⭐⭐⭐⭐⭐
社区趋势稳定增长最快
数据布局优化Z-Order、Liquid ClusteringSort Order
Delta Lake 的局限
  • 深度绑定 Spark/Databricks 生态
  • 其他引擎(Trino、Flink)支持不如 Iceberg 完整
  • 分区演进能力较弱
  • UniForm:Delta 3.0 新特性,可同时兼容 Iceberg 和 Hudi 读取

常见面试问题

Q1: 什么是 Z-Ordering?

答案: Z-Ordering 是一种多维数据排列技术,将多列的值映射到一维空间,使得查询多列条件时能高效跳过不相关的数据文件。适合多列联合过滤的场景,但不适合高基数列。

Q2: VACUUM 操作的作用是什么?

答案

  • 清理不再被引用的历史 Parquet 文件
  • 节省存储空间
  • 默认保留 7 天(168 小时)
  • 注意:VACUUM 后无法再时间旅行到被清理的版本

相关链接