Ảnh minh họa: nguồn Unsplash
pd.read_csv() là xong, ai ngờ:
- Mở 5 phút vẫn chưa xong, RAM 16GB phình lên gần hết.
- Power BI thì báo lỗi “The file is too large or corrupted.”
- Mỗi lần debug lại phải cắt file nhỏ ra để test.
Tụi mình nhận ra: CSV chỉ tốt cho việc chia sẻ nhanh, chứ không phải để làm việc nghiêm túc với dữ liệu lớn. Và đó là lúc bọn mình bắt đầu chuyển sang Parquet, một định dạng “dành riêng cho dân data”.
1. Parquet là gì và vì sao dân data nên dùng
Parquet là định dạng lưu trữ dữ liệu dạng bảng,
tối ưu cho đọc/ghi và nén dữ liệu cột.
Khác với CSV (lưu từng dòng), Parquet lưu từng cột (columnar
format).
Nhờ đó, nó có ba lợi ích cực kỳ rõ:
Nhỏ hơn rất nhiều
Một file CSV 1GB khi chuyển sang Parquet thường chỉ còn 100–200MB.
Vì các giá trị trùng nhau trong cùng cột được nén cực tốt (đặc biệt là cột có
giá trị lặp, ví dụ platform,
province, warehouse_code).
Đọc nhanh hơn gấp nhiều lần
Khi bạn chỉ cần một vài cột (vd: order_id,
nmv), Parquet chỉ cần đọc đúng những cột đó.
CSV thì phải đọc toàn bộ file, dẫn tới chậm và tốn RAM không cần thiết.
Giữ nguyên kiểu dữ liệu (data type)
CSV chỉ lưu text, còn Parquet giữ cả kiểu int,
float, datetime,
bool, decimal.
Điều này cực kỳ quan trọng khi bạn chuyển dữ liệu giữa Python ↔ Power BI ↔
Database mà không bị lỗi kiểu.
2. Khi nào nên dùng Parquet
| Tình huống | CSV | Parquet |
|---|---|---|
| File < 10MB, chia sẻ nhanh | Được | Không được |
| Data warehouse backup | Không được | Được |
| Dataset hàng triệu dòng | Không được | Được |
| Load vào Power BI / Databricks | Không được | Được |
| Lưu trung gian trong ETL | Hãy cân nhắc | Được |
| Import thủ công từ Excel | Không được | Được |
Nói ngắn gọn:
Khi bạn bắt đầu làm việc với data từ hàng trăm MB trở lên, Parquet là bạn tốt nhất của bạn.
3. Cách dùng Parquet trong Python
Dưới đây là một quy trình cơ bản, rất thực tế với dân data analyst:
Bước 1 - Cài thư viện
pip install pandas pyarrow
Bước 2 - Ghi dữ liệu ra Parquet
import pandas as pd
df = pd.read_csv("orders_2025.csv")
df.to_parquet("orders_2025.parquet", index=False)
Chỉ một dòng, file Parquet đã sẵn sàng.
Nếu bạn in ra:
import os
print(os.path.getsize("orders_2025.csv"))
print(os.path.getsize("orders_2025.parquet"))
Bạn sẽ thấy Parquet nhỏ hơn 4–10 lần.
Bước 3 - Đọc lại file Parquet
df2 = pd.read_parquet("orders_2025.parquet")
print(df2.head())
Tốc độ đọc có thể nhanh gấp 3–5 lần CSV, đặc biệt khi bạn chỉ chọn vài cột:
cols = ["order_id", "nmv", "warehouse_code"]
df3 = pd.read_parquet("orders_2025.parquet", columns=cols)
4. Cách load Parquet vào Power BI
Từ 2023 trở đi, Power BI đọc Parquet trực tiếp (không cần
thêm connector).
Cách làm:
- Mở Power BI → Get Data
- Chọn Parquet file
-
Browse tới file
.parquet→ Load
Power BI sẽ tự nhận schema, kiểu dữ liệu (ngày, số, text...) cực kỳ chuẩn
xác.
Đặc biệt, nếu file Parquet có partition (ví dụ chia theo
month=2025-09), Power BI cũng có thể load incremental
từng phần — điều mà CSV không làm được.
Tip: Khi bạn có nhiều file Parquet trong 1 folder, hãy dùng “Folder Connector” → Power BI sẽ tự combine schema như một data lake mini.
5. Khi nào Parquet gây rắc rối
Không có gì hoàn hảo.
Parquet cũng có vài điểm “khó chịu” nếu bạn mới dùng:
1. Không mở được bằng Notepad
Khác với CSV, bạn không thể “double-click” để xem.
Cần dùng công cụ như Parquet Viewer, DuckDB,
hoặc Python/Power BI để đọc.
2. Schema mismatch
Nếu bạn combine nhiều file mà cột hơi khác nhau (vd:
price bị null trong 1 file), Power BI hoặc pandas sẽ
cảnh báo.
Giải pháp:
df = pd.concat([pd.read_parquet(f, dtype_backend="pyarrow") for f in files])
Hoặc ép kiểu cột cụ thể:
df["price"] = df["price"].fillna(0).astype(float)
3. Không phù hợp cho người dùng non-technical
Nếu người dùng cuối chỉ biết mở Excel, bạn vẫn phải xuất CSV để họ đọc được.
6. So sánh thực tế: CSV vs Parquet
| CSV | Parquet | |
|---|---|---|
| Kích thước | 1.2 GB | 210 MB |
| Tốc độ đọc pandas | 38 giây | 6 giây |
| RAM sử dụng | ~8GB | ~2GB |
| Đọc 3 cột | vẫn 38 giây | 2 giây |
| Giữ kiểu dữ liệu | Không | Có |
| Phù hợp Power BI | Kém | Rất tốt |
(Benchmark trên dataset 5 triệu dòng, 20 cột, máy RAM 16GB – CPU i7)
7. Tips cho dân Data Analyst
Một vài mẹo để tận dụng tối đa Parquet trong công việc hàng ngày:
Chia file theo partition
Nếu bạn export hàng tháng, hãy dùng cấu trúc thư mục như:
data/
month=2025-07/orders.parquet
month=2025-08/orders.parquet
month=2025-09/orders.parquet
Dễ load incremental trong Power BI hoặc Airflow.
Dùng DuckDB để xem nhanh
Không cần mở Python hay Power BI:
SELECT COUNT(*) FROM 'orders_2025.parquet';
Chạy cực nhanh, chỉ vài giây cho file hàng triệu dòng.
Backup nhẹ nhàng
File Parquet dễ backup lên Google Drive, S3, hay Azure Blob Storage mà không lo bị lỗi encoding như CSV.
Tạo dataset chia sẻ cho team
Thay vì export Excel, bạn có thể lưu Parquet và để Power BI connect thẳng vào
folder chung.
Lúc này team BI, Data Science, Finance có thể đọc cùng một nguồn —
chuẩn hóa 1 nguồn dữ liệu gốc (single source of truth).
8. Câu chuyện nhỏ cuối bài
Sau lần “5GB CSV” đó, team mình quyết định chuẩn hóa luôn quy trình:
-
Toàn bộ file staging đều xuất
.parquetthay vì.csv. -
Airflow pipeline lưu version hàng tháng trong folder
snapshot/. - Power BI đọc thẳng từ folder Parquet, không cần import Excel nữa.
Kết quả:
- Thời gian load dashboard giảm từ 2 phút xuống 15 giây.
- Không còn lỗi “Encoding UTF-8”, “Data type mismatch” vặt vãnh.
- Và quan trọng nhất: team Finance, BI, Ops giờ nói cùng một ngôn ngữ dữ liệu.
9. Tóm lại
CSV là file tốt để chia sẻ.
Parquet là file để xây hệ thống dữ liệu.
Nếu bạn đang bắt đầu xử lý dữ liệu >100MB, hoặc đang tìm cách để Power BI chạy nhanh hơn hãy thử Parquet. Một thay đổi nhỏ, nhưng hiệu quả rất lớn.


0 Nhận xét