public class IntersectToDistinctRule extends RelOptRule
false) into a group of operators composed of
Rewrite: (GB-Union All-GB)-GB-UDTF (on all attributes)
R1 Intersect All R2
R3 = GB(R1 on all attributes, count(*) as c)
GB(R2 on all attributes, count(*) as c)
R4 = GB(R3 on all attributes, count(c) as cnt, min(c) as m)
Note that we do not need
min(c) in intersect distinct.
R5 = Filter(cnt == #branch)
If it is intersect all then
R6 = UDTF (R5) which will explode the tuples based on min(c)
R7 = Project(R6 on all attributes)
R6 = Proj(R5 on all attributes)
|Modifier and Type||Field and Description|
|Constructor and Description|
Creates an IntersectToDistinctRule.
|Modifier and Type||Method and Description|
Receives notification about a rule match.
any, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
public static final IntersectToDistinctRule INSTANCE
public void onMatch(RelOptRuleCall call)
call.relsholds the set of relational expressions which match the operands to the rule;
call.relsis the root expression.
Typically a rule would check that the nodes are valid matches, creates
a new expression, then calls back
RelOptRuleCall.transformTo(org.apache.calcite.rel.RelNode, java.util.Map<org.apache.calcite.rel.RelNode, org.apache.calcite.rel.RelNode>) to
register the expression.
Copyright © 2012–2018 The Apache Software Foundation. All rights reserved.