Chuỗi: lakehouse-glossary · Phần 1
Năng suất & công cụ dev
Delta Lake / Apache Iceberg / Apache Hudi — Định dạng bảng cho Lakehouse
Ba định dạng bảng cho Lakehouse: Delta Lake, Iceberg, Hudi. ACID, time travel, schema evolution và khi nào dùng cái nào.
2026-03-172 phút đọcVI
Chuỗi: lakehouse-glossary
- 1.Delta Lake / Apache Iceberg / Apache Hudi — Định dạng bảng cho Lakehouse(bài này)
- 2.Data versioning và time travel trong Lakehouse
- 3.Schema evolution và enforcement trong Lakehouse
- 4.Tối ưu định dạng file – Parquet, Delta, Z-Ordering
- 5.Compaction và chiến lược quản lý file
- 6.Tối ưu bảng và chiến lược clustering
- 7.Định dạng bảng và quản lý metadata
- 8.Governance — Data catalog, lineage, kiểm soát truy cập
- 9.Security – Mã hóa, masking, tokenization
- 10.Metadata – Metadata store, lineage, discovery
- 11.Change Data Capture (CDC) trong Lakehouse
1. Khái niệm
Đây là 3 định dạng lưu trữ dạng bảng (table format) dành cho hệ thống Lakehouse. Chúng giúp tổ chức dữ liệu dạng bảng trên file-based storage (Parquet, ORC) mà vẫn hỗ trợ:
- ACID transaction (giao dịch)
- Time travel (truy xuất phiên bản lịch sử)
- Schema evolution (tiến hóa schema)
- Metadata indexing (chỉ mục hóa metadata)
| Định dạng | Tổ chức phát triển | Ưu điểm đặc trưng |
|---|---|---|
| Delta Lake | Databricks | ACID mạnh, dễ tích hợp Spark, hỗ trợ time travel tốt |
| Iceberg | Apache Foundation | Metadata độc lập, query hiệu quả, tốt cho Presto/Trino |
| Hudi | Apache Foundation | Hỗ trợ write/update mạnh, thích hợp cho ingestion dày |
2. Mục đích
Trong hệ Lakehouse, file như Parquet không đủ để mô tả "tính sống" của dữ liệu. Table format giải quyết:
- Dữ liệu cập nhật được (insert/update/delete)
- Tính nhất quán khi ghi và đọc
- Khôi phục phiên bản cũ nếu có lỗi
3. Thành phần
- Storage Layer: Object Storage (HDFS, S3, GCS, MinIO…)
- Table Format Layer: Delta / Iceberg / Hudi
- Compute Engine: Spark, Flink, Presto, Trino, Dremio
- Catalog: Hive Metastore, AWS Glue, Nessie, Unity Catalog
4. Ứng dụng (Use cases)
| Use Case | Mô tả |
|---|---|
| 1. Update bảng khách hàng | Ghi đè dữ liệu mới thay vì ghi chồng |
| 2. Time travel | Truy xuất phiên bản bảng tại thời điểm T |
| 3. ACID Transaction | Gộp insert/update/delete thành một giao dịch duy nhất |
| 4. Xử lý dữ liệu tuần tự | Ghi batch hoặc stream với consistency |
| 5. Khôi phục sau lỗi | Rollback về phiên bản ổn định sau lỗi dữ liệu |
5. Sample code (Delta Lake + Spark)
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("DeltaLakeExample") \
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
.config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
.getOrCreate()
# Ghi dữ liệu dưới định dạng Delta
df.write.format("delta").mode("overwrite").save("/data/delta/customers")
# Đọc và truy vấn time travel
df_v1 = spark.read.format("delta").option("versionAsOf", 1).load("/data/delta/customers")6. Sơ đồ kiến trúc tích hợp
┌──────────────┐ ┌──────────────┐
│ Spark/Flink │──────▶│ Delta / Iceberg / Hudi │────▶ Object Storage (Parquet)
└──────────────┘ └──────────────┘
│ │
▼ ▼
Time Travel Update/Delete
7. Hành động tiếp theo
- Học cấu trúc thư mục và file manifest của Iceberg, Delta và Hudi
- Viết Spark pipeline ghi dữ liệu vào Delta và time travel
- So sánh performance Iceberg vs Delta vs Hudi
- Đọc tài liệu: Iceberg Spec, Delta Lake Docs
- Thử tích hợp 1 engine query như Trino hoặc Dremio vào Delta table
