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
- All
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( ... ) @native()
-
def
conf: SQLConf
- Definition Classes
- SQLConfHelper
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): 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[_]
- 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( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()