- ฟอร์แมตและอินเทอร์เฟซโอเพนซอร์ส ที่ออกแบบมาเพื่อให้สามารถ ซีเรียลไลซ์และแลกเปลี่ยนงานประมวลผลข้อมูลเชิงโครงสร้าง (เช่น relational algebra, query plan) ระหว่างฐานข้อมูล เครื่องมือวิเคราะห์ และเอนจินคิวรีหลากหลายประเภทได้
- กำลังถูกนำไปใช้งานและผสานเข้ากับ DB, ระบบประมวลผลแบบกระจาย และเอนจินคิวรีหลายตัว เช่น DuckDB, Spark, DataFusion, Sirius โดยมีเป้าหมายเพื่อ แลกเปลี่ยน query/execution plan ระหว่างระบบที่ต่างกันและสร้างความเข้ากันได้
- สามารถแสดง execution plan จากภาษาและเอนจินคิวรีที่แตกต่างกัน เช่น SQL, DataFrame, Pandas ให้อยู่ใน ฟอร์แมตที่เป็นกลาง/เป็นมาตรฐาน (เช่น Protocol Buffers, YAML, JSON) เพื่อทำให้การ รวมปลั๊กอิน การเชื่อมต่อเอนจิน third-party และตัวเร่งฮาร์ดแวร์ เป็นเรื่องง่ายขึ้น
Substrait คืออะไร?
- โปรเจกต์โอเพนซอร์สที่ กำหนด "query plan (Logical/Physical Plan)" ของระบบวิเคราะห์/ประมวลผลข้อมูลให้อยู่ในฟอร์แมตมาตรฐาน
- ซีเรียลไลซ์/ดีซีเรียลไลซ์โครงสร้างคิวรีจากภาษาหลากหลาย เช่น SQL, DataFrame, LINQ (เช่น SELECT-FROM-WHERE, Join, Aggregation, Projection, Filter เป็นต้น) ให้เป็น สคีมามาตรฐาน
- เนื่องจากฐานข้อมูลและเอนจินแต่ละตัวมี query parser และ execution plan ต่างกัน จึงมีข้อจำกัดในการเชื่อมต่อกันและการใช้ตัวเร่งฮาร์ดแวร์ → จึงทำการ นามธรรมให้อยู่ในมาตรฐานร่วม (intermediate representation)
- สามารถแปลง execution plan จากภาษาและเฟรมเวิร์กคิวรีต่าง ๆ เช่น SQL, DataFrame, Pandas ไปเป็นฟอร์แมต Substrait แล้วแชร์ร่วมกันได้
คุณลักษณะสำคัญของ Substrait
- การแทนคิวรีแบบเป็นกลาง: รองรับได้ทั้ง query plan เชิงตรรกะ (logical operators) และเชิงกายภาพ (execution operators)
- การซีเรียลไลซ์บนพื้นฐานของ Protocol Buffers (ส่วนใหญ่ใช้สคีมา
.proto) ทำให้แลกเปลี่ยนข้อมูลได้อย่างมีประสิทธิภาพระหว่างหลายภาษาและหลายระบบ
- ความสามารถในการขยายสำหรับเอนจิน/ปลั๊กอิน: สามารถเพิ่มฟังก์ชัน ตัวดำเนินการ และชนิดข้อมูลใหม่ ๆ ได้ผ่านปลั๊กอิน
- การเชื่อมต่อกับตัวเร่งฮาร์ดแวร์: ผสานเข้ากับเอนจินสำหรับ GPU/FPGA/ตัวเร่งเฉพาะทางได้ง่ายในระดับ query plan (เช่น Sirius, Velox, NVIDIA RAPIDS)
- การเชื่อมต่อข้ามแพลตฟอร์ม: เอนจินหลากหลายแบบ เช่น data lake, distributed processing, local analytics สามารถรับ query plan เดียวกันไปประมวลผลได้
ทำไม Substrait จึงสำคัญ?
- แต่ละเอนจินไม่จำเป็นต้องสร้างอินเทอร์เฟซแบบ custom แยกกันอีกต่อไป เพียงแค่ รองรับ Substrait ก็ผสานเข้ากับ ecosystem ได้ทันที
- ทำหน้าที่เป็น "ภาษากลางของ query/analysis execution plan" ระหว่าง data engine และแพลตฟอร์มต่าง ๆ
- คิวรีจาก DB → แปลงเป็น Substrait plan → ส่งต่อไปยัง GPU/เอนจินแบบกระจาย หรือตัวเร่งเฉพาะทางเพื่อประมวลผล
- เชื่อมต่อระหว่างเอนจินได้ในระดับ execution plan โดยไม่ต้องแปลง/เขียนคิวรีใหม่
- แม้จะมีเอนจินคิวรีตัวใหม่เกิดขึ้น ก็ยังสามารถสลับหรือประกอบใช้งานแบบ ปลั๊กอิน ได้ง่าย (ยืดหยุ่นต่อการเปลี่ยนเอนจิน)
- รวมภาษาและสภาพแวดล้อมคิวรีที่หลากหลาย เช่น SQL/ไพธอน/คิวรีแบบกระจาย
- รองรับการใช้งานแบบผสมหลายเอนจินในสภาพแวดล้อมคลัสเตอร์/แบบกระจาย (รองรับ heterogeneous environment)
- มีเวอร์ชันแบบข้อความ ทำให้ง่ายต่อการวิเคราะห์ query plan หรือเชื่อมต่อกับเครื่องมือ visualization
ตัวอย่างการใช้งานจริง
- แลกเปลี่ยน query plan ระหว่าง SQL parser และ execution engine (เช่น Calcite → Arrow, DuckDB → Sirius)
- DuckDB: รองรับการ export query plan ภายในเป็น Substrait และรองรับการ import คิวรี Substrait จากภายนอก
- Sirius: รับ Substrait query plan ที่สร้างจาก DuckDB ไปใช้งานบน GPU เพื่อรัน SQL ได้ทันที โดยไม่ต้อง parse/แก้ไขคิวรีเพิ่ม
- รันงาน DataFrame (เช่น Pandas) บนฐานข้อมูลภายนอก
- สร้างเครื่องมือ visualization สำหรับ query plan ของ third-party (เช่น D3, Web)
- Velox, Spark, DataFusion ฯลฯ: สามารถ export query plan ของแต่ละเอนจินเป็น Substrait เพื่อผสานกับเอนจินวิเคราะห์และตัวเร่งความเร็วอื่น ๆ ได้
ในเชิงเทคนิคมีโครงสร้างอย่างไร?
- แผนของ Substrait นิยามหลัก ๆ บนพื้นฐานของ Protocol Buffers (
.proto)
- ประกอบด้วย LogicalPlan, PhysicalPlan, Rel, Expression, Function เป็นต้น
- มีสคีมาที่ชัดเจนสำหรับตัวดำเนินการแต่ละประเภท เช่น Filter, Join, Aggregate, Project, Sort
- รองรับแค็ตตาล็อกของฟังก์ชัน/ชนิดข้อมูลที่ขยายได้ และการขยายด้วย UDF (User-Defined Function)
บทสรุป
- Substrait คือ "มาตรฐาน query execution plan" ของ ecosystem ด้านฐานข้อมูลและแพลตฟอร์มวิเคราะห์ ซึ่งเป็นหัวใจสำคัญของการทำงานร่วมกันระหว่างเอนจิน การเร่งความเร็วด้วยฮาร์ดแวร์ และความสามารถในการขยายตัวของ ecosystem ข้อมูล
- กำลังกลายเป็นมาตรฐานพื้นฐานที่ช่วยให้การเชื่อมต่อตัวเร่งฮาร์ดแวร์และการรวมเอนจินคิวรีง่ายขึ้น และทำให้สร้างโครงสร้างพื้นฐานด้านการวิเคราะห์ประสิทธิภาพสูงได้ง่าย โดยไม่ต้องผ่านขั้นตอน parse/แปลงคิวรีที่ซับซ้อน
ยังไม่มีความคิดเห็น