Chuỗi: lakehouse-glossary · Phần 4
Năng suất & công cụ dev
Tối ưu định dạng file – Parquet, Delta, Z-Ordering
Tối ưu định dạng file trong Lakehouse: Parquet, Delta, Z-Ordering. Chi phí lưu trữ, hiệu năng truy vấn và best practices.
2026-03-173 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
- 3.Schema evolution và enforcement trong Lakehouse
- 4.Tối ưu định dạng file – Parquet, Delta, Z-Ordering(bài này)
- 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
-
File Format Optimization là tập hợp các kỹ thuật để tối ưu hóa hiệu suất lưu trữ và truy xuất dữ liệu thông qua cấu trúc file, cách tổ chức cột, và layout vật lý trên storage.
-
Trong kiến trúc Lakehouse, các định dạng phổ biến gồm:
- Parquet – định dạng cột, nén tốt, tối ưu cho analytical queries
- Delta – mở rộng Parquet với khả năng ACID, time travel, schema evolution
- Z-Ordering – kỹ thuật sắp xếp dữ liệu để tăng tốc độ lọc truy vấn
2. Vì sao quan trọng?
| Khía cạnh | Lợi ích thực tế |
|---|---|
| Storage cost | Nén hiệu quả giúp giảm chi phí lưu trữ |
| Query performance | Giảm IO, tăng tốc scan dữ liệu |
| Scalability | Tối ưu partition + layout giúp hệ thống scale tốt |
| Reliability | Hỗ trợ rollback, audit, merge tốt hơn |
3. So sánh định dạng file
| Đặc điểm | CSV | Parquet | Delta |
|---|---|---|---|
| Lưu trữ dạng cột | Không | Có | Có |
| Hỗ trợ schema | Không | Có | Có (schema evolution) |
| Hỗ trợ ACID | Không | Không | Có |
| Time travel | Không | Không | Có |
| Merge / Delete | Không | Không | Có (compaction) |
4. Z-Ordering – kỹ thuật sắp xếp vật lý
Z-Ordering là cách reorder lại dữ liệu trong file Parquet theo các cột hay dùng để lọc, giúp:
- Spark đọc ít file hơn (data skipping)
- Tăng tốc query có điều kiện lọc trên
WHERE
# Ví dụ: Z-Ordering trên cột customer_id
spark.sql("""
OPTIMIZE delta.`/lake/transactions`
ZORDER BY (customer_id)
""")5. Best practices
| Ngữ cảnh | Chiến lược file format |
|---|---|
| Batch loading lớn | Dùng Parquet hoặc Delta, chia nhỏ file ~100–250MB |
| Truy vấn theo ngày | Partition theo event_date, Z-Order theo customer_id |
| Use case streaming + batch | Dùng Delta + auto compaction + checkpoint |
| Cần versioning và audit | Dùng Delta với VACUUM định kỳ |
6. Cách ghi Parquet và Delta trong Spark
# Ghi Parquet
df.write.mode("overwrite").parquet("/lake/parquet/customers")
# Ghi Delta với overwrite schema
df.write.format("delta") \
.option("overwriteSchema", "true") \
.mode("overwrite") \
.save("/lake/delta/customers")7. Tối ưu hóa file nhỏ
Dữ liệu ghi dạng streaming hoặc nhiều batch nhỏ → tạo nhiều file nhỏ (small files problem)
→ Giải pháp:
# Gộp file nhỏ bằng repartition trước khi ghi
df.repartition(8).write.format("delta").mode("append").save("/lake/delta/")8. Tích hợp vào pipeline
| Layer | Hành động đề xuất |
|---|---|
| Raw Layer | Chỉ lưu CSV hoặc JSON (thô), không optimize |
| Staging | Convert sang Parquet, kiểm tra schema, ghi Delta |
| Silver | Gộp file nhỏ (compaction), Z-Order theo cột dùng để lọc (e.g. mã khách hàng) |
| Gold | Partition theo ngày/tháng, dùng Delta + checkpoint |
9. KPIs theo dõi hiệu quả
| Chỉ số | Ý nghĩa |
|---|---|
| File Size trung bình | ~100–250MB là tối ưu cho scan song song |
| % File nhỏ (<10MB) | <5% là tốt |
| Query latency (p95) | Tăng nhanh nếu không Z-Order tốt |
| Time to refresh Delta Table | Phải <10 phút nếu dùng trong dashboard hoặc model ML |
10. Hành động tiếp theo
- Kiểm kê lại toàn bộ bảng đang lưu dạng CSV → chuyển sang Parquet/Delta
- Benchmark truy vấn
count,filter,group bytrên Delta vs Parquet - Thiết lập routine
OPTIMIZE+VACUUMtrên bảng lớn - Xác định các cột lọc thường dùng → đề xuất
ZORDER BY - Refactor pipeline để tự động convert + optimize sau mỗi batch
