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.
| 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 |
|---|---|
private |
RelMdExpressionLineage() |
| Modifier and Type | Method and Description |
|---|---|
private static Set<RexNode> |
createAllPossibleExpressions(RexBuilder rexBuilder,
RexNode expr,
ImmutableBitSet predFieldsUsed,
Map<RexInputRef,Set<RexNode>> mapping,
Map<RexInputRef,RexNode> singleMapping) |
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.
|
private static void |
createExpressions(RexBuilder rexBuilder,
RexNode expr,
ImmutableBitSet predFieldsUsed,
Map<RexInputRef,Set<RexNode>> mapping,
Map<RexInputRef,RexNode> singleMapping,
Set<RexNode> result) |
MetadataDef<BuiltInMetadata.ExpressionLineage> |
getDef() |
Set<RexNode> |
getExpressionLineage(Aggregate rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from
Aggregate. |
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(HepRelVertex rel,
RelMetadataQuery mq,
RexNode outputExpression) |
Set<RexNode> |
getExpressionLineage(Join rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from
Join. |
Set<RexNode> |
getExpressionLineage(Project rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from Project.
|
Set<RexNode> |
getExpressionLineage(RelNode rel,
RelMetadataQuery mq,
RexNode outputExpression) |
Set<RexNode> |
getExpressionLineage(RelSubset rel,
RelMetadataQuery mq,
RexNode outputExpression) |
Set<RexNode> |
getExpressionLineage(Sort rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from Sort.
|
Set<RexNode> |
getExpressionLineage(TableScan rel,
RelMetadataQuery mq,
RexNode outputExpression)
Expression lineage from
TableScan. |
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 Set<RexNode> getExpressionLineage(RelNode rel, RelMetadataQuery mq, RexNode outputExpression)
public Set<RexNode> getExpressionLineage(HepRelVertex rel, RelMetadataQuery mq, RexNode outputExpression)
public Set<RexNode> getExpressionLineage(RelSubset rel, RelMetadataQuery mq, RexNode outputExpression)
public 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 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 Set<RexNode> getExpressionLineage(Join rel, RelMetadataQuery mq, RexNode outputExpression)
Join.
We only extract the lineage for INNER joins.
public 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 Set<RexNode> getExpressionLineage(Project rel, RelMetadataQuery mq, RexNode outputExpression)
public Set<RexNode> getExpressionLineage(Filter rel, RelMetadataQuery mq, RexNode outputExpression)
public Set<RexNode> getExpressionLineage(Sort rel, RelMetadataQuery mq, RexNode outputExpression)
public Set<RexNode> getExpressionLineage(Exchange rel, RelMetadataQuery mq, RexNode outputExpression)
protected static Set<RexNode> createAllPossibleExpressions(RexBuilder rexBuilder, RexNode expr, Map<RexInputRef,Set<RexNode>> mapping)
rexBuilder - rexBuilderexpr - expressionmapping - mappingprivate static Set<RexNode> createAllPossibleExpressions(RexBuilder rexBuilder, RexNode expr, ImmutableBitSet predFieldsUsed, Map<RexInputRef,Set<RexNode>> mapping, Map<RexInputRef,RexNode> singleMapping)
private static void createExpressions(RexBuilder rexBuilder, RexNode expr, ImmutableBitSet predFieldsUsed, Map<RexInputRef,Set<RexNode>> mapping, Map<RexInputRef,RexNode> singleMapping, Set<RexNode> result)
Copyright © 2012–2018 The Apache Software Foundation. All rights reserved.