Cả ba đều thêm một lớp metadata lên file Parquet để data lake có ACID, schema evolution, time travel và MERGE/DELETE. Khác nhau chủ yếu ở cách lưu metadata và loại workload mỗi cái được thiết kế cho.
| Delta Lake | Apache Iceberg | Apache Hudi | |
|---|---|---|---|
| Xuất phát | Databricks | Netflix | Uber |
| Metadata | Transaction log _delta_log/ (JSON + checkpoint) | Cây metadata file → manifest list → manifest | Timeline + index theo record |
| Mạnh ở | Gắn chặt Spark/Databricks | Nhiều engine đọc ghi (Spark, Trino, Flink, Snowflake), hidden partitioning, đổi cách partition không phải ghi lại dữ liệu | Upsert/CDC tần suất cao, hai kiểu bảng Copy-on-Write và Merge-on-Read |
Tiêu chí chọn:
- Engine đang dùng: chạy chủ yếu trên Databricks thì Delta. Nhiều engine cùng đọc (Spark ghi, Trino cho analyst, Snowflake cho BI) thì Iceberg, vì hỗ trợ đa engine rộng nhất.
- Kiểu ghi: CDC từ database với rất nhiều update theo khoá thì Hudi Merge-on-Read, hoặc Delta/Iceberg với cơ chế merge-on-read của chúng (deletion vectors, position deletes). Chủ yếu append log sự kiện thì cả ba đều ổn.
- Công sức vận hành: Hudi nhiều cấu hình nhất; Delta trên Databricks ít việc vận hành nhất.
Ranh giới đang mờ dần: Delta UniForm cho phép một bảng Delta được đọc như bảng Iceberg mà không nhân bản dữ liệu.
Time travel (câu "versioning dữ liệu" hay hỏi kèm) dùng để debug, đối soát, khôi phục sau khi ghi sai:
SELECT * FROM orders VERSION AS OF 42;
SELECT * FROM orders TIMESTAMP AS OF '2026-09-24 00:00:00';
RESTORE TABLE orders TO VERSION AS OF 42;Trên Delta, 42 là số version trong DESCRIBE HISTORY; trên Iceberg, VERSION AS OF nhận snapshot id. RESTORE là lệnh của Delta.
Lưu ý: time travel không thay được backup. Delta mặc định chỉ giữ file bị thay thế 7 ngày trước khi VACUUM được phép xoá, Iceberg cũng mất snapshot cũ khi expire snapshots. Cần lịch sử lâu dài cho audit thì lưu có chủ đích (bảng lịch sử, SCD type 2).