私は Apache Calcite を使用して、データソースが RDBMS である分散 OLAP システムを実装しています。RelNode
だから私はプロジェクト/フィルター/集約をツリーにプッシュダウンしたいMyTableScan extends TableScan
. では、押されMyTableScan
たを取得します。最後に、ソース データベースへのクエリを生成します。同時に、元のツリーのプロジェクト/フィルター/集計を移動または変更する必要があります。RelBuilder
RelNode
RelBuilder
RelNode
私が知っているように、Calcite はこの機能をサポートしていません。
現在の制限: JDBC アダプターは現在、テーブル スキャン操作のみをプッシュします。他のすべての処理 (フィルタリング、結合、集計など) は Calcite 内で行われます。私たちの目標は、できるだけ多くの処理をソース システムにプッシュ ダウンし、構文、データ型、および組み込み関数を変換することです。Calcite クエリが単一の JDBC データベースのテーブルに基づいている場合、原則としてクエリ全体がそのデータベースに送信されます。テーブルが複数の JDBC ソースからのものである場合、または JDBC と非 JDBC が混在している場合、Calcite は可能な限り最も効率的な分散クエリ アプローチを使用します。
私の意見でRelOptRule
は、良い選択かもしれません。残念ながら、 new を作成するとRelOptRule
、ノードを削除する親ノードを簡単に見つけることができません。
RelOptRule
良い選択ですか?この機能を実装する良いアイデアはありますか?
ありがとう。