- さまざまなデータベースや分析・クエリエンジン間で、構造化されたデータ処理演算(関係代数、クエリプランなど)をシリアライズして交換できるように設計されたオープンソースのフォーマットおよびインターフェース
- DuckDB、Spark、DataFusion、Sirius など多様な DB・分散処理・クエリエンジンで、異なるシステム間のクエリ/実行計画の交換と互換性確保を目的に採用・導入が進んでいる
- SQL、DataFrame、Pandas など異なるクエリ言語やエンジンの実行計画を、**中立的/標準化されたフォーマット(Protocol Buffers、YAML、JSON など)**で表現し、プラグイン・サードパーティ製エンジン統合やハードウェアアクセラレータ連携を簡素化する
Substraitとは何か?
- データ分析/処理システムの「クエリプラン(Logical/Physical Plan)」を標準フォーマットとして定義したオープンソースプロジェクト
- SQL、DataFrame、LINQ など多様な言語のクエリ構造(例: SELECT-FROM-WHERE、Join、Aggregation、Projection、Filter など)を標準スキーマでシリアライズ/デシリアライズ
- データベースやエンジンごとにクエリパーサー・実行計画が異なり、相互連携やハードウェアアクセラレータ活用に限界がある → 共通標準(中間表現)として抽象化
- SQL、DataFrame、Pandas など異なるクエリ言語・フレームワークの実行計画を Substrait フォーマットへ変換して共有可能
Substraitの主な特徴
- 中立的なクエリ表現: 論理的(論理演算子)・物理的(実行演算子)クエリプランの両方を表現可能
- Protocol Buffers ベースのシリアライズ(主に .proto スキーマを活用)により、多様な言語やシステム間で効率的なデータ交換が可能
- エンジン/プラグイン拡張性: 新しい関数、演算子、型もプラグイン方式で拡張可能
- ハードウェアアクセラレーション連携: GPU/FPGA/専用アクセラレータ向けエンジンと、クエリプランレベルで容易に統合可能(Sirius、Velox、NVIDIA RAPIDS など)
- プラットフォーム間連携: データレイク、分散処理、ローカル分析など多様なエンジンが同一クエリプランを受け取って実行できる
Substraitが重要な理由
- 各エンジンが個別のカスタムインターフェースを作らなくても、Substrait をサポートするだけでエコシステム統合が即座に可能
- **データエンジン・プラットフォーム間の「クエリ/分析実行計画の共通言語」**として機能
- DB でクエリ → Substrait プラン → GPU/分散エンジン、別個のアクセラレータなどへ渡して実行
- クエリ変換/書き換えなしで「実行計画レベル」でエンジン間接続が可能
- 新しいクエリエンジンが登場しても、容易に「プラグイン」として置き換え/組み合わせが可能(エンジン置換の柔軟性)
- SQL/Python/分散クエリなど多様なクエリ言語・環境を統合
- クラスター/分散環境で多様なエンジンを混在運用できる(異種環境対応)
- テキスト版の提供により、クエリプランを容易に分析したり、可視化ツールと連携できる
実利用例
- SQL パーサーと実行エンジン間でのクエリプラン交換(Calcite → Arrow、DuckDB → Sirius など)
- DuckDB: 内部クエリプランを Substrait として書き出す(export)、外部から Substrait クエリを読み込む(import)機能をサポート
- Sirius: DuckDB で生成された Substrait クエリプランをそのまま受け取り、GPU 上で SQL を実行可能。クエリ解析/修正は不要
- データフレーム演算(Pandas など)を外部データベースで実行
- サードパーティ製クエリプラン可視化ツール(D3、Web など)の開発
- Velox、Spark、DataFusion など: 各エンジンのクエリプランを Substrait として書き出し、多様な分析・アクセラレーションエンジンと統合
技術的にはどのような構造か?
- Substrait プランは主にProtocol Buffers(.proto)ベースで定義
- LogicalPlan、PhysicalPlan、Rel、Expression、Function などで構成
- Filter、Join、Aggregate、Project、Sort など演算子ごとに明確なスキーマを持つ
- 拡張可能な関数/型カタログおよび UDF(User-Defined Function)拡張が可能
結論
- Substrait はデータベースおよび分析プラットフォームのエコシステムにおける「クエリ実行計画標準」であり、エンジン間相互運用性・ハードウェアアクセラレーション・データエコシステム拡張性の中核
- ハードウェアアクセラレータ連携やクエリエンジン統合を簡素化する基盤標準として定着しつつあり、複雑なクエリ解析/変換なしでも高性能な分析インフラ構築を容易にする
まだコメントはありません。