Parquet lưu theo cột (columnar), còn CSV và Avro lưu theo dòng. Truy vấn phân tích thường chỉ đọc vài cột trên hàng triệu dòng, nên lưu theo cột giúp đọc ít dữ liệu hơn nhiều.
| CSV | Avro | Parquet | |
|---|---|---|---|
| Cách lưu | Theo dòng, dạng text | Theo dòng, nhị phân | Theo cột, nhị phân |
| Schema | Không có, kiểu dữ liệu phải đoán | Đi kèm file, hỗ trợ schema evolution | Đi kèm file |
| Nén | Kém | Khá | Tốt |
| Hợp với | Trao đổi file nhỏ với người dùng | Ghi từng bản ghi: Kafka, ingest liên tục | Đọc phân tích: warehouse, Spark, lake |
Parquet nhanh cho phân tích vì:
- Chỉ đọc cột cần: SELECT SUM(amount) không phải đọc cột description.
- Nén tốt hơn vì giá trị cùng cột cùng kiểu và hay lặp lại.
- Có thống kê min/max theo từng khối dữ liệu, engine bỏ qua được khối không khớp điều kiện WHERE.
Lưu ý: Parquet không hợp để sửa từng dòng hay ghi từng bản ghi nhỏ, vì mỗi lần ghi là tạo file mới. Quá nhiều file nhỏ làm chậm mọi lần đọc sau đó, nên cần gom lại (compaction) thành file cỡ vài trăm MB.