Class MaterializedViewAggregateRule<C extends MaterializedViewAggregateRule.Config>
java.lang.Object
org.apache.calcite.plan.RelOptRule
org.apache.calcite.plan.RelRule<C>
org.apache.calcite.rel.rules.materialize.MaterializedViewRule<C>
org.apache.calcite.rel.rules.materialize.MaterializedViewAggregateRule<C>
- Type Parameters:
- C- Configuration type
- Direct Known Subclasses:
- MaterializedViewOnlyAggregateRule,- MaterializedViewProjectAggregateRule
public abstract class MaterializedViewAggregateRule<C extends MaterializedViewAggregateRule.Config>
extends MaterializedViewRule<C>
Materialized view rewriting for aggregate.
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic interfaceRule configuration.Nested classes/interfaces inherited from class org.apache.calcite.rel.rules.materialize.MaterializedViewRuleMaterializedViewRule.Edge, MaterializedViewRule.EquivalenceClasses, MaterializedViewRule.MatchModality, MaterializedViewRule.NodeLineage, MaterializedViewRule.ViewPartialRewritingNested classes/interfaces inherited from class org.apache.calcite.plan.RelRuleRelRule.Done, RelRule.MatchHandler<R extends RelOptRule>, RelRule.OperandBuilder, RelRule.OperandDetailBuilder<R extends RelNode>, RelRule.OperandTransformNested classes/interfaces inherited from class org.apache.calcite.plan.RelOptRuleRelOptRule.ConverterRelOptRuleOperand
- 
Field SummaryFieldsModifier and TypeFieldDescriptionprotected static final com.google.common.collect.ImmutableList<org.apache.calcite.avatica.util.TimeUnitRange>Fields inherited from class org.apache.calcite.plan.RelOptRuledescription, operands, relBuilderFactory
- 
Method SummaryModifier and TypeMethodDescriptionprotected @Nullable MaterializedViewRule.ViewPartialRewritingcompensateViewPartial(RelBuilder relBuilder, RexBuilder rexBuilder, RelMetadataQuery mq, RelNode input, @Nullable Project topProject, RelNode node, Set<RexTableInputRef.RelTableRef> queryTableRefs, MaterializedViewRule.EquivalenceClasses queryEC, @Nullable Project topViewProject, RelNode viewNode, Set<RexTableInputRef.RelTableRef> viewTableRefs) It checks whether the query can be rewritten using the view even though the query uses additional tables.protected @Nullable RelNodecreateUnion(RelBuilder relBuilder, RexBuilder rexBuilder, @Nullable RelNode topProject, RelNode unionInputQuery, RelNode unionInputView) If the view will be used in a union rewriting, this method is responsible for generating the union and any other operator needed on top of it, e.g., a Project operator.generateMapping(RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, RelNode node, RelNode target, ImmutableBitSet positions, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef, RexTableInputRef.RelTableRef> tableMapping, MaterializedViewRule.EquivalenceClasses sourceEC, List<RexNode> additionalExprs) Mapping from node expressions to target expressions.protected SqlFunctiongetCeilSqlFunction(org.apache.calcite.avatica.util.TimeUnitRange flag) Get ceil function datetime.protected SqlFunctiongetFloorSqlFunction(org.apache.calcite.avatica.util.TimeUnitRange flag) Get floor function datetime.protected @Nullable SqlAggFunctiongetRollup(SqlAggFunction aggregation) Deprecated.protected booleanisValidPlan(@Nullable Project topProject, RelNode node, RelMetadataQuery mq) pushFilterToOriginalViewPlan(RelBuilder builder, @Nullable RelNode topViewProject, RelNode viewNode, RexNode cond) Once we create a compensation predicate, this method is responsible for pushing the resulting filter through the view nodes.protected @Nullable RelNoderewriteQuery(RelBuilder relBuilder, RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, RexNode compensationColumnsEquiPred, RexNode otherCompensationPred, @Nullable Project topProject, RelNode node, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef, RexTableInputRef.RelTableRef> queryToViewTableMapping, MaterializedViewRule.EquivalenceClasses viewEC, MaterializedViewRule.EquivalenceClasses queryEC) If the view will be used in a union rewriting, this method is responsible for rewriting the query branch of the union using the given compensation predicate.protected @Nullable RelNoderewriteView(RelBuilder relBuilder, RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, MaterializedViewRule.MatchModality matchModality, boolean unionRewriting, RelNode input, @Nullable Project topProject, RelNode node, @Nullable Project topViewProject0, RelNode viewNode, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef, RexTableInputRef.RelTableRef> queryToViewTableMapping, MaterializedViewRule.EquivalenceClasses queryEC) Rewrites the query using the given view query.Methods inherited from class org.apache.calcite.rel.rules.materialize.MaterializedViewRulecompensatePartial, computeCompensationPredicates, extractPossibleMapping, extractReferences, generateEquivalenceClasses, generateSwapColumnTableReferencesLineage, generateSwapTableColumnReferencesLineage, generateTableMappings, isValidRelNodePlan, matches, perform, replaceWithOriginalReferences, rewriteExpression, rewriteExpressions, shuttleReferences, shuttleReferences, shuttleReferences, splitPredicatesMethods inherited from class org.apache.calcite.plan.RelOptRuleany, convert, convert, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, none, onMatch, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
- 
Field Details- 
SUPPORTED_DATE_TIME_ROLLUP_UNITSprotected static final com.google.common.collect.ImmutableList<org.apache.calcite.avatica.util.TimeUnitRange> SUPPORTED_DATE_TIME_ROLLUP_UNITS
 
