Lê Duy Khương (Daniel)

Chuỗi: lakehouse-glossary · Phần 5

Năng suất & công cụ dev

Compaction và chiến lược quản lý file

Compaction và quản lý file trong Lakehouse: OPTIMIZE, VACUUM, ZORDER, lập lịch. Giảm file nhỏ và cải thiện hiệu năng truy vấn.

2026-03-173 phút đọcVI


1. Khái niệm

Compaction là quá trình hợp nhất nhiều file nhỏ thành file lớn hơn để:

  • Giảm số lượng file trong một partition
  • Tối ưu hóa hiệu suất truy vấn và ghi
  • Giảm áp lực lên hệ thống file như S3, GCS, HDFS (metadata, open/close operations)

File Management Strategy bao gồm các quy tắc và lịch trình để:

  • Điều phối việc ghi file theo kích thước tối ưu
  • Tự động chạy OPTIMIZE, VACUUM, ZORDER
  • Theo dõi và dọn dẹp các file cũ không còn tham chiếu

2. Vì sao phải compaction?

Tình huống phổ biếnVấn đề tạo ra
Streaming ingest ghi mỗi event thành fileTạo hàng ngàn file nhỏ → Spark scan rất chậm
Batch job ghi song song (spark partition)Tạo nhiều file <10MB → file listing chậm, query chậm
Frequent update / mergeDễ tạo file tombstone → tốn dung lượng + query chậm

3. Kỹ thuật compaction

a. Manual Compaction

# Gộp file nhỏ (dưới 100MB) thành file lớn hơn
spark.read.format("delta").load("/lake/silver/transactions") \
    .repartition(10) \
    .write.format("delta").mode("overwrite").option("overwriteSchema", "true") \
    .save("/lake/silver/transactions")

b. Delta Lake OPTIMIZE

OPTIMIZE delta.`/lake/silver/transactions`
WHERE date >= '2025-01-01'
ZORDER BY (customer_id)

c. Auto Compaction trong streaming

spark.conf.set("spark.databricks.delta.autoCompact.enabled", "true")

4. Quản lý file Delta với VACUUM

-- Xóa file không còn tham chiếu sau 7 ngày
VACUUM delta.`/lake/silver/transactions` RETAIN 168 HOURS;
  • Lưu ý: Không nên dùng VACUUM với thời gian < 7 ngày nếu có query "time travel" vì dữ liệu có thể bị mất.

5. Lập lịch Compaction

Tầng dữ liệuTần suất chạy compactionKỹ thuật
BronzeHằng ngày (off-peak hours)Repartition + overwrite
SilverHằng tuầnOPTIMIZE + ZORDER
GoldTheo mỗi batch hoặc demandAuto-merge + vacuum

6. Theo dõi & cảnh báo

MetricNgưỡng cần cảnh báo
Số file nhỏ (<10MB) / bảng> 500
Số lượng file / partition> 1000
% file không còn sử dụng> 20%
Thời gian query tăng đột biến> 2x bình thường

7. Tự động hóa với Airflow hoặc Prefect

# Example Airflow task
BashOperator(
    task_id="optimize_transaction_table",
    bash_command="spark-submit optimize_transactions.py",
    schedule_interval="@daily"
)

8. Hành động đề xuất

  1. Tạo dashboard giám sát file nhỏ theo bảng và partition
  2. Lập cronjob compaction bằng OPTIMIZE cho bảng lớn: giao dịch, call log, tracking
  3. Tích hợp tự động VACUUM + backup định kỳ
  4. Với bảng nhiều update, cấu hình Delta merge + compact + GC
  5. Dọn bảng lỗi thời bằng VACUUM + delete sau mỗi quý

Kết luận

Compaction không chỉ giúp tăng tốc độ truy vấn, mà còn giảm đáng kể chi phí lưu trữ và vận hành. Trong môi trường Lakehouse quy mô hàng TB trở lên, đây là một kỹ thuật bắt buộc phải triển khai chuyên nghiệp và có chiến lược.

LDK

Le Duy Khuong

AI Transformation & Digital Strategy. Writing about agentic systems, engineering leadership, and building in public.