フレームワークを理解するために、方解石でいくつかの基本的なことをしようとしています。2 つの json ファイルから読み取ることになっている簡単な例をセットアップしました。私のモデルは次のようになります
{
version: '1.0',
defaultSchema: 'PEOPLE',
schemas: [
{
name: 'PEOPLE',
type: 'custom',
factory: 'demo.JsonSchemaFactory',
operand: {
directory: '/..../calcite-json/src/test/resources/files'
}
}
]
}
私のテストでは、データベースのメタデータ情報を取得すると、ファイルが PEOPLE スキーマの下のテーブルとしてロードされていることがわかるため、モデルは正常にロードされているようです。しかし、そのステートメントの直後に、select *そのテーブルから実行しようとすると、テーブルが見つからないというエラーが発生します。
> -- null PEOPLE a TABLE --> Jun 29, 2015 8:53:30 AM org.apache.calcite.sql.validate.SqlValidatorException <init> SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: Table 'A' not found Jun 29, 2015 8:53:30 AM org.apache.calcite.runtime.CalciteException <init> SEVERE: org.apache.calcite.runtime.CalciteContextException: At line 1, column 26: Table 'A' not found
出力の最初の行は、データベース メタデータ "-- null PEOPLE a TABLE -->" からのテーブルを示しています。これは、テーブル「a」がスキーマ「people」の下に存在し、タイプが「table」であることを示しています。
私のテストコードは次のようになります
@Test
public void testModel() throws SQLException {
Properties props = new Properties();
props.put("model", getPath("/model.json"));
System.out.println("model = " + props.get("model"));
Connection conn = DriverManager.getConnection("jdbc:calcite:", props);
DatabaseMetaData md = conn.getMetaData();
ResultSet tables = md.getTables(null, "PEOPLE", "%", null);
while (tables.next()) {
System.out.println("--");
System.out.println(tables.getString(1));
System.out.println(tables.getString(2));
System.out.println(tables.getString(3));
System.out.println(tables.getString(4));
System.out.println("-->");
}
Statement stat = conn.createStatement();
stat.execute("select _MAP['name'] from a");
stat.close();
conn.close();
}
ロードされたテーブルで選択できない理由はありますか?
私が気付いたもう 1 つの興味深い点は、1 つのファイルに対してSchema.getTableMap4 回呼び出されていることです。
プロジェクトの完全なコードはgithubで見つけることができます