0

Apache Parquet là gì?

Apache Parquet là một định dạng file mã nguồn mở, được thiết kế để lưu trữ dữ liệu theo cấu trúc cột (Columnar Storage) thay vì theo dòng (Row-based) như các định dạng truyền thống (CSV, JSON, Avro).

Nó được sinh ra trong hệ sinh thái Hadoop và được thiết kế đặc biệt để xử lý các bài toán phân tích dữ liệu lớn (Big Data / OLAP - Online Analytical Processing), nơi mà các truy vấn (query) thường phải quét qua hàng Terabyte dữ liệu nhưng chỉ cần lấy ra một vài cột cụ thể.


2. Bí mật sức mạnh: Lưu trữ theo Cột (Columnar) vs Lưu trữ theo Dòng (Row-based)

Để hiểu tại sao Parquet lại bá đạo, chúng ta cần so sánh sự khác biệt ở cấp độ ổ cứng (Disk I/O).

Giả sử bạn có một bảng dữ liệu gồm 3 cột: ID, Name, Age.

A. Lưu trữ theo Dòng (như CSV, JSON, MySQL thông thường)

  • Cách lưu trên đĩa cứng: Dữ liệu được ghi nối tiếp nhau theo từng dòng: [1, "Nguyen", 25], [2, "Tran", 30], [3, "Le", 28].
  • Vấn đề: Nếu sếp yêu cầu bạn: "Hãy tính trung bình Age của tất cả user". Máy tính buộc phải đọc toàn bộ file từ đầu đến cuối (bao gồm cả ID và Name vốn không cần thiết) chỉ để moi ra trường Age. Điều này làm lãng phí cực lớn tài nguyên I/O (đọc ổ cứng) và RAM.

B. Lưu trữ theo Cột (như Parquet)

  • Cách lưu trên đĩa cứng: Dữ liệu được gom lại và ghi theo từng cột:
    • Khối 1 (ID): [1, 2, 3]
    • Khối 2 (Name): ["Nguyen", "Tran", "Le"]
    • Khối 3 (Age): [25, 30, 28]
  • Lợi thế tuyệt đối: Khi cần tính trung bình Age, hệ thống chỉ cần nhảy thẳng tới khối đĩa cứng chứa dữ liệu Age và bốc đúng khối đó lên RAM. Tốc độ đọc (I/O) giảm đi hàng chục, thậm chí hàng trăm lần!

3. Tại sao Parquet là chuẩn mực cho Data Lake?

Ngoài việc tối ưu I/O bằng cách lưu theo cột, Parquet còn thống trị nhờ 3 ưu điểm sau:

  • Tỷ lệ nén siêu việt (Extreme Compression): Vì các dữ liệu trong cùng một cột có kiểu giống hệt nhau (ví dụ cột Country chỉ chứa chữ, hoặc cột Status chỉ lặp đi lặp lại chữ "Success", "Failed"), Parquet sử dụng các thuật toán nén chuyên dụng (như Dictionary Encoding, Run-Length Encoding). Kết quả là file Parquet thường có dung lượng chỉ bằng 1/4 hoặc 1/5 so với file CSV cùng lượng dữ liệu.
  • Hỗ trợ Schema phức tạp: Không giống CSV chỉ lưu được dữ liệu phẳng, Parquet có thể lưu trữ các kiểu dữ liệu lồng nhau (Nested structures, Arrays, Maps) cực kỳ dễ dàng.
  • Tương thích hoàn hảo với các Big Data Engines: Hầu như mọi cỗ máy phân tích dữ liệu khổng lồ như Apache Spark, Amazon Athena, Google BigQuery hay Presto đều coi Parquet là định dạng "con cưng" để đọc/ghi với hiệu năng cao nhất.

4. Bỏ túi kiến thức Senior: Avro vs Parquet

Đến đây, có thể bạn sẽ thắc mắc: "Vậy khi nào dùng Avro, khi nào dùng Parquet?"

Quy tắc vàng trong Data Engineering là:

  • Dùng Avro (Row-based) cho đường ống dữ liệu (Data Pipeline / Streaming): Nhờ tốc độ ghi (Write) siêu nhanh và khả năng Schema Evolution mạnh mẽ, Avro hoàn hảo để làm payload truyền qua Kafka.
  • Dùng Parquet (Column-based) cho kho dữ liệu (Data Lake / Analytics): Khi dữ liệu đã nằm yên một chỗ và cần thực hiện các câu query phức tạp, Parquet vô địch về tốc độ đọc (Read) và tiết kiệm không gian lưu trữ.

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.