Khi file CSV không còn đủ nhanh — giải pháp file Parquet cho dân Data

Ảnh minh họa: nguồn Unsplash

Có lần team mình phải load một file CSV đơn hàng nặng gần 5GB.
Cứ tưởng chỉ cần 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:

    1. Mở Power BI → Get Data
    2. Chọn Parquet file
    3. Browse tới file .parquetLoad

      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
      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


      Load file parquet vào excel

      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 .parquet thay 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.

          Đăng nhận xét

          0 Nhận xét