org.apache.calcite.rel.rules.ReduceExpressionsRule Java Examples
The following examples show how to use
org.apache.calcite.rel.rules.ReduceExpressionsRule.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: BatsOptimizerTest.java From Bats with Apache License 2.0 | 6 votes |
static void testVolcanoPlanner() throws Exception { VolcanoPlanner volcanoPlanner = createVolcanoPlanner(); volcanoPlanner.addRelTraitDef(ConventionTraitDef.INSTANCE); // volcanoPlanner.addRelTraitDef(RelCollationTraitDef.INSTANCE); // addRules(volcanoPlanner); volcanoPlanner.addRule(ReduceExpressionsRule.PROJECT_INSTANCE); // volcanoPlanner.addRule(EnumerableRules.ENUMERABLE_PROJECT_RULE); RelNode relNode = testSqlToRelConverter(volcanoPlanner); volcanoPlanner.setRoot(relNode); relNode = volcanoPlanner.findBestExp(); // 在这一步出错 String plan = RelOptUtil.toString(relNode); System.out.println("Volcano Plan:"); System.out.println("------------------------------------------------------------------"); System.out.println(plan); }
Example #2
Source File: BatsOptimizerTest.java From Bats with Apache License 2.0 | 5 votes |
static void testPrograms(RelNode relNode) { final RelOptPlanner planner = relNode.getCluster().getPlanner(); final Program program = Programs.ofRules(ReduceExpressionsRule.PROJECT_INSTANCE); relNode = program.run(planner, relNode, relNode.getTraitSet(), ImmutableList.of(), ImmutableList.of()); String plan = RelOptUtil.toString(relNode); System.out.println(plan); }
Example #3
Source File: HepPlannerTest.java From calcite with Apache License 2.0 | 5 votes |
private long checkRuleApplyCount(HepMatchOrder matchOrder) { final HepProgramBuilder programBuilder = HepProgram.builder(); programBuilder.addMatchOrder(matchOrder); programBuilder.addRuleInstance(ReduceExpressionsRule.FILTER_INSTANCE); programBuilder.addRuleInstance(ReduceExpressionsRule.PROJECT_INSTANCE); final HepTestListener listener = new HepTestListener(0); HepPlanner planner = new HepPlanner(programBuilder.build()); planner.addListener(listener); planner.setRoot(tester.convertSqlToRel(COMPLEX_UNION_TREE).rel); planner.findBestExp(); return listener.getApplyTimes(); }
Example #4
Source File: OLAPTableScan.java From kylin-on-parquet-v2 with Apache License 2.0 | 4 votes |
@Override public void register(RelOptPlanner planner) { // force clear the query context before traversal relational operators OLAPContext.clearThreadLocalContexts(); // register OLAP rules addRules(planner, kylinConfig.getCalciteAddRule()); planner.addRule(OLAPToEnumerableConverterRule.INSTANCE); planner.addRule(OLAPFilterRule.INSTANCE); planner.addRule(OLAPProjectRule.INSTANCE); planner.addRule(OLAPAggregateRule.INSTANCE); planner.addRule(OLAPJoinRule.INSTANCE); planner.addRule(OLAPLimitRule.INSTANCE); planner.addRule(OLAPSortRule.INSTANCE); planner.addRule(OLAPUnionRule.INSTANCE); planner.addRule(OLAPWindowRule.INSTANCE); planner.addRule(OLAPValuesRule.INSTANCE); planner.addRule(AggregateProjectReduceRule.INSTANCE); // CalcitePrepareImpl.CONSTANT_REDUCTION_RULES if (kylinConfig.isReduceExpressionsRulesEnabled()) { planner.addRule(ReduceExpressionsRule.PROJECT_INSTANCE); planner.addRule(ReduceExpressionsRule.FILTER_INSTANCE); planner.addRule(ReduceExpressionsRule.CALC_INSTANCE); planner.addRule(ReduceExpressionsRule.JOIN_INSTANCE); } // the ValuesReduceRule breaks query test somehow... // planner.addRule(ValuesReduceRule.FILTER_INSTANCE); // planner.addRule(ValuesReduceRule.PROJECT_FILTER_INSTANCE); // planner.addRule(ValuesReduceRule.PROJECT_INSTANCE); removeRules(planner, kylinConfig.getCalciteRemoveRule()); if (!kylinConfig.isEnumerableRulesEnabled()) { for (RelOptRule rule : CalcitePrepareImpl.ENUMERABLE_RULES) { planner.removeRule(rule); } } // since join is the entry point, we can't push filter past join planner.removeRule(FilterJoinRule.FILTER_ON_JOIN); planner.removeRule(FilterJoinRule.JOIN); // since we don't have statistic of table, the optimization of join is too cost planner.removeRule(JoinCommuteRule.INSTANCE); planner.removeRule(JoinPushThroughJoinRule.LEFT); planner.removeRule(JoinPushThroughJoinRule.RIGHT); // keep tree structure like filter -> aggregation -> project -> join/table scan, implementOLAP() rely on this tree pattern planner.removeRule(AggregateJoinTransposeRule.INSTANCE); planner.removeRule(AggregateProjectMergeRule.INSTANCE); planner.removeRule(FilterProjectTransposeRule.INSTANCE); planner.removeRule(SortJoinTransposeRule.INSTANCE); planner.removeRule(JoinPushExpressionsRule.INSTANCE); planner.removeRule(SortUnionTransposeRule.INSTANCE); planner.removeRule(JoinUnionTransposeRule.LEFT_UNION); planner.removeRule(JoinUnionTransposeRule.RIGHT_UNION); planner.removeRule(AggregateUnionTransposeRule.INSTANCE); planner.removeRule(DateRangeRules.FILTER_INSTANCE); planner.removeRule(SemiJoinRule.JOIN); planner.removeRule(SemiJoinRule.PROJECT); // distinct count will be split into a separated query that is joined with the left query planner.removeRule(AggregateExpandDistinctAggregatesRule.INSTANCE); // see Dec 26th email @ http://mail-archives.apache.org/mod_mbox/calcite-dev/201412.mbox/browser planner.removeRule(ExpandConversionRule.INSTANCE); }
Example #5
Source File: CalcitePlanner.java From herddb with Apache License 2.0 | 4 votes |
private PlannerResult runPlanner(String defaultTableSpace, String query) throws RelConversionException, SqlParseException, ValidationException, MetadataStorageManagerException, StatementExecutionException { SchemaPlus subSchema = getSchemaForTableSpace(defaultTableSpace); if (subSchema == null) { clearCache(); throw new StatementExecutionException("tablespace " + defaultTableSpace + " is not available"); } Properties props = new Properties(); props.put(CalciteConnectionProperty.TIME_ZONE.camelName(), TimeZone.getDefault().getID()); props.put(CalciteConnectionProperty.LOCALE.camelName(), Locale.ROOT.toString()); final CalciteConnectionConfigImpl calciteRuntimeContextConfig = new CalciteConnectionConfigImpl(props); final FrameworkConfig config = Frameworks.newConfigBuilder() .parserConfig(SQL_PARSER_CONFIG) .defaultSchema(subSchema) .traitDefs(TRAITS) .context(new Context() { @Override public <C> C unwrap(Class<C> aClass) { if (aClass == CalciteConnectionConfigImpl.class || aClass == CalciteConnectionConfig.class) { return (C) calciteRuntimeContextConfig; } return null; } }) // define the rules you want to apply .programs(Programs.ofRules(Programs.RULE_SET)) .build(); Planner planner = Frameworks.getPlanner(config); if (LOG.isLoggable(Level.FINER)) { LOG.log(Level.FINER, "Query: {0}", query); } try { SqlNode n = planner.parse(query); n = planner.validate(n); RelNode logicalPlan = planner.rel(n).project(); if (LOG.isLoggable(DUMP_QUERY_LEVEL)) { LOG.log(DUMP_QUERY_LEVEL, "Query: {0} {1}", new Object[]{query, RelOptUtil.dumpPlan("-- Logical Plan", logicalPlan, SqlExplainFormat.TEXT, SqlExplainLevel.ALL_ATTRIBUTES)}); } RelDataType originalRowType = logicalPlan.getRowType(); RelOptCluster cluster = logicalPlan.getCluster(); final RelOptPlanner optPlanner = cluster.getPlanner(); optPlanner.addRule(ReduceExpressionsRule.FILTER_INSTANCE); RelTraitSet desiredTraits = cluster.traitSet() .replace(EnumerableConvention.INSTANCE); final RelCollation collation = logicalPlan instanceof Sort ? ((Sort) logicalPlan).collation : null; if (collation != null) { desiredTraits = desiredTraits.replace(collation); } final RelNode newRoot = optPlanner.changeTraits(logicalPlan, desiredTraits); optPlanner.setRoot(newRoot); RelNode bestExp = optPlanner.findBestExp(); if (LOG.isLoggable(DUMP_QUERY_LEVEL)) { LOG.log(DUMP_QUERY_LEVEL, "Query: {0} {1}", new Object[]{query, RelOptUtil.dumpPlan("-- Best Plan", bestExp, SqlExplainFormat.TEXT, SqlExplainLevel.ALL_ATTRIBUTES)}); } return new PlannerResult(bestExp, originalRowType, logicalPlan, n); } catch (AssertionError err) { throw new StatementExecutionException("Internal Calcite error " + err, err); } }
Example #6
Source File: OLAPTableScan.java From kylin with Apache License 2.0 | 4 votes |
@Override public void register(RelOptPlanner planner) { // force clear the query context before traversal relational operators OLAPContext.clearThreadLocalContexts(); // register OLAP rules addRules(planner, kylinConfig.getCalciteAddRule()); planner.addRule(OLAPToEnumerableConverterRule.INSTANCE); planner.addRule(OLAPFilterRule.INSTANCE); planner.addRule(OLAPProjectRule.INSTANCE); planner.addRule(OLAPAggregateRule.INSTANCE); planner.addRule(OLAPJoinRule.INSTANCE); planner.addRule(OLAPLimitRule.INSTANCE); planner.addRule(OLAPSortRule.INSTANCE); planner.addRule(OLAPUnionRule.INSTANCE); planner.addRule(OLAPWindowRule.INSTANCE); planner.addRule(OLAPValuesRule.INSTANCE); planner.addRule(AggregateProjectReduceRule.INSTANCE); // CalcitePrepareImpl.CONSTANT_REDUCTION_RULES if (kylinConfig.isReduceExpressionsRulesEnabled()) { planner.addRule(ReduceExpressionsRule.PROJECT_INSTANCE); planner.addRule(ReduceExpressionsRule.FILTER_INSTANCE); planner.addRule(ReduceExpressionsRule.CALC_INSTANCE); planner.addRule(ReduceExpressionsRule.JOIN_INSTANCE); } // the ValuesReduceRule breaks query test somehow... // planner.addRule(ValuesReduceRule.FILTER_INSTANCE); // planner.addRule(ValuesReduceRule.PROJECT_FILTER_INSTANCE); // planner.addRule(ValuesReduceRule.PROJECT_INSTANCE); removeRules(planner, kylinConfig.getCalciteRemoveRule()); if (!kylinConfig.isEnumerableRulesEnabled()) { for (RelOptRule rule : CalcitePrepareImpl.ENUMERABLE_RULES) { planner.removeRule(rule); } } // since join is the entry point, we can't push filter past join planner.removeRule(FilterJoinRule.FILTER_ON_JOIN); planner.removeRule(FilterJoinRule.JOIN); // since we don't have statistic of table, the optimization of join is too cost planner.removeRule(JoinCommuteRule.INSTANCE); planner.removeRule(JoinPushThroughJoinRule.LEFT); planner.removeRule(JoinPushThroughJoinRule.RIGHT); // keep tree structure like filter -> aggregation -> project -> join/table scan, implementOLAP() rely on this tree pattern planner.removeRule(AggregateJoinTransposeRule.INSTANCE); planner.removeRule(AggregateProjectMergeRule.INSTANCE); planner.removeRule(FilterProjectTransposeRule.INSTANCE); planner.removeRule(SortJoinTransposeRule.INSTANCE); planner.removeRule(JoinPushExpressionsRule.INSTANCE); planner.removeRule(SortUnionTransposeRule.INSTANCE); planner.removeRule(JoinUnionTransposeRule.LEFT_UNION); planner.removeRule(JoinUnionTransposeRule.RIGHT_UNION); planner.removeRule(AggregateUnionTransposeRule.INSTANCE); planner.removeRule(DateRangeRules.FILTER_INSTANCE); planner.removeRule(SemiJoinRule.JOIN); planner.removeRule(SemiJoinRule.PROJECT); // distinct count will be split into a separated query that is joined with the left query planner.removeRule(AggregateExpandDistinctAggregatesRule.INSTANCE); // see Dec 26th email @ http://mail-archives.apache.org/mod_mbox/calcite-dev/201412.mbox/browser planner.removeRule(ExpandConversionRule.INSTANCE); // KYLIN-4464 do not pushdown sort when there is a window function in projection planner.removeRule(SortProjectTransposeRule.INSTANCE); planner.addRule(KylinSortProjectTransposeRule.INSTANCE); }