Parquet là gì?
Parquet là định dạng file columnar (cột) được tối ưu hóa cho hiệu năng đọc – cực kỳ phổ biến trong các hệ thống xử lý dữ liệu lớn như Spark, Hive, hoặc Snowflake. Dữ liệu trong Parquet được lưu trữ theo cột, nén rất hiệu quả và giúp truy vấn nhanh hơn.
Nhưng nếu bạn từng làm việc trực tiếp với file Parquet, có thể bạn đã gặp câu hỏi:
❓ Làm sao để sửa hoặc xóa dữ liệu trong một file Parquet?
🧱 Tính chất “bất biến” (Immutable) của Parquet
Một trong những tính chất quan trọng của file Parquet là bất biến (immutable). Nghĩa là:
Không thể chỉnh sửa trực tiếp nội dung bên trong file.
Không thể xóa từng dòng từ file gốc.
Bất kỳ thay đổi nào đều yêu cầu tạo file mới.
Điều này không phải là nhược điểm, mà là thiết kế chủ đích để đảm bảo:
Hiệu suất cao khi đọc và ghi (nhờ ghi nối tiếp, không cần đọc ngẫu nhiên).
Tối ưu lưu trữ (nén theo cột, không bị phân mảnh).
Tính toàn vẹn dữ liệu (mỗi file đại diện cho snapshot dữ liệu tại thời điểm cụ thể).
🛠️ Vậy nếu cần xóa hoặc sửa thì phải làm sao?
Bạn không thể sửa file Parquet trực tiếp, nhưng bạn có thể dùng chiến lược thay thế:
🔄 1. Đọc – lọc – ghi lại
Đây là cách phổ biến nhất:
💡 Bạn có thể thay thế file cũ nếu cần: ghi đè hoặc xóa file gốc sau khi xử lý.
🧩 2. Dùng hệ thống hỗ trợ "Merge-on-Read"
Nếu bạn muốn xử lý phức tạp hơn, như cập nhật nhiều lần, hãy cân nhắc:
Apache Hudi
Delta Lake (Databricks)
Apache Iceberg
Những hệ thống này hỗ trợ:
Ghi mới từng phần (append)
Merge dữ liệu
Xử lý ghi chồng (
upsert
)Lịch sử phiên bản (time travel)
Chúng tạo ra nhiều file Parquet dưới nền, nhưng quản lý nội dung như một bảng có thể sửa đổi.
📌 Tổng kết
Hành động | Parquet hỗ trợ? | Giải pháp |
---|---|---|
Ghi dữ liệu mới | ✅ Có | Ghi file mới |
Sửa dữ liệu | ❌ Không | Đọc – sửa – ghi lại |
Xóa dòng | ❌ Không | Đọc – lọc – ghi lại |
Truy vấn nhanh | ✅ Có | Nhờ thiết kế theo cột + nén hiệu quả |
Cập nhật liên tục | ❌ (gốc) | Cần kết hợp Delta Lake / Hudi / Iceberg |
🤔 Khi nào nên dùng Parquet?
Trường hợp | Nên dùng? |
---|---|
Lưu trữ dữ liệu lớn, ít thay đổi | ✅ Có |
Truy vấn phân tích tốc độ cao | ✅ Có |
Cập nhật hàng giờ / hàng phút | ⚠️ Không – cần Delta/Hudi |
Cần xoá dòng hoặc sửa nội dung thường xuyên | ❌ Không – nên dùng database |
💬 Kết luận
Dù không thể sửa hay xóa trực tiếp, Parquet vẫn là định dạng vô cùng mạnh mẽ khi bạn hiểu rõ nguyên lý hoạt động và chọn đúng công cụ hỗ trợ. Trong thế giới "write-once, read-many", Parquet chính là vua.
Hãy để Parquet làm tốt việc nó được sinh ra để làm – lưu trữ, truy vấn, phân tích. Còn việc cập nhật, hãy giao cho những công cụ sinh ra để bổ sung!