Lê Duy Khương (Daniel)

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

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

Schema evolution và enforcement trong Lakehouse

Schema evolution và enforcement: thay đổi cấu trúc bảng an toàn, mergeSchema, enforceSchema. Hỗ trợ Delta, Iceberg, Hudi và best practices.

2026-03-173 phút đọcVI


1. Khái niệm

  • Schema Evolution là khả năng thay đổi cấu trúc bảng dữ liệu mà vẫn giữ được khả năng truy xuất và xử lý.
  • Schema Enforcement là cơ chế ràng buộc dữ liệu đầu vào phải tuân thủ định nghĩa schema hiện tại (ví dụ: đúng kiểu dữ liệu, đúng trường bắt buộc).

2. Vì sao quan trọng?

  • Hệ thống data hiện đại luôn thay đổi: thêm cột, đổi kiểu, chuyển enum → string,...
  • Nếu không có schema management → hệ thống dễ gãy, dữ liệu bị "bể schema", không xử lý được downstream

3. Cơ chế hoạt động trong Lakehouse

Cơ chếDelta LakeApache IcebergApache Hudi
Add columnHỗ trợHỗ trợHỗ trợ
Rename / Drop columnKhông chuẩn, cần recreateHỗ trợ tốt (metadata-based)Một phần (dùng timeline)
Type promotion (int→long)Có thể cấu hìnhLinh hoạt
Enforcement on writeStrict/Permissive modeHỗ trợHỗ trợ

4. Thực hành với Delta Lake

# Ghi dữ liệu với schema ban đầu
df1 = spark.createDataFrame([(1, "Alice")], ["id", "name"])
df1.write.format("delta").save("/lake/user")
 
# Ghi dữ liệu với schema mới – thêm cột 'email'
df2 = spark.createDataFrame([(2, "Bob", "bob@email.com")], ["id", "name", "email"])
df2.write.format("delta") \
  .option("mergeSchema", "true") \
  .mode("append") \
  .save("/lake/user")
 
# Đọc lại → Schema tự động mở rộng
df = spark.read.format("delta").load("/lake/user")
df.printSchema()

5. Case Study – Sai sót phổ biến

Tình huốngHậu quả
Ghi dữ liệu kiểu int vào trường stringSpark lỗi "Cannot safely cast"
Bỏ cột email nhưng không cập nhật schemaCột bị null toàn bộ → lỗi khi downstream
Cập nhật enumstring mà không kiểm traLỗi mapping downstream logic

6. Use cases

  • Khoa học dữ liệu thêm nhiều feature vào bảng training → cần mergeSchema
  • Hệ thống CRM thay đổi định dạng thông tin khách hàng (zip → city)
  • Dự án A/B test thêm nhiều trường tạm, cần schema flex

7. Schema Enforcement Mode

OptionÝ nghĩa
enforceSchema=trueDữ liệu ghi sai schema sẽ bị từ chối
mergeSchema=trueTự động mở rộng schema khi ghi mới
strict modeChặn ghi thiếu field, sai type

8. Kiến nghị triển khai

Thành phầnĐề xuất kỹ thuật
Ingestion LayerKiểm tra schema trước khi insert vào Staging
Lakehouse TableBật mergeSchema nhưng có kiểm duyệt field mới
Metadata StoreGắn version schema theo từng commit
AlertGửi cảnh báo nếu phát hiện mismatch lớn

9. Hành động tiếp theo

  1. Audit toàn bộ bảng Delta hiện có → ghi nhận schema hiện tại
  2. Thử ghi các batch mới với schema thay đổi → test rollback
  3. Thiết lập schema registry (dùng JSON schema + validation layer)
  4. Gắn version schema theo ngày để debug và audit
  5. Thiết kế pipeline hợp lệ hóa schema cho raw → staging → silver
LDK

Le Duy Khuong

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