Class RelMdExpressionLineage
- All Implemented Interfaces:
MetadataHandler<BuiltInMetadata.ExpressionLineage>
public class RelMdExpressionLineage extends Object implements MetadataHandler<BuiltInMetadata.ExpressionLineage>
RelMetadataQuery.getExpressionLineage(org.apache.calcite.rel.RelNode, org.apache.calcite.rex.RexNode)
for the standard logical
algebra.
The goal of this provider is to infer the lineage for the given expression.
The output expressions might contain references to columns produced by
TableScan
operators (RexTableInputRef
). In turn, each
TableScan operator is identified uniquely by a RexTableInputRef.RelTableRef
containing
its qualified name and an identifier.
If the lineage cannot be inferred, we return null.
-
Field Summary
Fields Modifier and Type Field Description static RelMetadataProvider
SOURCE
-
Constructor Summary
Constructors Modifier Constructor Description protected
RelMdExpressionLineage()
-
Method Summary
Modifier and Type Method Description protected static Set<RexNode>
createAllPossibleExpressions(RexBuilder rexBuilder, RexNode expr, Map<RexInputRef,Set<RexNode>> mapping)
Given an expression, it will create all equivalent expressions resulting from replacing all possible combinations of references in the mapping by the corresponding expressions.MetadataDef<BuiltInMetadata.ExpressionLineage>
getDef()
Set<RexNode>
getExpressionLineage(HepRelVertex rel, RelMetadataQuery mq, RexNode outputExpression)
Set<RexNode>
getExpressionLineage(RelSubset rel, RelMetadataQuery mq, RexNode outputExpression)
Set<RexNode>
getExpressionLineage(Aggregate rel, RelMetadataQuery mq, RexNode outputExpression)
Expression lineage fromAggregate
.Set<RexNode>
getExpressionLineage(Exchange rel, RelMetadataQuery mq, RexNode outputExpression)
Expression lineage from Exchange.Set<RexNode>
getExpressionLineage(Filter rel, RelMetadataQuery mq, RexNode outputExpression)
Expression lineage from Filter.Set<RexNode>
getExpressionLineage(Join rel, RelMetadataQuery mq, RexNode outputExpression)
Expression lineage fromJoin
.Set<RexNode>
getExpressionLineage(Project rel, RelMetadataQuery mq, RexNode outputExpression)
Expression lineage from Project.Set<RexNode>
getExpressionLineage(Sort rel, RelMetadataQuery mq, RexNode outputExpression)
Expression lineage from Sort.Set<RexNode>
getExpressionLineage(TableModify rel, RelMetadataQuery mq, RexNode outputExpression)
Expression lineage from TableModify.Set<RexNode>
getExpressionLineage(TableScan rel, RelMetadataQuery mq, RexNode outputExpression)
Expression lineage fromTableScan
.Set<RexNode>
getExpressionLineage(Union rel, RelMetadataQuery mq, RexNode outputExpression)
Expression lineage fromUnion
.Set<RexNode>
getExpressionLineage(RelNode rel, RelMetadataQuery mq, RexNode outputExpression)
-
Field Details
-
Constructor Details
-
RelMdExpressionLineage
protected RelMdExpressionLineage()
-
-
Method Details
-
getDef
- Specified by:
getDef
in interfaceMetadataHandler<BuiltInMetadata.ExpressionLineage>
-
getExpressionLineage
public Set<RexNode> getExpressionLineage(RelNode rel, RelMetadataQuery mq, RexNode outputExpression) -
getExpressionLineage
public Set<RexNode> getExpressionLineage(HepRelVertex rel, RelMetadataQuery mq, RexNode outputExpression) -
getExpressionLineage
public Set<RexNode> getExpressionLineage(RelSubset rel, RelMetadataQuery mq, RexNode outputExpression) -
getExpressionLineage
public Set<RexNode> getExpressionLineage(TableScan rel, RelMetadataQuery mq, RexNode outputExpression)Expression lineage fromTableScan
.We extract the fields referenced by the expression and we express them using
RexTableInputRef
. -
getExpressionLineage
public Set<RexNode> getExpressionLineage(Aggregate rel, RelMetadataQuery mq, RexNode outputExpression)Expression lineage fromAggregate
.If the expression references grouping sets or aggregate function results, we cannot extract the lineage and we return null.
-
getExpressionLineage
Expression lineage fromJoin
.We only extract the lineage for INNER joins.
-
getExpressionLineage
Expression lineage fromUnion
.For Union operator, we might be able to extract multiple origins for the references in the given expression.
-
getExpressionLineage
public Set<RexNode> getExpressionLineage(Project rel, RelMetadataQuery mq, RexNode outputExpression)Expression lineage from Project. -
getExpressionLineage
public Set<RexNode> getExpressionLineage(Filter rel, RelMetadataQuery mq, RexNode outputExpression)Expression lineage from Filter. -
getExpressionLineage
Expression lineage from Sort. -
getExpressionLineage
public Set<RexNode> getExpressionLineage(TableModify rel, RelMetadataQuery mq, RexNode outputExpression)Expression lineage from TableModify. -
getExpressionLineage
public Set<RexNode> getExpressionLineage(Exchange rel, RelMetadataQuery mq, RexNode outputExpression)Expression lineage from Exchange. -
createAllPossibleExpressions
@Nullable protected static Set<RexNode> createAllPossibleExpressions(RexBuilder rexBuilder, RexNode expr, Map<RexInputRef,Set<RexNode>> mapping)Given an expression, it will create all equivalent expressions resulting from replacing all possible combinations of references in the mapping by the corresponding expressions.- Parameters:
rexBuilder
- rexBuilderexpr
- expressionmapping
- mapping- Returns:
- set of resulting expressions equivalent to the input expression
-