Package org.apache.druid.sql.calcite.rel
Class DruidCorrelateUnnestRel
java.lang.Object
org.apache.calcite.rel.AbstractRelNode
org.apache.druid.sql.calcite.rel.DruidRel<DruidCorrelateUnnestRel>
org.apache.druid.sql.calcite.rel.DruidCorrelateUnnestRel
- All Implemented Interfaces:
Cloneable,org.apache.calcite.plan.RelOptNode,org.apache.calcite.rel.RelNode
This is the DruidRel to handle correlated rel nodes to be used for unnest.
Each correlate can be perceived as a join with the join type being inner
the left of a correlate as seen in the rule
DruidCorrelateUnnestRule
is the DruidQueryRel while the right will always be an DruidUnnestRel.
Since this is a subclass of DruidRel it is automatically considered by other rules that involves DruidRels.
Some example being SELECT_PROJECT and SORT_PROJECT rules in DruidRules.DruidQueryRule
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classShuttle that replaces correlating variables with regular field accesses to the left-hand side.Nested classes/interfaces inherited from interface org.apache.calcite.rel.RelNode
org.apache.calcite.rel.RelNode.Context -
Field Summary
Fields inherited from class org.apache.calcite.rel.AbstractRelNode
digest, id, rowType, traitSet -
Method Summary
Modifier and TypeMethodDescriptionReturns a copy of this rel with theDruidConventiontrait.static booleancomputeLeftRequiresSubquery(DruidRel<?> left) Computes whether a particular left-side rel requires a subquery, or if we can operate on its underlying datasource directly.org.apache.calcite.plan.RelOptCostcomputeSelfCost(org.apache.calcite.plan.RelOptPlanner planner, org.apache.calcite.rel.metadata.RelMetadataQuery mq) org.apache.calcite.rel.RelNodestatic DruidCorrelateUnnestRelcreate(org.apache.calcite.rel.core.Correlate correlateRel, PlannerContext plannerContext) Create an instance from a Correlate that is based on aDruidReland aDruidUnnestRelinputs.protected org.apache.calcite.rel.type.RelDataTypeorg.apache.calcite.rel.RelWriterexplainTerms(org.apache.calcite.rel.RelWriter pw) Overridden to ensure that subclasses provide a proper implementation.Get the set of names of table datasources read by this DruidRelList<org.apache.calcite.rel.RelNode>Returns the PartialDruidQuery associated with this DruidRel, and which can be built on top of.toDruidQuery(boolean finalizeAggregations) Convert this DruidRel to a DruidQuery.Convert this DruidRel to a DruidQuery for purposes of explaining.withPartialQuery(PartialDruidQuery newQueryBuilder) Methods inherited from class org.apache.druid.sql.calcite.rel.DruidRel
clone, getPlannerContext, isValidDruidQuery, runQuery, unwrapLogicalPlanMethods inherited from class org.apache.calcite.rel.AbstractRelNode
accept, accept, childrenAccept, collectVariablesSet, collectVariablesUsed, deepEquals, deepHashCode, equals, estimateRowCount, explain, getCluster, getConvention, getCorrelVariable, getDescription, getDigest, getExpectedInputRowType, getId, getInput, getRelDigest, getRelTypeName, getRowType, getTable, getTraitSet, getVariablesSet, hashCode, isEnforcer, isValid, metadata, onRegister, recomputeDigest, register, replaceInput, sole, toStringMethods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.calcite.rel.RelNode
explain, fieldIsNullable, stripped
-
Method Details
-
create
public static DruidCorrelateUnnestRel create(org.apache.calcite.rel.core.Correlate correlateRel, PlannerContext plannerContext) Create an instance from a Correlate that is based on aDruidReland aDruidUnnestRelinputs. -
getPartialDruidQuery
Description copied from class:DruidRelReturns the PartialDruidQuery associated with this DruidRel, and which can be built on top of. Returns null if this rel cannot be built on top of.- Specified by:
getPartialDruidQueryin classDruidRel<DruidCorrelateUnnestRel>
-
withPartialQuery
- Specified by:
withPartialQueryin classDruidRel<DruidCorrelateUnnestRel>
-
toDruidQuery
Description copied from class:DruidRelConvert this DruidRel to a DruidQuery. This must be an inexpensive operation, since it is done often throughout query planning. This method must not return null.- Specified by:
toDruidQueryin classDruidRel<DruidCorrelateUnnestRel>- Parameters:
finalizeAggregations- true if this query should include explicit finalization for all of its aggregators, where required. Useful for subqueries where Druid's native query layer does not do this automatically.
-
deriveRowType
protected org.apache.calcite.rel.type.RelDataType deriveRowType()- Overrides:
deriveRowTypein classorg.apache.calcite.rel.AbstractRelNode
-
toDruidQueryForExplaining
Description copied from class:DruidRelConvert this DruidRel to a DruidQuery for purposes of explaining. This must be an inexpensive operation. This method must not return null.- Specified by:
toDruidQueryForExplainingin classDruidRel<DruidCorrelateUnnestRel>
-
explainTerms
public org.apache.calcite.rel.RelWriter explainTerms(org.apache.calcite.rel.RelWriter pw) Description copied from class:DruidRelOverridden to ensure that subclasses provide a proper implementation. The default implementation fromAbstractRelNodedoes nothing and is not appropriate.- Overrides:
explainTermsin classDruidRel<DruidCorrelateUnnestRel>
-
asDruidConvention
Description copied from class:DruidRelReturns a copy of this rel with theDruidConventiontrait.- Specified by:
asDruidConventionin classDruidRel<DruidCorrelateUnnestRel>
-
getInputs
- Specified by:
getInputsin interfaceorg.apache.calcite.rel.RelNode- Specified by:
getInputsin interfaceorg.apache.calcite.plan.RelOptNode- Overrides:
getInputsin classorg.apache.calcite.rel.AbstractRelNode
-
copy
public org.apache.calcite.rel.RelNode copy(org.apache.calcite.plan.RelTraitSet traitSet, List<org.apache.calcite.rel.RelNode> inputs) - Specified by:
copyin interfaceorg.apache.calcite.rel.RelNode- Overrides:
copyin classorg.apache.calcite.rel.AbstractRelNode
-
computeSelfCost
public org.apache.calcite.plan.RelOptCost computeSelfCost(org.apache.calcite.plan.RelOptPlanner planner, org.apache.calcite.rel.metadata.RelMetadataQuery mq) - Specified by:
computeSelfCostin interfaceorg.apache.calcite.rel.RelNode- Overrides:
computeSelfCostin classorg.apache.calcite.rel.AbstractRelNode
-
getDataSourceNames
Description copied from class:DruidRelGet the set of names of table datasources read by this DruidRel- Specified by:
getDataSourceNamesin classDruidRel<DruidCorrelateUnnestRel>
-
computeLeftRequiresSubquery
Computes whether a particular left-side rel requires a subquery, or if we can operate on its underlying datasource directly.Stricter than
DruidJoinQueryRel.computeLeftRequiresSubquery(org.apache.druid.sql.calcite.planner.PlannerContext, org.apache.druid.sql.calcite.rel.DruidRel<?>, org.apache.calcite.rel.core.Join): this method only allows scans (not mappings). This is OK because any mapping or other simple projection would have been pulled above theCorrelatebyDruidCorrelateUnnestRule.
-