use of org.apache.calcite.adapter.csv.JsonTable in project calcite by apache.
the class FileSchema method addTable.
private boolean addTable(ImmutableMap.Builder<String, Table> builder, Source source, String tableName, Map<String, Object> tableDef) {
final Source sourceSansGz = source.trim(".gz");
final Source sourceSansJson = sourceSansGz.trimOrNull(".json");
if (sourceSansJson != null) {
JsonTable table = new JsonTable(source);
builder.put(Util.first(tableName, sourceSansJson.path()), table);
return true;
}
final Source sourceSansCsv = sourceSansGz.trimOrNull(".csv");
if (sourceSansCsv != null) {
final Table table = new CsvFilterableTable(source, null);
builder.put(Util.first(tableName, sourceSansCsv.path()), table);
return true;
}
if (tableDef != null) {
try {
FileTable table = FileTable.create(source, tableDef);
builder.put(Util.first(tableName, source.path()), table);
return true;
} catch (Exception e) {
throw new RuntimeException("Unable to instantiate table for: " + tableName);
}
}
return false;
}
use of org.apache.calcite.adapter.csv.JsonTable in project calcite by apache.
the class FileSchema method getTableMap.
@Override
protected Map<String, Table> getTableMap() {
final ImmutableMap.Builder<String, Table> builder = ImmutableMap.builder();
for (Map<String, Object> tableDef : this.tables) {
String tableName = (String) tableDef.get("name");
try {
addTable(builder, tableDef);
} catch (MalformedURLException e) {
throw new RuntimeException("Unable to instantiate table for: " + tableName);
}
}
// Look for files in the directory ending in ".csv", ".csv.gz", ".json",
// ".json.gz".
final Source baseSource = Sources.of(baseDirectory);
File[] files = baseDirectory.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
final String nameSansGz = trim(name, ".gz");
return nameSansGz.endsWith(".csv") || nameSansGz.endsWith(".json");
}
});
if (files == null) {
System.out.println("directory " + baseDirectory + " not found");
files = new File[0];
}
// Build a map from table name to table; each file becomes a table.
for (File file : files) {
Source source = Sources.of(file);
Source sourceSansGz = source.trim(".gz");
final Source sourceSansJson = sourceSansGz.trimOrNull(".json");
if (sourceSansJson != null) {
JsonTable table = new JsonTable(source);
builder.put(sourceSansJson.relative(baseSource).path(), table);
continue;
}
final Source sourceSansCsv = sourceSansGz.trimOrNull(".csv");
if (sourceSansCsv != null) {
addTable(builder, source, sourceSansCsv.relative(baseSource).path(), null);
}
}
return builder.build();
}
Aggregations