Lời Mở Đầu
Trong thời đại dữ liệu bùng nổ hiện nay, Data Warehouse đã chứng kiến sự phát triển vượt bậc trong khả năng lưu trữ và truy vấn dữ liệu có cấu trúc. Tuy nhiên, với sự gia tăng mạnh mẽ về khối lượng và đa dạng của dữ liệu, đặc biệt là dữ liệu bán cấu trúc và phi cấu trúc, Data Warehouse đã bộc lộ nhiều hạn chế. Để khắc phục điều này, Data Lake đã ra đời, cho phép lưu trữ nhiều loại dữ liệu khác nhau, nhưng nó lại thiếu khả năng xử lý và truy vấn dữ liệu có cấu trúc. Nhằm kết hợp những ưu điểm của cả Data Warehouse và Data Lake, Lakehouse được phát triển, mang lại khả năng lưu trữ linh hoạt và hiệu quả.
Giới Thiệu Về Delta Lake
Delta Lake là một phần mềm mã nguồn mở giúp tối ưu hóa định dạng bảng cho lưu trữ dữ liệu. Delta Lake mang lại nhiều tính năng nổi bật như ACID transactions, Time travel, hỗ trợ cả chế độ Batch và Streaming, cũng như khả năng thực hiện Schema Enforcement và Evolution.
Delta Lake sử dụng định dạng .parquet
để lưu trữ dữ liệu, trong đó một Delta Table bao gồm hai thành phần chính:
- Parquet files: Chứa dữ liệu ở định dạng
.parquet
. - Transaction log: Lưu trữ metadata về các giao dịch với dữ liệu.
Delta Lake hỗ trợ cả ETL và ELT, nhưng ETL thường được ưa chuộng hơn nhờ tính hiệu quả và độ tin cậy cao hơn.
Hiệu Suất và Độ Tin Cậy
-
Hiệu Suất: Delta Lake tối ưu hóa hiệu suất bằng cách:
- Lưu trữ đường dẫn file và metadata trong Transaction log.
- Thực hiện read một phần dữ liệu qua file-skipping.
- Co-locate các dữ liệu tương đồng để thuận tiện cho việc tối ưu hóa.
-
Độ Tin Cậy: Delta Lake đảm bảo quy trình ETL an toàn qua việc áp dụng ACID transactions.
Liquid Clustering, Z-ordering và Hive-style Partitioning
Liquid Clustering là phương pháp mới nhất giúp cải thiện hiệu suất trong quá trình clustering dữ liệu, đặc biệt trong các tình huống:
- Filter dữ liệu thường xuyên.
- Dữ liệu bị skew.
- Tốc độ tăng trưởng của dữ liệu quá nhanh, cần bảo trì và tinh chỉnh.
Engines Hỗ Trợ Truy Vấn
Delta Lake chủ yếu hỗ trợ Apache Spark, đặc biệt là trên nền tảng Databricks. Tuy nhiên, nó cũng hỗ trợ một số công cụ truy vấn khác như polars
.
Phát Triển và Thực Thi Schema
Delta Lake hỗ trợ Schema evolution để tránh tình trạng dữ liệu bị hỏng do sự không tương thích giữa schema mới và cũ. Khi thực hiện ghi dữ liệu mới, nếu schema không khớp, một lỗi AnalysisException
sẽ xảy ra.
Ví dụ Về Schema Evolution
Khi ghi dữ liệu mới với schema khác, bạn có thể sử dụng tùy chọn mergeSchema
để cập nhật schema.
python
# Cập nhật schema
df.write \
.option("mergeSchema", "true") \
.mode("append") \
.format("delta") \
.save("data/toy_data")
Tính Năng Time Travel
Tính năng Time travel cho phép bạn khôi phục lại dữ liệu ở phiên bản trước đó, cực kỳ hữu ích khi mắc lỗi trong quá trình ghi dữ liệu.
Tối Ưu Hóa Dữ Liệu
Để cải thiện hiệu suất đọc, cần giảm tình trạng "small file problem". Delta Lake cung cấp nhiều phương pháp tối ưu hóa như OPTIMIZE
command để gộp các file nhỏ thành file lớn hơn.
python
# Tối ưu hóa số lượng file
from delta.tables import *
deltaTable = DeltaTable.forPath(spark, "test/delta_table")
deltaTable.optimize().executeCompaction()
Quản Lý Change Data Capture (CDC)
Delta Lake cung cấp khả năng theo dõi sự thay đổi dữ liệu theo hàng động, cho phép bạn dễ dàng xử lý dữ liệu thay đổi giữa các phiên bản của Delta Table.
Kết Luận
Ngoài Delta Lake, còn nhiều định dạng Lakehouse khác như Hudi, Iceberg, XTable đang phát triển, mở ra nhiều cơ hội mới cho việc quản lý và phân tích dữ liệu lớn.
Tài Liệu Tham Khảo
- Delta Lake Documentation
- Apache Spark Documentation
- Databricks Guides
source: viblo