2016-11-25 10 views
0

私は現在、SQL-Queryを解析し、それに対する関係式のツリーを作成するプロジェクトに取り組んでいます。 主な目的は、クエリ内の参加パートナーを特定することです。 私は結合式をツリーの葉にプッシュしたいと思います。 これを達成するために、Apache Calciteを使用することにしました。 私のコードは、現時点ではおおよそ次のようになります。Apache Calcite:SQL構文解析ツリーを検証なしで関係式のツリーに変換する

Planner planner = Frameworks.getPlanner(Frameworks.newConfigBuilder().defaultSchema(Frameworks.createRootSchema(false)).build()); 

SqlNode parsed = planner.parse("SELECT s.dnasamplename, e.Total_expression_level, e.Soluble_expression_level, s.id " + 
      "FROM table1 e" + 
      "JOIN table2 s on s.constructname = e.Clone_name" + 
      "WHERE e.Total_expression_level like '0:%'"); 

planner.validate(parsed); 

RelRoot relRoot = planner.rel(parsed); 

私が直接PlannerのREL-メソッドを実行しようとすると、私は私が最初のクエリを検証しなければならないエラーが発生します。そして、それは私がトラブルに直面するポイントです。私は有効なスキーマを持っていません。私は、クエリをリレーショナルクエリプランに変換したいだけです。検証プロセスをスキップする方法はありますか?

答えて

0

検証プロセスをスキップすることはできません。 sql-to-relationalコンバータは、以前にバリデータによって作成された状態に依存します。

SQLが無効な場合、バリデータは例外をスローし、これが唯一の目的であると考えられます。州を建設することも同様に重要です。ステートには、各SqlNodeの型のマップ、SELECT句の「*」および「tableAlias。*」の展開、および完全修飾識別子が含まれます。

スキーマが不足しているか不完全な場合は、Apache Drillと同様の方法を試してみてください。バリデーターがテーブルの特定のカラムを要求し、テーブルにそのカラムがない場合、そのテーブルのCalcite名前空間には「はい、私はそのカラムがあります!」と表示されます。追加します。したがって、検証プロセスは成功し、各ネームスペースにはクエリに必要な余分な列のリストがあります。

関連する問題