• ฟอร์แมตและอินเทอร์เฟซโอเพนซอร์ส ที่ออกแบบมาเพื่อให้สามารถ ซีเรียลไลซ์และแลกเปลี่ยนงานประมวลผลข้อมูลเชิงโครงสร้าง (เช่น 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/แปลงคิวรีที่ซับซ้อน

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น