private MaterializedViewTableMacro(CalciteSchema schema, String viewSql, List<String> viewSchemaPath, List<String> viewPath, String suggestedTableName, boolean existing) { super(schema, viewSql, viewSchemaPath != null ? viewSchemaPath : schema.path(null), viewPath, Boolean.TRUE); this.key = Objects.requireNonNull( MaterializationService.instance().defineMaterialization( schema, null, viewSql, schemaPath, suggestedTableName, true, existing)); }
private MaterializedViewTableMacro(CalciteSchema schema, String viewSql, List<String> viewSchemaPath, List<String> viewPath, String suggestedTableName, boolean existing) { super(schema, viewSql, viewSchemaPath != null ? viewSchemaPath : schema.path(null), viewPath, Boolean.TRUE); this.key = Objects.requireNonNull( MaterializationService.instance().defineMaterialization( schema, null, viewSql, schemaPath, suggestedTableName, true, existing)); }
@Override protected List<Materialization> getMaterializations() { final List<Prepare.Materialization> materializations = context.config().materializationsEnabled() ? MaterializationService.instance().query(schema) : ImmutableList.of(); for (Prepare.Materialization materialization : materializations) { prepare.populateMaterializations(context, planner, materialization); } return materializations; }
@Override protected List<Materialization> getMaterializations() { final List<Materialization> materializations = context.config().materializationsEnabled() ? MaterializationService.instance().query(schema) : ImmutableList.<Prepare.Materialization>of(); for (Prepare.Materialization materialization : materializations) { prepare.populateMaterializations(context, planner, materialization); } return materializations; }
@Override protected List<Materialization> getMaterializations() { final List<Prepare.Materialization> materializations = context.config().materializationsEnabled() ? MaterializationService.instance().query(schema) : ImmutableList.of(); for (Prepare.Materialization materialization : materializations) { prepare.populateMaterializations(context, planner, materialization); } return materializations; }
@Override public RelNode toRel(RelOptTable.ToRelContext context, RelOptTable relOptTable) { final CalciteSchema.TableEntry tableEntry = MaterializationService.instance().checkValid(key); if (tableEntry != null) { Table materializeTable = tableEntry.getTable(); if (materializeTable instanceof TranslatableTable) { TranslatableTable table = (TranslatableTable) materializeTable; return table.toRel(context, relOptTable); } } return super.toRel(context, relOptTable); }
@Override public RelNode toRel(RelOptTable.ToRelContext context, RelOptTable relOptTable) { final CalciteSchema.TableEntry tableEntry = MaterializationService.instance().checkValid(key); if (tableEntry != null) { Table materializeTable = tableEntry.getTable(); if (materializeTable instanceof TranslatableTable) { TranslatableTable table = (TranslatableTable) materializeTable; return table.toRel(context, relOptTable); } } return super.toRel(context, relOptTable); }
/** Called after the constructor has completed and the model has been * loaded. */ void init() { final MaterializationService service = MaterializationService.instance(); for (CalciteSchema.LatticeEntry e : Schemas.getLatticeEntries(rootSchema)) { final Lattice lattice = e.getLattice(); for (Lattice.Tile tile : lattice.computeTiles()) { service.defineTile(lattice, tile.bitSet(), tile.measures, e.schema, true, true); } } }
/** Called after the constructor has completed and the model has been * loaded. */ void init() { final MaterializationService service = MaterializationService.instance(); for (CalciteSchema.LatticeEntry e : Schemas.getLatticeEntries(rootSchema)) { final Lattice lattice = e.getLattice(); for (Lattice.Tile tile : lattice.computeTiles()) { service.defineTile(lattice, tile.bitSet(), tile.measures, e.schema, true, true); } } }
/** Retrieves a materialized table that will satisfy an aggregate query on * the star table. * * <p>The current implementation creates a materialization and populates it, * provided that {@link Lattice#auto} is true. * * <p>Future implementations might return materializations at a different * level of aggregation, from which the desired result can be obtained by * rolling up. * * @param planner Current planner * @param groupSet Grouping key * @param measureList Calls to aggregate functions * @return Materialized table */ public Pair<CalciteSchema.TableEntry, TileKey> getAggregate( RelOptPlanner planner, ImmutableBitSet groupSet, List<Lattice.Measure> measureList) { final CalciteConnectionConfig config = planner.getContext().unwrap(CalciteConnectionConfig.class); if (config == null) { return null; } final MaterializationService service = MaterializationService.instance(); boolean create = lattice.auto && config.createMaterializations(); final CalciteSchema schema = starRelOptTable.unwrap(CalciteSchema.class); return service.defineTile(lattice, groupSet, measureList, schema, create, false); } }
/** Retrieves a materialized table that will satisfy an aggregate query on * the star table. * * <p>The current implementation creates a materialization and populates it, * provided that {@link Lattice#auto} is true. * * <p>Future implementations might return materializations at a different * level of aggregation, from which the desired result can be obtained by * rolling up. * * @param planner Current planner * @param groupSet Grouping key * @param measureList Calls to aggregate functions * @return Materialized table */ public Pair<CalciteSchema.TableEntry, TileKey> getAggregate( RelOptPlanner planner, ImmutableBitSet groupSet, List<Lattice.Measure> measureList) { final CalciteConnectionConfig config = planner.getContext().unwrap(CalciteConnectionConfig.class); if (config == null) { return null; } final MaterializationService service = MaterializationService.instance(); boolean create = lattice.auto && config.createMaterializations(); final CalciteSchema schema = starRelOptTable.unwrap(CalciteSchema.class); return service.defineTile(lattice, groupSet, measureList, schema, create, false); } }
private void populateMaterializationsAndLattice( QuarkMaterializeCluster.RelOptPlannerHolder plannerHolder, CalciteSchema rootSchema) { if (materializations == null) { materializations = MaterializationService.instance().query(rootSchema); } Materializer materializer = new Materializer(materializations); materializer.populateMaterializations(context.getPrepareContext(), plannerHolder); List<CalciteSchema.LatticeEntry> lattices = Schemas.getLatticeEntries(rootSchema); for (CalciteSchema.LatticeEntry lattice : lattices) { final CalciteSchema.TableEntry starTable = lattice.getStarTable(); final JavaTypeFactory typeFactory = context.getTypeFactory(); final RelOptTableImpl starRelOptTable = RelOptTableImpl.create(catalogReader, starTable.getTable().getRowType(typeFactory), starTable, null); plannerHolder.getPlanner().addLattice( new RelOptLattice(lattice.getLattice(), starRelOptTable)); } } }
private void checkTileAlgorithm(String statisticProvider, String expectedExplain) { MaterializationService.setThreadLocal(); MaterializationService.instance().clear(); foodmartLatticeModel(statisticProvider) .query("select distinct t.\"the_year\", t.\"quarter\"\n" + "from \"foodmart\".\"sales_fact_1997\" as s\n" + "join \"foodmart\".\"time_by_day\" as t using (\"time_id\")\n") .enableMaterializations(true) // disable for MySQL; times out running star-join query // disable for H2; it thinks our generated SQL has invalid syntax .enable(CalciteAssert.DB != CalciteAssert.DatabaseInstance.MYSQL && CalciteAssert.DB != CalciteAssert.DatabaseInstance.H2) .explainContains(expectedExplain) .returnsUnordered("the_year=1997; quarter=Q1", "the_year=1997; quarter=Q2", "the_year=1997; quarter=Q3", "the_year=1997; quarter=Q4"); }
private void checkTileAlgorithm(String statisticProvider, String expectedExplain) { MaterializationService.setThreadLocal(); MaterializationService.instance().clear(); foodmartLatticeModel(statisticProvider) .query("select distinct t.\"the_year\", t.\"quarter\"\n" + "from \"foodmart\".\"sales_fact_1997\" as s\n" + "join \"foodmart\".\"time_by_day\" as t using (\"time_id\")\n") .enableMaterializations(true) // disable for MySQL; times out running star-join query // disable for H2; it thinks our generated SQL has invalid syntax .enable(CalciteAssert.DB != CalciteAssert.DatabaseInstance.MYSQL && CalciteAssert.DB != CalciteAssert.DatabaseInstance.H2) .explainContains(expectedExplain) .returnsUnordered("the_year=1997; quarter=Q1", "the_year=1997; quarter=Q2", "the_year=1997; quarter=Q3", "the_year=1997; quarter=Q4"); }
MaterializationService.instance().defineMaterialization(calciteSchema, null, view.viewSql, view.schema, view.table, tableFactory, true, false); (QuarkTable) tileTEntry.getTable())); final MaterializationService service = MaterializationService.instance(); for (CalciteSchema.LatticeEntry e : Schemas.getLatticeEntries( CalciteSchema.from(queryContext.getRootSchema()))) {