public class RelMdExpressionLineage extends java.lang.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.
Modifier and Type | Class and Description |
---|---|
private static class |
RelMdExpressionLineage.RexReplacer
Replaces expressions with their equivalences.
|
Modifier and Type | Field and Description |
---|---|
static RelMetadataProvider |
SOURCE |
Modifier | Constructor and Description |
---|---|
protected |
RelMdExpressionLineage() |
Modifier and Type | Method and Description |
---|---|
private static java.util.Set<RexNode> |
createAllPossibleExpressions(RexBuilder rexBuilder,
RexNode expr,
ImmutableBitSet predFieldsUsed,
java.util.Map<RexInputRef,java.util.Set<RexNode>> mapping,
java.util.Map<RexInputRef,RexNode> singleMapping) |
protected static java.util.Set<RexNode> |
createAllPossibleExpressions(RexBuilder rexBuilder,
RexNode expr,
java.util.Map<RexInputRef,java.util.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.
|
private static void |
createExpressions(RexBuilder rexBuilder,
RexNode expr,
ImmutableBitSet predFieldsUsed,
java.util.Map<RexInputRef,java.util.Set<RexNode>> mapping,
java.util.Map<RexInputRef,RexNode> singleMapping,
java.util.Set<RexNode> result) |
private static ImmutableBitSet |
extractInputRefs(RexNode expr) |
MetadataDef<BuiltInMetadata.ExpressionLineage> |
getDef() |
java.util.Set<RexNode> |
getExpressionLineage(Aggregate rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from
Aggregate . |
java.util.Set<RexNode> |
getExpressionLineage(Exchange rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from Exchange.
|
java.util.Set<RexNode> |
getExpressionLineage(Filter rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from Filter.
|
java.util.Set<RexNode> |
getExpressionLineage(HepRelVertex rel,
RelMetadataQuery mq,
RexNode outputExpression) |
java.util.Set<RexNode> |
getExpressionLineage(Join rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from
Join . |
java.util.Set<RexNode> |
getExpressionLineage(Project rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from Project.
|
java.util.Set<RexNode> |
getExpressionLineage(RelNode rel,
RelMetadataQuery mq,
RexNode outputExpression) |
java.util.Set<RexNode> |
getExpressionLineage(RelSubset rel,
RelMetadataQuery mq,
RexNode outputExpression) |
java.util.Set<RexNode> |
getExpressionLineage(Sort rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from Sort.
|
java.util.Set<RexNode> |
getExpressionLineage(TableScan rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from
TableScan . |
java.util.Set<RexNode> |
getExpressionLineage(Union rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from
Union . |
public static final RelMetadataProvider SOURCE
public MetadataDef<BuiltInMetadata.ExpressionLineage> getDef()
getDef
in interface MetadataHandler<BuiltInMetadata.ExpressionLineage>
public java.util.Set<RexNode> getExpressionLineage(RelNode rel, RelMetadataQuery mq, RexNode outputExpression)
public java.util.Set<RexNode> getExpressionLineage(HepRelVertex rel, RelMetadataQuery mq, RexNode outputExpression)
public java.util.Set<RexNode> getExpressionLineage(RelSubset rel, RelMetadataQuery mq, RexNode outputExpression)
public java.util.Set<RexNode> getExpressionLineage(TableScan rel, RelMetadataQuery mq, RexNode outputExpression)
TableScan
.
We extract the fields referenced by the expression and we express them
using RexTableInputRef
.
public java.util.Set<RexNode> getExpressionLineage(Aggregate rel, RelMetadataQuery mq, RexNode outputExpression)
Aggregate
.
If the expression references grouping sets or aggregate function results, we cannot extract the lineage and we return null.
public java.util.Set<RexNode> getExpressionLineage(Join rel, RelMetadataQuery mq, RexNode outputExpression)
Join
.
We only extract the lineage for INNER joins.
public java.util.Set<RexNode> getExpressionLineage(Union rel, RelMetadataQuery mq, RexNode outputExpression)
Union
.
For Union operator, we might be able to extract multiple origins for the references in the given expression.
public java.util.Set<RexNode> getExpressionLineage(Project rel, RelMetadataQuery mq, RexNode outputExpression)
public java.util.Set<RexNode> getExpressionLineage(Filter rel, RelMetadataQuery mq, RexNode outputExpression)
public java.util.Set<RexNode> getExpressionLineage(Sort rel, RelMetadataQuery mq, RexNode outputExpression)
public java.util.Set<RexNode> getExpressionLineage(Exchange rel, RelMetadataQuery mq, RexNode outputExpression)
@Nullable protected static java.util.Set<RexNode> createAllPossibleExpressions(RexBuilder rexBuilder, RexNode expr, java.util.Map<RexInputRef,java.util.Set<RexNode>> mapping)
rexBuilder
- rexBuilderexpr
- expressionmapping
- mappingprivate static java.util.Set<RexNode> createAllPossibleExpressions(RexBuilder rexBuilder, RexNode expr, ImmutableBitSet predFieldsUsed, java.util.Map<RexInputRef,java.util.Set<RexNode>> mapping, java.util.Map<RexInputRef,RexNode> singleMapping)
private static void createExpressions(RexBuilder rexBuilder, RexNode expr, ImmutableBitSet predFieldsUsed, java.util.Map<RexInputRef,java.util.Set<RexNode>> mapping, java.util.Map<RexInputRef,RexNode> singleMapping, java.util.Set<RexNode> result)
private static ImmutableBitSet extractInputRefs(RexNode expr)
Copyright © 2012–2019 The Apache Software Foundation. All rights reserved.