object PartitionPruning extends Rule[LogicalPlan] with PredicateHelper with JoinSelectionHelper
Dynamic partition pruning optimization is performed based on the type and selectivity of the join operation. During query optimization, we insert a predicate on the filterable table using the filter from the other side of the join and a custom wrapper called DynamicPruning.
The basic mechanism for DPP inserts a duplicated subquery with the filter from the other side, when the following conditions are met: (1) the table to prune is filterable by the JOIN key (2) the join operation is one of the following types: INNER, LEFT SEMI, LEFT OUTER (partitioned on right), or RIGHT OUTER (partitioned on left)
In order to enable partition pruning directly in broadcasts, we use a custom DynamicPruning clause that incorporates the In clause with the subquery and the benefit estimation. During query planning, when the join type is known, we use the following mechanism: (1) if the join is a broadcast hash join, we replace the duplicated subquery with the reused results of the broadcast, (2) else if the estimated benefit of partition pruning outweighs the overhead of running the subquery query twice, we keep the duplicated subquery (3) otherwise, we drop the subquery.
- Alphabetic
- By Inheritance
- PartitionPruning
- JoinSelectionHelper
- PredicateHelper
- AliasHelper
- Rule
- Logging
- SQLConfHelper
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def apply(plan: LogicalPlan): LogicalPlan
- Definition Classes
- PartitionPruning → Rule
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def buildBalancedPredicate(expressions: Seq[Expression], op: (Expression, Expression) => Expression): Expression
- Attributes
- protected
- Definition Classes
- PredicateHelper
- def canBroadcastBySize(plan: LogicalPlan, conf: SQLConf): Boolean
- Definition Classes
- JoinSelectionHelper
- def canBuildBroadcastLeft(joinType: JoinType): Boolean
- Definition Classes
- JoinSelectionHelper
- def canBuildBroadcastRight(joinType: JoinType): Boolean
- Definition Classes
- JoinSelectionHelper
- def canBuildShuffledHashJoinLeft(joinType: JoinType): Boolean
- Definition Classes
- JoinSelectionHelper
- def canBuildShuffledHashJoinRight(joinType: JoinType): Boolean
- Definition Classes
- JoinSelectionHelper
- def canEvaluate(expr: Expression, plan: LogicalPlan): Boolean
- Attributes
- protected
- Definition Classes
- PredicateHelper
- def canEvaluateWithinJoin(expr: Expression): Boolean
- Attributes
- protected
- Definition Classes
- PredicateHelper
- def canPlanAsBroadcastHashJoin(join: Join, conf: SQLConf): Boolean
- Definition Classes
- JoinSelectionHelper
- def canPruneLeft(joinType: JoinType): Boolean
- Definition Classes
- JoinSelectionHelper
- def canPruneRight(joinType: JoinType): Boolean
- Definition Classes
- JoinSelectionHelper
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- def conf: SQLConf
- Definition Classes
- SQLConfHelper
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def extractPredicatesWithinOutputSet(condition: Expression, outputSet: AttributeSet): Option[Expression]
- Attributes
- protected
- Definition Classes
- PredicateHelper
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- def findExpressionAndTrackLineageDown(exp: Expression, plan: LogicalPlan): Option[(Expression, LogicalPlan)]
- Definition Classes
- PredicateHelper
- def getAliasMap(exprs: Seq[NamedExpression]): AttributeMap[Alias]
- Attributes
- protected
- Definition Classes
- AliasHelper
- def getAliasMap(plan: Aggregate): AttributeMap[Alias]
- Attributes
- protected
- Definition Classes
- AliasHelper
- def getAliasMap(plan: Project): AttributeMap[Alias]
- Attributes
- protected
- Definition Classes
- AliasHelper
- def getBroadcastBuildSide(left: LogicalPlan, right: LogicalPlan, joinType: JoinType, hint: JoinHint, hintOnly: Boolean, conf: SQLConf): Option[BuildSide]
- Definition Classes
- JoinSelectionHelper
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def getFilterableTableScan(a: Expression, plan: LogicalPlan): Option[LogicalPlan]
Searches for a table scan that can be filtered for a given column in a logical plan.
Searches for a table scan that can be filtered for a given column in a logical plan.
This methods tries to find either a v1 or Hive serde partitioned scan for a given partition column or a v2 scan that support runtime filtering on a given attribute.
- def getShuffleHashJoinBuildSide(left: LogicalPlan, right: LogicalPlan, joinType: JoinType, hint: JoinHint, hintOnly: Boolean, conf: SQLConf): Option[BuildSide]
- Definition Classes
- JoinSelectionHelper
- def getSmallerSide(left: LogicalPlan, right: LogicalPlan): BuildSide
- Definition Classes
- JoinSelectionHelper
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hintToBroadcastLeft(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToBroadcastRight(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToNotBroadcastLeft(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToNotBroadcastRight(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToPreferShuffleHashJoin(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToPreferShuffleHashJoinLeft(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToPreferShuffleHashJoinRight(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToShuffleHashJoin(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToShuffleHashJoinLeft(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToShuffleHashJoinRight(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToShuffleReplicateNL(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def hintToSortMergeJoin(hint: JoinHint): Boolean
- Definition Classes
- JoinSelectionHelper
- def initializeLogIfNecessary(isInterpreter: Boolean, silent: Boolean): Boolean
- Attributes
- protected
- Definition Classes
- Logging
- def initializeLogIfNecessary(isInterpreter: Boolean): Unit
- Attributes
- protected
- Definition Classes
- Logging
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def isLikelySelective(e: Expression): Boolean
- Definition Classes
- PredicateHelper
- def isNullIntolerant(expr: Expression): Boolean
- Attributes
- protected
- Definition Classes
- PredicateHelper
- def isTraceEnabled(): Boolean
- Attributes
- protected
- Definition Classes
- Logging
- def log: Logger
- Attributes
- protected
- Definition Classes
- Logging
- def logDebug(msg: => String, throwable: Throwable): Unit
- Attributes
- protected
- Definition Classes
- Logging
- def logDebug(msg: => String): Unit
- Attributes
- protected
- Definition Classes
- Logging
- def logError(msg: => String, throwable: Throwable): Unit
- Attributes
- protected
- Definition Classes
- Logging
- def logError(msg: => String): Unit
- Attributes
- protected
- Definition Classes
- Logging
- def logInfo(msg: => String, throwable: Throwable): Unit
- Attributes
- protected
- Definition Classes
- Logging
- def logInfo(msg: => String): Unit
- Attributes
- protected
- Definition Classes
- Logging
- def logName: String
- Attributes
- protected
- Definition Classes
- Logging
- def logTrace(msg: => String, throwable: Throwable): Unit
- Attributes
- protected
- Definition Classes
- Logging
- def logTrace(msg: => String): Unit
- Attributes
- protected
- Definition Classes
- Logging
- def logWarning(msg: => String, throwable: Throwable): Unit
- Attributes
- protected
- Definition Classes
- Logging
- def logWarning(msg: => String): Unit
- Attributes
- protected
- Definition Classes
- Logging
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- def outputWithNullability(output: Seq[Attribute], nonNullAttrExprIds: Seq[ExprId]): Seq[Attribute]
- Attributes
- protected
- Definition Classes
- PredicateHelper
- def replaceAlias(expr: Expression, aliasMap: AttributeMap[Alias]): Expression
- Attributes
- protected
- Definition Classes
- AliasHelper
- def replaceAliasButKeepName(expr: NamedExpression, aliasMap: AttributeMap[Alias]): NamedExpression
- Attributes
- protected
- Definition Classes
- AliasHelper
- lazy val ruleId: RuleId
- Attributes
- protected
- Definition Classes
- Rule
- val ruleName: String
- Definition Classes
- Rule
- def splitConjunctivePredicates(condition: Expression): Seq[Expression]
- Attributes
- protected
- Definition Classes
- PredicateHelper
- def splitDisjunctivePredicates(condition: Expression): Seq[Expression]
- Attributes
- protected
- Definition Classes
- PredicateHelper
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- def trimAliases(e: Expression): Expression
- Attributes
- protected
- Definition Classes
- AliasHelper
- def trimNonTopLevelAliases[T <: Expression](e: T): T
- Attributes
- protected
- Definition Classes
- AliasHelper
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()