- Định dạng và giao diện mã nguồn mở được thiết kế để tuần tự hóa các phép toán xử lý dữ liệu có cấu trúc (đại số quan hệ, kế hoạch truy vấn, v.v.) và trao đổi giữa nhiều cơ sở dữ liệu, công cụ phân tích và engine truy vấn khác nhau
- Đang được áp dụng và triển khai trong nhiều DB, xử lý phân tán và engine truy vấn như DuckDB, Spark, DataFusion, Sirius nhằm trao đổi kế hoạch truy vấn/thực thi giữa các hệ thống khác nhau và đảm bảo khả năng tương thích
- Biểu diễn kế hoạch thực thi của các ngôn ngữ truy vấn hoặc engine khác nhau như SQL, DataFrame, Pandas bằng định dạng trung lập/tiêu chuẩn hóa (protocol buffers, YAML, JSON, v.v.) để đơn giản hóa tích hợp plugin, engine bên thứ ba và kết nối với bộ tăng tốc phần cứng
Substrait là gì?
- Dự án mã nguồn mở định nghĩa "kế hoạch truy vấn (Logical/Physical Plan)" của các hệ thống phân tích/xử lý dữ liệu bằng một định dạng tiêu chuẩn
- Tuần tự hóa/giải tuần tự hóa cấu trúc truy vấn của nhiều ngôn ngữ như SQL, DataFrame, LINQ (ví dụ: SELECT-FROM-WHERE, Join, Aggregation, Projection, Filter, v.v.) thành schema tiêu chuẩn
- Vì mỗi cơ sở dữ liệu và engine có parser truy vấn và kế hoạch thực thi khác nhau, nên khả năng liên kết với nhau và tận dụng bộ tăng tốc phần cứng bị giới hạn → trừu tượng hóa bằng một tiêu chuẩn chung (biểu diễn trung gian)
- Có thể chuyển đổi và chia sẻ kế hoạch thực thi của các ngôn ngữ truy vấn và framework khác nhau như SQL, DataFrame, Pandas sang định dạng Substrait
Các đặc điểm chính của Substrait
- Biểu diễn truy vấn trung lập: có thể mô tả cả kế hoạch truy vấn logic (toán tử logic) và vật lý (toán tử thực thi)
- Tuần tự hóa dựa trên protocol buffers (chủ yếu dùng schema
.proto), cho phép trao đổi dữ liệu hiệu quả giữa nhiều ngôn ngữ và hệ thống
- Khả năng mở rộng engine/plugin: có thể mở rộng thêm hàm, toán tử và kiểu dữ liệu mới theo cách plugin
- Tích hợp tăng tốc phần cứng: dễ dàng tích hợp ở cấp độ kế hoạch truy vấn với các engine cho GPU/FPGA/bộ tăng tốc chuyên dụng (Sirius, Velox, NVIDIA RAPIDS, v.v.)
- Liên kết đa nền tảng: nhiều engine khác nhau cho data lake, xử lý phân tán, phân tích cục bộ, v.v. có thể nhận cùng một kế hoạch truy vấn và thực thi
Vì sao Substrait quan trọng?
- Mỗi engine không cần tự tạo giao diện tùy biến riêng; chỉ cần hỗ trợ Substrait là có thể tích hợp ngay vào hệ sinh thái
- Đóng vai trò là "ngôn ngữ chung cho kế hoạch thực thi truy vấn/phân tích" giữa các engine và nền tảng dữ liệu
- Truy vấn từ DB → kế hoạch Substrait → chuyển tới GPU/engine phân tán, bộ tăng tốc riêng, v.v. để thực thi
- Kết nối giữa các engine ở cấp độ kế hoạch thực thi mà không cần chuyển đổi/viết lại truy vấn
- Ngay cả khi xuất hiện engine truy vấn mới, vẫn có thể dễ dàng thay thế/kết hợp theo dạng "plugin" (tính linh hoạt khi thay engine)
- Hợp nhất nhiều ngôn ngữ/môi trường truy vấn như SQL/Python/truy vấn phân tán
- Có thể vận hành kết hợp nhiều engine trong môi trường cluster/phân tán (hỗ trợ môi trường dị thể)
- Có phiên bản dạng văn bản giúp dễ phân tích kế hoạch truy vấn hoặc tích hợp với công cụ trực quan hóa
Ví dụ sử dụng thực tế
- Trao đổi kế hoạch truy vấn giữa SQL parser và engine thực thi (Calcite → Arrow, DuckDB → Sirius, v.v.)
- DuckDB: hỗ trợ export kế hoạch truy vấn nội bộ sang Substrait và import truy vấn Substrait từ bên ngoài
- Sirius: có thể nhận nguyên kế hoạch truy vấn Substrait được tạo từ DuckDB và thực thi SQL trên GPU, không cần phân tích cú pháp/sửa đổi truy vấn
- Thực thi các phép toán DataFrame (như Pandas) trên cơ sở dữ liệu bên ngoài
- Xây dựng công cụ trực quan hóa kế hoạch truy vấn của bên thứ ba (D3, Web, v.v.)
- Velox, Spark, DataFusion, v.v.: export kế hoạch truy vấn của từng engine sang Substrait để tích hợp với nhiều engine phân tích và tăng tốc khác nhau
Về mặt kỹ thuật, cấu trúc ra sao?
- Kế hoạch Substrait chủ yếu được định nghĩa dựa trên protocol buffers (
.proto)
- Gồm các thành phần như LogicalPlan, PhysicalPlan, Rel, Expression, Function, v.v.
- Có schema rõ ràng cho từng toán tử như Filter, Join, Aggregate, Project, Sort, v.v.
- Có thể mở rộng catalog hàm/kiểu dữ liệu và UDF (User-Defined Function)
Kết luận
- Substrait là "tiêu chuẩn kế hoạch thực thi truy vấn" cho hệ sinh thái cơ sở dữ liệu và nền tảng phân tích, đóng vai trò cốt lõi cho khả năng tương tác giữa các engine, tăng tốc phần cứng và khả năng mở rộng của hệ sinh thái dữ liệu
- Đang dần trở thành tiêu chuẩn nền tảng giúp đơn giản hóa việc tích hợp bộ tăng tốc phần cứng và engine truy vấn, đồng thời giúp việc xây dựng hạ tầng phân tích hiệu năng cao trở nên dễ dàng hơn mà không cần phân tích cú pháp/chuyển đổi truy vấn phức tạp
Chưa có bình luận nào.