6 poin oleh xguru 2025-07-01 | Belum ada komentar. | Bagikan ke WhatsApp
  • Format dan antarmuka open-source yang dirancang agar operasi pemrosesan data terstruktur (aljabar relasional, rencana kueri, dll.) dapat diserialisasi dan dipertukarkan di antara berbagai database serta mesin analitik/kueri
  • Sedang diadopsi dan diterapkan oleh berbagai DB, pemrosesan terdistribusi, dan mesin kueri seperti DuckDB, Spark, DataFusion, Sirius, dan lainnya dengan tujuan memungkinkan pertukaran rencana kueri/eksekusi serta kompatibilitas antar sistem yang berbeda
  • Menyederhanakan integrasi plugin dan mesin pihak ketiga, serta koneksi dengan akselerator hardware dengan mengekspresikan rencana eksekusi dari berbagai bahasa kueri atau mesin seperti SQL, DataFrame, Pandas, dan lainnya dalam format netral/terstandarisasi (Protocol Buffers, YAML, JSON, dll.)

Apa itu Substrait?

  • Proyek open-source yang mendefinisikan "rencana kueri (Logical/Physical Plan)" sistem analitik/pemrosesan data dalam format standar
    • Menserialisasi/mendeserialisasi struktur kueri dari berbagai bahasa seperti SQL, DataFrame, LINQ (misalnya SELECT-FROM-WHERE, Join, Aggregation, Projection, Filter, dll.) ke dalam skema standar
  • Karena parser kueri dan rencana eksekusi berbeda di setiap database dan mesin, interoperabilitas serta pemanfaatan akselerator hardware menjadi terbatas → diabstraksikan ke dalam standar bersama (representasi perantara)
  • Rencana eksekusi dari berbagai bahasa kueri dan framework seperti SQL, DataFrame, Pandas, dan lainnya dapat dikonversi ke format Substrait lalu dibagikan

Fitur utama Substrait

  • Representasi kueri netral: dapat mengekspresikan rencana kueri logis (operator logis) maupun fisik (operator eksekusi)
  • Serialisasi berbasis Protocol Buffers (terutama menggunakan skema .proto) memungkinkan pertukaran data yang efisien di berbagai bahasa dan sistem
  • Ekstensibilitas mesin/plugin: fungsi, operator, dan tipe baru juga dapat diperluas dengan pendekatan plugin
  • Integrasi dengan akselerasi hardware: mudah diintegrasikan pada level rencana kueri dengan mesin untuk GPU/FPGA/akselerator khusus (Sirius, Velox, NVIDIA RAPIDS, dll.)
  • Interoperabilitas lintas platform: berbagai mesin untuk data lake, pemrosesan terdistribusi, analitik lokal, dan lainnya dapat menerima dan mengeksekusi rencana kueri yang sama

Mengapa Substrait penting?

  • Tanpa setiap mesin harus membuat antarmuka kustom terpisah, integrasi ekosistem dapat langsung terwujud hanya dengan mendukung Substrait
  • Berperan sebagai "bahasa bersama untuk rencana eksekusi kueri/analitik" di antara mesin dan platform data
    • Kueri dari DB → plan Substrait → dikirim dan dijalankan di mesin GPU/terdistribusi, akselerator terpisah, dan sebagainya
    • Menghubungkan mesin pada level rencana eksekusi tanpa perlu transformasi/penulisan ulang kueri
  • Bahkan ketika mesin kueri baru muncul, mesin tersebut dapat dengan mudah diganti/dikombinasikan sebagai plugin (fleksibilitas penggantian mesin)
  • Menyatukan berbagai bahasa/lingkungan kueri seperti SQL/Python/kueri terdistribusi
  • Memungkinkan operasi campuran berbagai mesin dalam lingkungan klaster/terdistribusi (dukungan lingkungan heterogen)
  • Menyediakan versi teks sehingga rencana kueri dapat dianalisis dengan mudah atau dihubungkan dengan alat visualisasi

Contoh penggunaan nyata

  • Pertukaran rencana kueri antara parser SQL dan mesin eksekusi (Calcite → Arrow, DuckDB → Sirius, dll.)
    • DuckDB: mendukung ekspor rencana kueri internal ke Substrait, serta impor kueri Substrait dari luar
    • Sirius: dapat langsung menerima rencana kueri Substrait yang dibuat di DuckDB dan mengeksekusi SQL di atas GPU, tanpa perlu parsing atau modifikasi kueri
  • Menjalankan operasi DataFrame (seperti Pandas) di database eksternal
  • Membuat alat visualisasi rencana kueri pihak ketiga (D3, Web, dll.)
  • Velox, Spark, DataFusion, dll.: mengekspor rencana kueri dari masing-masing mesin ke Substrait untuk diintegrasikan dengan berbagai mesin analitik dan akselerasi

Secara teknis, seperti apa strukturnya?

  • Plan Substrait terutama didefinisikan berbasis Protocol Buffers (.proto)
    • Terdiri dari LogicalPlan, PhysicalPlan, Rel, Expression, Function, dan lainnya
    • Skema yang jelas untuk tiap operator seperti Filter, Join, Aggregate, Project, Sort, dan lainnya
  • Mendukung katalog fungsi/tipe yang dapat diperluas serta ekstensi UDF (User-Defined Function)

Kesimpulan

  • Substrait adalah "standar rencana eksekusi kueri" bagi ekosistem database dan platform analitik, serta menjadi inti interoperabilitas antar mesin, akselerasi hardware, dan skalabilitas ekosistem data
  • Sedang memantapkan posisinya sebagai standar dasar yang menyederhanakan integrasi akselerator hardware maupun integrasi mesin kueri, sehingga pembangunan infrastruktur analitik berkinerja tinggi menjadi lebih mudah tanpa parsing/transformasi kueri yang kompleks

Belum ada komentar.

Belum ada komentar.