Class FlinkRelMdCollation
- java.lang.Object
-
- org.apache.flink.table.planner.plan.metadata.FlinkRelMdCollation
-
- All Implemented Interfaces:
org.apache.calcite.rel.metadata.MetadataHandler<org.apache.calcite.rel.metadata.BuiltInMetadata.Collation>
public class FlinkRelMdCollation extends Object implements org.apache.calcite.rel.metadata.MetadataHandler<org.apache.calcite.rel.metadata.BuiltInMetadata.Collation>
FlinkRelMdCollation supplies a default implementation ofRelMetadataQuery.collations(org.apache.calcite.rel.RelNode)
for the standard logical algebra.
-
-
Field Summary
Fields Modifier and Type Field Description static org.apache.calcite.rel.metadata.RelMetadataProvider
SOURCE
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static List<org.apache.calcite.rel.RelCollation>
calc(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input, org.apache.calcite.rex.RexProgram program)
Helper method to determine aCalc
's collation.com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.adapter.enumerable.EnumerableCorrelate join, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.adapter.enumerable.EnumerableHashJoin join, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.adapter.enumerable.EnumerableMergeJoin join, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.adapter.enumerable.EnumerableNestedLoopJoin join, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.plan.hep.HepRelVertex rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.plan.volcano.RelSubset subset, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.core.Calc calc, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.core.Filter rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.core.Match rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.core.Project project, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.core.SortExchange sort, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.core.Sort sort, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.core.TableModify rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.core.TableScan scan, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.core.Values values, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.core.Window rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation>
collations(org.apache.calcite.rel.RelNode rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
Catch-all implementation forBuiltInMetadata.Collation.collations()
, invoked using reflection, for any relational expression not handled by a more specific method.static List<org.apache.calcite.rel.RelCollation>
enumerableBatchNestedLoopJoin(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rel.core.JoinRelType joinType)
static List<org.apache.calcite.rel.RelCollation>
enumerableCorrelate(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rel.core.JoinRelType joinType)
static List<org.apache.calcite.rel.RelCollation>
enumerableHashJoin(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rel.core.JoinRelType joinType)
Returns the collation ofEnumerableHashJoin
based on its inputs and the join type.static List<org.apache.calcite.rel.RelCollation>
enumerableNestedLoopJoin(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rel.core.JoinRelType joinType)
Returns the collation ofEnumerableNestedLoopJoin
based on its inputs and the join type.static List<org.apache.calcite.rel.RelCollation>
enumerableSemiJoin(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right)
static List<org.apache.calcite.rel.RelCollation>
filter(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input)
Helper method to determine aFilter
's collation.org.apache.calcite.rel.metadata.MetadataDef<org.apache.calcite.rel.metadata.BuiltInMetadata.Collation>
getDef()
static List<org.apache.calcite.rel.RelCollation>
limit(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input)
Helper method to determine a limit's collation.static List<org.apache.calcite.rel.RelCollation>
match(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input, org.apache.calcite.rel.type.RelDataType rowType, org.apache.calcite.rex.RexNode pattern, boolean strictStart, boolean strictEnd, Map<String,org.apache.calcite.rex.RexNode> patternDefinitions, Map<String,org.apache.calcite.rex.RexNode> measures, org.apache.calcite.rex.RexNode after, Map<String,? extends SortedSet<String>> subsets, boolean allRows, org.apache.calcite.util.ImmutableBitSet partitionKeys, org.apache.calcite.rel.RelCollation orderKeys, org.apache.calcite.rex.RexNode interval)
Helper method to determine aMatch
's collation.static List<org.apache.calcite.rel.RelCollation>
mergeJoin(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.util.ImmutableIntList leftKeys, org.apache.calcite.util.ImmutableIntList rightKeys)
Helper method to determine aJoin
's collation assuming that it uses a merge-join algorithm.static List<org.apache.calcite.rel.RelCollation>
project(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input, List<? extends org.apache.calcite.rex.RexNode> projects)
Helper method to determine aProject
's collation.static List<org.apache.calcite.rel.RelCollation>
snapshot(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input)
Helper method to determine aSnapshot
's collation.static List<org.apache.calcite.rel.RelCollation>
sort(org.apache.calcite.rel.RelCollation collation)
Helper method to determine aSort
's collation.static List<org.apache.calcite.rel.RelCollation>
table(org.apache.calcite.plan.RelOptTable table)
Helper method to determine aTableScan
's collation.static List<org.apache.calcite.rel.RelCollation>
values(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.type.RelDataType rowType, com.google.common.collect.ImmutableList<com.google.common.collect.ImmutableList<org.apache.calcite.rex.RexLiteral>> tuples)
Helper method to determine aValues
's collation.static List<org.apache.calcite.rel.RelCollation>
window(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input, com.google.common.collect.ImmutableList<org.apache.calcite.rel.core.Window.Group> groups)
Helper method to determine aWindow
's collation.
-
-
-
Method Detail
-
getDef
public org.apache.calcite.rel.metadata.MetadataDef<org.apache.calcite.rel.metadata.BuiltInMetadata.Collation> getDef()
- Specified by:
getDef
in interfaceorg.apache.calcite.rel.metadata.MetadataHandler<org.apache.calcite.rel.metadata.BuiltInMetadata.Collation>
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.core.TableScan scan, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.core.Values values, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.core.Project project, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.core.Filter rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.core.Calc calc, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.core.SortExchange sort, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.core.Sort sort, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.core.Window rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.adapter.enumerable.EnumerableCorrelate join, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.adapter.enumerable.EnumerableMergeJoin join, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.adapter.enumerable.EnumerableHashJoin join, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.adapter.enumerable.EnumerableNestedLoopJoin join, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.core.Match rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.core.TableModify rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.plan.hep.HepRelVertex rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.plan.volcano.RelSubset subset, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
-
collations
public com.google.common.collect.ImmutableList<org.apache.calcite.rel.RelCollation> collations(org.apache.calcite.rel.RelNode rel, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
Catch-all implementation forBuiltInMetadata.Collation.collations()
, invoked using reflection, for any relational expression not handled by a more specific method.Union
,Intersect
,Minus
,Join
,Correlate
do not in general return sorted results (but implementations using particular algorithms may).- Parameters:
rel
- Relational expression- Returns:
- Relational expression's collations
- See Also:
RelMetadataQuery.collations(RelNode)
-
table
public static List<org.apache.calcite.rel.RelCollation> table(org.apache.calcite.plan.RelOptTable table)
Helper method to determine aTableScan
's collation.
-
values
public static List<org.apache.calcite.rel.RelCollation> values(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.type.RelDataType rowType, com.google.common.collect.ImmutableList<com.google.common.collect.ImmutableList<org.apache.calcite.rex.RexLiteral>> tuples)
Helper method to determine aValues
's collation.We actually under-report the collations. A Values with 0 or 1 rows - an edge case, but legitimate and very common - is ordered by every permutation of every subset of the columns.
So, our algorithm aims to:
- produce at most N collations (where N is the number of columns);
- make each collation as long as possible;
- do not repeat combinations already emitted - if we've emitted
(a, b)
do not later emit(b, a)
; - probe the actual values and make sure that each collation is consistent with the data
So, for an empty Values with 4 columns, we would emit
(a, b, c, d), (b, c, d), (c, d), (d)
.
-
project
public static List<org.apache.calcite.rel.RelCollation> project(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input, List<? extends org.apache.calcite.rex.RexNode> projects)
Helper method to determine aProject
's collation.
-
filter
public static List<org.apache.calcite.rel.RelCollation> filter(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input)
Helper method to determine aFilter
's collation.
-
calc
public static List<org.apache.calcite.rel.RelCollation> calc(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input, org.apache.calcite.rex.RexProgram program)
Helper method to determine aCalc
's collation.
-
snapshot
public static List<org.apache.calcite.rel.RelCollation> snapshot(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input)
Helper method to determine aSnapshot
's collation.
-
sort
public static List<org.apache.calcite.rel.RelCollation> sort(org.apache.calcite.rel.RelCollation collation)
Helper method to determine aSort
's collation.
-
limit
public static List<org.apache.calcite.rel.RelCollation> limit(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input)
Helper method to determine a limit's collation.
-
window
public static List<org.apache.calcite.rel.RelCollation> window(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input, com.google.common.collect.ImmutableList<org.apache.calcite.rel.core.Window.Group> groups)
Helper method to determine aWindow
's collation.A Window projects the fields of its input first, followed by the output from each of its windows. Assuming (quite reasonably) that the implementation does not re-order its input rows, then any collations of its input are preserved.
-
match
public static List<org.apache.calcite.rel.RelCollation> match(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode input, org.apache.calcite.rel.type.RelDataType rowType, org.apache.calcite.rex.RexNode pattern, boolean strictStart, boolean strictEnd, Map<String,org.apache.calcite.rex.RexNode> patternDefinitions, Map<String,org.apache.calcite.rex.RexNode> measures, org.apache.calcite.rex.RexNode after, Map<String,? extends SortedSet<String>> subsets, boolean allRows, org.apache.calcite.util.ImmutableBitSet partitionKeys, org.apache.calcite.rel.RelCollation orderKeys, org.apache.calcite.rex.RexNode interval)
Helper method to determine aMatch
's collation.
-
mergeJoin
public static List<org.apache.calcite.rel.RelCollation> mergeJoin(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.util.ImmutableIntList leftKeys, org.apache.calcite.util.ImmutableIntList rightKeys)
Helper method to determine aJoin
's collation assuming that it uses a merge-join algorithm.If the inputs are sorted on other keys in addition to the join key, the result preserves those collations too.
-
enumerableHashJoin
public static List<org.apache.calcite.rel.RelCollation> enumerableHashJoin(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rel.core.JoinRelType joinType)
Returns the collation ofEnumerableHashJoin
based on its inputs and the join type.
-
enumerableNestedLoopJoin
public static List<org.apache.calcite.rel.RelCollation> enumerableNestedLoopJoin(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rel.core.JoinRelType joinType)
Returns the collation ofEnumerableNestedLoopJoin
based on its inputs and the join type.
-
enumerableCorrelate
public static List<org.apache.calcite.rel.RelCollation> enumerableCorrelate(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rel.core.JoinRelType joinType)
-
enumerableSemiJoin
public static List<org.apache.calcite.rel.RelCollation> enumerableSemiJoin(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right)
-
enumerableBatchNestedLoopJoin
public static List<org.apache.calcite.rel.RelCollation> enumerableBatchNestedLoopJoin(org.apache.calcite.rel.metadata.RelMetadataQuery mq, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rel.core.JoinRelType joinType)
-
-