private abstract static class AbstractMaterializedViewRule.MaterializedViewAggregateRule extends AbstractMaterializedViewRule
AbstractMaterializedViewRule.MaterializedViewOnlyAggregateRule, AbstractMaterializedViewRule.MaterializedViewOnlyFilterRule, AbstractMaterializedViewRule.MaterializedViewOnlyJoinRule, AbstractMaterializedViewRule.MaterializedViewProjectAggregateRule, AbstractMaterializedViewRule.MaterializedViewProjectFilterRule, AbstractMaterializedViewRule.MaterializedViewProjectJoinRule
Modifier and Type | Field and Description |
---|---|
protected RelOptRule |
aggregateProjectPullUpConstantsRule
Instance of rule to pull up constants into aggregate.
|
protected RelOptRule |
filterAggregateTransposeRule
Instance of rule to push filter through aggregate.
|
protected RelOptRule |
filterProjectTransposeRule
Instance of rule to push filter through project.
|
protected RelOptRule |
projectMergeRule
Instance of rule to merge project operators.
|
private static com.google.common.collect.ImmutableList<org.apache.calcite.avatica.util.TimeUnitRange> |
SUPPORTED_DATE_TIME_ROLLUP_UNITS |
fastBailOut, generateUnionRewriting, INSTANCE_AGGREGATE, INSTANCE_FILTER, INSTANCE_JOIN, INSTANCE_PROJECT_AGGREGATE, INSTANCE_PROJECT_FILTER, INSTANCE_PROJECT_JOIN, unionRewritingPullProgram
description, operands, relBuilderFactory
Modifier | Constructor and Description |
---|---|
protected |
MaterializedViewAggregateRule(RelOptRuleOperand operand,
RelBuilderFactory relBuilderFactory,
java.lang.String description,
boolean generateUnionRewriting,
HepProgram unionRewritingPullProgram)
Creates a MaterializedViewAggregateRule.
|
Modifier and Type | Method and Description |
---|---|
protected AbstractMaterializedViewRule.ViewPartialRewriting |
compensateViewPartial(RelBuilder relBuilder,
RexBuilder rexBuilder,
RelMetadataQuery mq,
RelNode input,
Project topProject,
RelNode node,
java.util.Set<RexTableInputRef.RelTableRef> queryTableRefs,
AbstractMaterializedViewRule.EquivalenceClasses queryEC,
Project topViewProject,
RelNode viewNode,
java.util.Set<RexTableInputRef.RelTableRef> viewTableRefs)
It checks whether the query can be rewritten using the view even though the
query uses additional tables.
|
protected RelNode |
createUnion(RelBuilder relBuilder,
RexBuilder rexBuilder,
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.
|
protected com.google.common.collect.Multimap<java.lang.Integer,java.lang.Integer> |
generateMapping(RexBuilder rexBuilder,
RexSimplify simplify,
RelMetadataQuery mq,
RelNode node,
RelNode target,
ImmutableBitSet positions,
com.google.common.collect.BiMap<RexTableInputRef.RelTableRef,RexTableInputRef.RelTableRef> tableMapping,
AbstractMaterializedViewRule.EquivalenceClasses sourceEC,
java.util.List<RexNode> additionalExprs)
Mapping from node expressions to target expressions.
|
protected SqlFunction |
getCeilSqlFunction(org.apache.calcite.avatica.util.TimeUnitRange flag)
Get ceil function datetime.
|
protected SqlFunction |
getFloorSqlFunction(org.apache.calcite.avatica.util.TimeUnitRange flag)
Get floor function datetime.
|
protected SqlAggFunction |
getRollup(SqlAggFunction aggregation)
Get rollup aggregation function.
|
protected boolean |
isValidPlan(Project topProject,
RelNode node,
RelMetadataQuery mq) |
Pair<RelNode,RelNode> |
pushFilterToOriginalViewPlan(RelBuilder builder,
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 RelNode |
rewriteQuery(RelBuilder relBuilder,
RexBuilder rexBuilder,
RexSimplify simplify,
RelMetadataQuery mq,
RexNode compensationColumnsEquiPred,
RexNode otherCompensationPred,
Project topProject,
RelNode node,
com.google.common.collect.BiMap<RexTableInputRef.RelTableRef,RexTableInputRef.RelTableRef> queryToViewTableMapping,
AbstractMaterializedViewRule.EquivalenceClasses viewEC,
AbstractMaterializedViewRule.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 RelNode |
rewriteView(RelBuilder relBuilder,
RexBuilder rexBuilder,
RexSimplify simplify,
RelMetadataQuery mq,
AbstractMaterializedViewRule.MatchModality matchModality,
boolean unionRewriting,
RelNode input,
Project topProject,
RelNode node,
Project topViewProject,
RelNode viewNode,
com.google.common.collect.BiMap<RexTableInputRef.RelTableRef,RexTableInputRef.RelTableRef> queryToViewTableMapping,
AbstractMaterializedViewRule.EquivalenceClasses queryEC)
Rewrites the query using the given view query.
|
perform
any, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, onMatch, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
private static final com.google.common.collect.ImmutableList<org.apache.calcite.avatica.util.TimeUnitRange> SUPPORTED_DATE_TIME_ROLLUP_UNITS
protected final RelOptRule filterProjectTransposeRule
protected final RelOptRule filterAggregateTransposeRule
protected final RelOptRule aggregateProjectPullUpConstantsRule
protected final RelOptRule projectMergeRule
protected MaterializedViewAggregateRule(RelOptRuleOperand operand, RelBuilderFactory relBuilderFactory, java.lang.String description, boolean generateUnionRewriting, HepProgram unionRewritingPullProgram)
protected boolean isValidPlan(Project topProject, RelNode node, RelMetadataQuery mq)
isValidPlan
in class AbstractMaterializedViewRule
protected AbstractMaterializedViewRule.ViewPartialRewriting compensateViewPartial(RelBuilder relBuilder, RexBuilder rexBuilder, RelMetadataQuery mq, RelNode input, Project topProject, RelNode node, java.util.Set<RexTableInputRef.RelTableRef> queryTableRefs, AbstractMaterializedViewRule.EquivalenceClasses queryEC, Project topViewProject, RelNode viewNode, java.util.Set<RexTableInputRef.RelTableRef> viewTableRefs)
AbstractMaterializedViewRule
Rules implementing the method should follow different approaches depending on the operators they rewrite.
compensateViewPartial
in class AbstractMaterializedViewRule
protected RelNode rewriteQuery(RelBuilder relBuilder, RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, RexNode compensationColumnsEquiPred, RexNode otherCompensationPred, Project topProject, RelNode node, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef,RexTableInputRef.RelTableRef> queryToViewTableMapping, AbstractMaterializedViewRule.EquivalenceClasses viewEC, AbstractMaterializedViewRule.EquivalenceClasses queryEC)
AbstractMaterializedViewRule
If a rewriting can be produced, we return that rewriting. If it cannot be produced, we will return null.
rewriteQuery
in class AbstractMaterializedViewRule
protected RelNode createUnion(RelBuilder relBuilder, RexBuilder rexBuilder, RelNode topProject, RelNode unionInputQuery, RelNode unionInputView)
AbstractMaterializedViewRule
createUnion
in class AbstractMaterializedViewRule
protected RelNode rewriteView(RelBuilder relBuilder, RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, AbstractMaterializedViewRule.MatchModality matchModality, boolean unionRewriting, RelNode input, Project topProject, RelNode node, Project topViewProject, RelNode viewNode, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef,RexTableInputRef.RelTableRef> queryToViewTableMapping, AbstractMaterializedViewRule.EquivalenceClasses queryEC)
AbstractMaterializedViewRule
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.
rewriteView
in class AbstractMaterializedViewRule
protected com.google.common.collect.Multimap<java.lang.Integer,java.lang.Integer> generateMapping(RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, RelNode node, RelNode target, ImmutableBitSet positions, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef,RexTableInputRef.RelTableRef> tableMapping, AbstractMaterializedViewRule.EquivalenceClasses sourceEC, java.util.List<RexNode> additionalExprs)
If any of the expressions cannot be mapped, we return null.
protected SqlFunction getCeilSqlFunction(org.apache.calcite.avatica.util.TimeUnitRange flag)
protected SqlFunction getFloorSqlFunction(org.apache.calcite.avatica.util.TimeUnitRange flag)
protected SqlAggFunction getRollup(SqlAggFunction aggregation)
public Pair<RelNode,RelNode> pushFilterToOriginalViewPlan(RelBuilder builder, RelNode topViewProject, RelNode viewNode, RexNode cond)
AbstractMaterializedViewRule
The method will return a pair of nodes: the new top project on the left and the new node on the right.
pushFilterToOriginalViewPlan
in class AbstractMaterializedViewRule
Copyright © 2012–2019 The Apache Software Foundation. All rights reserved.