use of org.apache.calcite.schema.Table in project calcite by apache.
the class SqlLatticeStatisticProvider method cardinality.
private double cardinality(Lattice lattice, Lattice.Column column) {
final String sql = lattice.countSql(ImmutableBitSet.of(column.ordinal));
final Table table = new MaterializationService.DefaultTableFactory().createTable(lattice.rootSchema, sql, ImmutableList.<String>of());
final Object[] values = Iterables.getOnlyElement(((ScannableTable) table).scan(null));
return ((Number) values[0]).doubleValue();
}
use of org.apache.calcite.schema.Table in project calcite by apache.
the class ReflectiveSchema method createTableMap.
private Map<String, Table> createTableMap() {
final ImmutableMap.Builder<String, Table> builder = ImmutableMap.builder();
for (Field field : clazz.getFields()) {
final String fieldName = field.getName();
final Table table = fieldRelation(field);
if (table == null) {
continue;
}
builder.put(fieldName, table);
}
Map<String, Table> tableMap = builder.build();
// Unique-Key - Foreign-Key
for (Field field : clazz.getFields()) {
if (RelReferentialConstraint.class.isAssignableFrom(field.getType())) {
RelReferentialConstraint rc;
try {
rc = (RelReferentialConstraint) field.get(target);
} catch (IllegalAccessException e) {
throw new RuntimeException("Error while accessing field " + field, e);
}
FieldTable table = (FieldTable) tableMap.get(Util.last(rc.getSourceQualifiedName()));
assert table != null;
table.statistic = Statistics.of(ImmutableList.copyOf(Iterables.concat(table.getStatistic().getReferentialConstraints(), Collections.singleton(rc))));
}
}
return tableMap;
}
use of org.apache.calcite.schema.Table in project calcite by apache.
the class StarTable method getRowType.
public RelDataType getRowType(RelDataTypeFactory typeFactory) {
final List<RelDataType> typeList = new ArrayList<RelDataType>();
final List<Integer> fieldCounts = new ArrayList<Integer>();
for (Table table : tables) {
final RelDataType rowType = table.getRowType(typeFactory);
typeList.addAll(RelOptUtil.getFieldTypeList(rowType));
fieldCounts.add(rowType.getFieldCount());
}
// that the field counts will be the same whichever type factory is used.
if (this.fieldCounts == null) {
this.fieldCounts = ImmutableIntList.copyOf(fieldCounts);
}
return typeFactory.createStructType(typeList, lattice.uniqueColumnNames);
}
use of org.apache.calcite.schema.Table 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.schema.Table 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