table nicht mit Apache Calcit gefunden
Ich versuche, einige grundlegende Dinge mit Calcit zu tun, um das Gerüst zu verstehen. Ich habe ein einfaches Beispiel erstellt, das aus 2 JSON-Dateien gelesen werden soll. Mein Model sieht aus wie
{
version: '1.0',
defaultSchema: 'PEOPLE',
schemas: [
{
name: 'PEOPLE',
type: 'custom',
factory: 'demo.JsonSchemaFactory',
operand: {
directory: '/..../calcite-json/src/test/resources/files'
}
}
]
}
In meinem Test scheint das Modell einwandfrei geladen zu werden, da ich beim Abrufen der Datenbank-Metadateninformationen feststellen kann, dass meine Datei als Tabelle im PEOPLE-Schema geladen wird. Aber gleich nach dieser Aussage versuche ich ein @ zu machselect *
von dieser Tabelle und ich erhalte eine Fehlermeldung, dass die Tabelle nicht gefunden wurde.
> --
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
Die erste Zeile in der Ausgabe zeigt die Tabellen aus den Datenbank-Metadaten "- null PEOPLE a TABLE ->". Dies zeigt, dass eine Tabelle "a" unter dem Schema "people" vorhanden ist und vom Typ "table" ist.
Mein Testcode sieht so aus
@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();
}
Haben Sie eine Idee, warum ich auf dem geladenen Tisch keine Auswahl treffen kann?
Eine andere interessante Sache, die mir aufgefallen ist, ist, dass für 1 Datei,Schema.getTableMap
wird 4 mal aufgerufen.
Den vollständigen Code für das Projekt finden Sieon github