- 
- 
Method Details- 
isValidPlan- Specified by:
- isValidPlanin class- MaterializedViewRule<C extends MaterializedViewAggregateRule.Config>
 
- 
compensateViewPartialprotected @Nullable MaterializedViewRule.ViewPartialRewriting compensateViewPartial(RelBuilder relBuilder, RexBuilder rexBuilder, RelMetadataQuery mq, RelNode input, @Nullable Project topProject, RelNode node, Set<RexTableInputRef.RelTableRef> queryTableRefs, MaterializedViewRule.EquivalenceClasses queryEC, @Nullable Project topViewProject, RelNode viewNode, Set<RexTableInputRef.RelTableRef> viewTableRefs) Description copied from class:MaterializedViewRuleIt checks whether the query can be rewritten using the view even though the query uses additional tables.Rules implementing the method should follow different approaches depending on the operators they rewrite. - Specified by:
- compensateViewPartialin class- MaterializedViewRule<C extends MaterializedViewAggregateRule.Config>
- Returns:
- ViewPartialRewriting, or null if the rewrite can't be done
 
- 
rewriteQueryprotected @Nullable RelNode rewriteQuery(RelBuilder relBuilder, RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, RexNode compensationColumnsEquiPred, RexNode otherCompensationPred, @Nullable Project topProject, RelNode node, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef, RexTableInputRef.RelTableRef> queryToViewTableMapping, MaterializedViewRule.EquivalenceClasses viewEC, MaterializedViewRule.EquivalenceClasses queryEC) Description copied from class:MaterializedViewRuleIf the view will be used in a union rewriting, this method is responsible for rewriting the query branch of the union using the given compensation predicate.If a rewriting can be produced, we return that rewriting. If it cannot be produced, we will return null. - Specified by:
- rewriteQueryin class- MaterializedViewRule<C extends MaterializedViewAggregateRule.Config>
 
- 
createUnionprotected @Nullable RelNode createUnion(RelBuilder relBuilder, RexBuilder rexBuilder, @Nullable RelNode topProject, RelNode unionInputQuery, RelNode unionInputView) Description copied from class:MaterializedViewRuleIf the view will be used in a union rewriting, this method is responsible for generating the union and any other operator needed on top of it, e.g., a Project operator.- Specified by:
- createUnionin class- MaterializedViewRule<C extends MaterializedViewAggregateRule.Config>
 
- 
rewriteViewprotected @Nullable RelNode rewriteView(RelBuilder relBuilder, RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, MaterializedViewRule.MatchModality matchModality, boolean unionRewriting, RelNode input, @Nullable Project topProject, RelNode node, @Nullable Project topViewProject0, RelNode viewNode, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef, RexTableInputRef.RelTableRef> queryToViewTableMapping, MaterializedViewRule.EquivalenceClasses queryEC) Description copied from class:MaterializedViewRuleRewrites the query using the given view query.The input node is a Scan on the view table and possibly a compensation Filter on top. If a rewriting can be produced, we return that rewriting. If it cannot be produced, we will return null. - Specified by:
- rewriteViewin class- MaterializedViewRule<C extends MaterializedViewAggregateRule.Config>
 
- 
generateMappingprotected @Nullable com.google.common.collect.Multimap<Integer,Integer> generateMapping(RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, RelNode node, RelNode target, ImmutableBitSet positions, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef, RexTableInputRef.RelTableRef> tableMapping, MaterializedViewRule.EquivalenceClasses sourceEC, List<RexNode> additionalExprs) Mapping from node expressions to target expressions.If any of the expressions cannot be mapped, we return null. 
- 
getCeilSqlFunctionGet ceil function datetime.
- 
getFloorSqlFunctionGet floor function datetime.
- 
getRollupDeprecated.Get rollup aggregation function.
- 
pushFilterToOriginalViewPlanpublic Pair<@Nullable RelNode,RelNode> pushFilterToOriginalViewPlan(RelBuilder builder, @Nullable RelNode topViewProject, RelNode viewNode, RexNode cond) Description copied from class:MaterializedViewRuleOnce we create a compensation predicate, this method is responsible for pushing the resulting filter through the view nodes. This might be useful for rewritings containing Aggregate operators, as some of the grouping columns might be removed, which results in additional matching possibilities.The method will return a pair of nodes: the new top project on the left and the new node on the right. - Specified by:
- pushFilterToOriginalViewPlanin class- MaterializedViewRule<C extends MaterializedViewAggregateRule.Config>
 
 
-