Chuỗi: lakehouse-glossary · Phần 2
Năng suất & công cụ dev
Data versioning và time travel trong Lakehouse
Data versioning và time travel: đọc dữ liệu tại thời điểm quá khứ, debug pipeline, rollback, audit. So sánh Delta, Iceberg, Hudi.
2026-03-172 phút đọcVI
Chuỗi: lakehouse-glossary
- 1.Delta Lake / Apache Iceberg / Apache Hudi — Định dạng bảng cho Lakehouse
- 2.Data versioning và time travel trong Lakehouse(bài này)
- 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
Data Versioning là khả năng ghi nhận, quản lý và truy vết từng phiên bản của dữ liệu theo thời gian.
Time Travel cho phép đọc lại trạng thái của dữ liệu ở một thời điểm quá khứ, như một dạng "Git cho dữ liệu."
2. Mục tiêu
- Truy xuất dữ liệu lịch sử: hỗ trợ kiểm tra, debug, audit
- Khôi phục dữ liệu khi pipeline lỗi hoặc ghi sai
- Phục vụ các use case cần so sánh dữ liệu theo thời gian
- Cung cấp tính lineage ngược (backtracking)
3. Cơ chế hoạt động
Tùy thuộc định dạng (Delta Lake, Iceberg, Hudi), time travel hoạt động qua:
| Cơ chế | Mô tả kỹ thuật |
|---|---|
| Snapshotting | Lưu metadata snapshot (versioned manifest) |
| Append-only log | Thêm các commit log vào metadata timeline |
| Checkpoint | Định kỳ lưu checkpoint tăng tốc đọc |
4. Ứng dụng thực tế (Use cases)
| Use Case | Mô tả |
|---|---|
| Debug pipeline | So sánh dữ liệu "trước – sau" khi pipeline lỗi |
| Undo ingestion | Rollback dữ liệu về trước khi load nhầm |
| So sánh kỳ | Truy xuất bảng "customer" tại ngày cuối Q1 và Q2 |
| Audit log | Truy lại ai thay đổi gì trong bảng khách hàng |
| Regression Testing | Test schema/dữ liệu trên snapshot trước |
5. Sample code (Delta Lake – Time Travel)
# Ghi dữ liệu
df.write.format("delta").mode("append").save("/lake/customers")
# Đọc phiên bản theo version
df_v1 = spark.read.format("delta").option("versionAsOf", 1).load("/lake/customers")
# Đọc theo timestamp
df_time = spark.read.format("delta").option("timestampAsOf", "2025-06-01T12:00:00").load("/lake/customers")6. So sánh giữa 3 hệ thống
| Tính năng | Delta Lake | Iceberg | Hudi |
|---|---|---|---|
| Time Travel | versionAsOf / timestampAsOf | snapshotId / timestamp | commitId |
| Versioning | ACID log | Manifest tree | Timeline log |
| Tích hợp Spark | Rất tốt | Tốt | Tốt |
| Metadata format | JSON log | Manifest | Avro/Timeline |
7. Sơ đồ dòng thời gian
T1 ──────┐
▼
V1 (Ghi lần đầu)
▼
T2 ──────┐
▼
V2 (Ghi thêm)
▼
T3 ──────┐
▼
V3 (Cập nhật)
--> Truy vấn lại V1, V2, V3 bằng Time Travel
