Greenplum Database Bài học 24: Tích hợp Greenplum với Object Storage (MinIO / AWS S3 / HDFS): Đọc/ghi trực tiếp định dạng Parquet và ORC
Ở Bài học 23, chúng ta đã làm quen với PXF (Platform Extension Framework) — chiếc cầu nối vạn năng giúp Greenplum với tới các hệ thống lưu trữ bên ngoài. Tiếp nối chủ đề đó, trong bài học này, chúng ta sẽ đi sâu vào một kịch bản kiến trúc cực kỳ phổ biến trong các hệ thống Big Data hiện đại: Tích hợp sâu Greenplum với Object Storage (như AWS S3, MinIO, hoặc HDFS) để đọc và ghi trực tiếp các định dạng phân tích chuẩn công nghiệp như Parquet và ORC.
Việc kết hợp này giúp doanh nghiệp xây dựng mô hình Data Lakehouse: Lưu trữ dữ liệu thô chi phí thấp trên Object Storage dưới dạng Parquet, nhưng vẫn tận dụng được tốc độ tính toán MPP siêu tốc của Greenplum khi cần phân tích chuyên sâu.
1. Kiến trúc lưu trữ phân tầng: Greenplum kết hợp Object Storage
Trong các hệ thống Data Warehouse truyền thống, toàn bộ dữ liệu phải được nạp vào ổ cứng đắt tiền bên trong cụm cơ sở dữ liệu. Với mô hình hiện đại sử dụng Object Storage, kiến trúc được phân tách thành:
-
Storage Tier (Tầng lưu trữ lạnh/chia sẻ): Các tệp tin lịch sử, tệp log thô được nén và lưu dưới định dạng Parquet hoặc ORC trên AWS S3 hoặc cụm MinIO tự host.
-
Compute Tier (Tầng tính toán phân tán): Cụm Greenplum đảm nhận vai trò bóc tách, tính toán song song, thực hiện
JOINvà trả kết quả cho người dùng mà không cần sao chép toàn bộ dữ liệu đó về ổ cứng cục bộ.
┌────────────────────────────────────────────────────────────────────────┐
│ GREENPLUM & OBJECT STORAGE INTEGRATION │
└───────────────────────────┬────────────────┬───────────────────────────┘
│ │
[ Greenplum Segments ] ◄──(Đọc/Ghi song song)──► [ Object Storage (S3 / MinIO) ]
• Xử lý tính toán MPP • Lưu trữ file Parquet / ORC
• Lọc dữ liệu Push-down • Chi phí rẻ, dung lượng lớn
2. Ưu điểm vượt trội của định dạng Parquet và ORC trên Object Storage
Tại sao chúng ta không dùng file CSV hay Text thông thường trên Object Storage mà lại bắt buộc phải dùng Parquet hoặc ORC?
-
Lưu trữ hướng cột (Columnar Format): Cả Parquet và ORC đều được thiết kế theo mô hình hướng cột, cho phép Greenplum chỉ đọc đúng những cột cần thiết qua mạng mạng S3, giảm thiểu tối đa băng thông mạng.
-
Nén siêu sâu và tích hợp Metadata: Mỗi tệp Parquet/ORC chứa sẵn các bảng thống kê (statistics) về giá trị min/max của từng khối dữ liệu bên trong phần header của tệp.
-
Predicate Push-down (Đẩy điều kiện lọc xuống nguồn): Đây là tính năng cao cấp nhất. Khi bạn chạy câu lệnh
SELECT * FROM ext_parquet WHERE date = '2026-06-01', PXF sẽ thông báo điều kiện lọc đó thẳng cho Object Storage. Chỉ những khối dữ liệu thỏa mãn điều kiện mới được truyền qua mạng về Greenplum, thay vì phải tải toàn bộ tệp xuống rồi mới lọc.
3. Hướng dẫn cấu hình và thực chiến đọc ghi Parquet/ORC qua PXF
Để Greenplum có thể giao tiếp mượt mà với MinIO hoặc AWS S3, chúng ta cần đi qua các bước cấu hình chuẩn xác sau:
Bước 1: Khai báo cấu hình Server trong PXF
Trên các máy chủ Segment Host (nơi chạy PXF Daemon), DBA cần định nghĩa kết nối tới MinIO/S3 trong file cấu hình /etc/pxf/conf/servers/minio-cluster/pxf-site.xml (hoặc qua tệp cấu hình tương đương):
XML
<property>
<name>fs.defaultFS</name>
<value>s3a://my-data-bucket</value>
</property>
<property>
<name>fs.s3a.endpoint</name>
<value>http://minio-server-ip:9000</value>
</property>
<property>
<name>fs.s3a.access.key</name>
<value>minio_admin_key</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>minio_secure_password</value>
</property>
Bước 2: Tạo Readable External Table đọc file Parquet trên S3/MinIO
Sau khi cấu hình xong, trên giao diện dòng lệnh psql của Greenplum, bạn có thể tạo External Table trỏ trực tiếp đến thư mục chứa các file Parquet:
SQL
CREATE READABLE EXTERNAL TABLE ext_s3_parquet_orders (
order_id BIGINT,
customer_id BIGINT,
total_amount NUMERIC(12,2),
status VARCHAR(20),
order_date TIMESTAMP
)
LOCATION ('pxf://sales-folder/2026/?profile=s3:parquet&server=minio-cluster')
FORMAT 'CUSTOM' (formatter='pxf_formatter');
Bước 3: Truy vấn trực tiếp dữ liệu trên S3 như bảng bình thường
Bây giờ, bạn có thể chạy các câu lệnh phân tích phức tạp, JOIN dữ liệu từ bảng Parquet trên MinIO với các bảng Fact lưu trực tiếp bên trong Greenplum:
SQL
SELECT
o.status,
COUNT(o.order_id) AS total_orders,
SUM(o.total_amount) AS total_revenue
FROM ext_s3_parquet_orders o
WHERE o.order_date >= '2026-01-01'
GROUP BY o.status;
4. Writable External Table: Ghi dữ liệu từ Greenplum trực tiếp ra định dạng Parquet trên S3
Không chỉ đọc, PXF còn hỗ trợ Writable External Tables, cho phép bạn trích xuất dữ liệu lịch sử từ cơ sở dữ liệu và ghi thẳng chúng dưới định dạng Parquet lên Object Storage (S3/MinIO) để phục vụ việc lưu trữ lạnh hoặc chia sẻ dữ liệu cho các hệ thống khác (như Spark, Hive, AI/ML Training pipelines):
SQL
-- 1. Tạo Writable External Table định dạng Parquet trỏ ra S3/MinIO
CREATE WRITABLE EXTERNAL TABLE ext_write_parquet_archive (
order_id BIGINT,
customer_id BIGINT,
total_amount NUMERIC(12,2),
order_date TIMESTAMP
)
LOCATION ('pxf://archive-bucket/orders_archive/?profile=s3:parquet&server=minio-cluster')
FORMAT 'CUSTOM' (formatter='pxf_formatter');
-- 2. Trích xuất dữ liệu từ bảng trong database đẩy thẳng ra file Parquet trên S3
INSERT INTO ext_write_parquet_archive
SELECT order_id, customer_id, total_amount, order_date
FROM fact_orders
WHERE order_date < '2025-01-01';
- Kết quả: Toàn bộ các Segment trong Greenplum sẽ đồng loạt tính toán và đẩy dữ liệu trực tiếp dưới định dạng Parquet tối ưu hóa lên MinIO/S3 mà không cần qua bất kỳ công cụ trung gian nào!
Tóm tắt Bài học 24
-
Tích hợp Greenplum với Object Storage (MinIO / S3) qua PXF giúp xây dựng kiến trúc Data Lakehouse linh hoạt, tách rời tầng lưu trữ và tầng tính toán.
-
Định dạng Parquet và ORC là tiêu chuẩn vàng nhờ cấu trúc hướng cột, khả năng nén sâu và tính năng Predicate Push-down giúp lọc dữ liệu ngay tại nguồn lưu trữ.
-
Greenplum hỗ trợ cả hai chiều Readable và Writable External Tables, cho phép đọc phân tích trực tiếp hoặc xuất dữ liệu ngược lại dưới dạng Parquet lên Cloud Storage một cách song song mượt mà.
Ở bài học tiếp theo (Bài học 25), chúng ta sẽ chuyển sang kỹ thuật tự động hóa quy trình ETL quy mô lớn với chủ đề: Tiện ích gpload: Tự động hóa quy trình ETL/ELT bằng file cấu hình YAML.
All rights reserved