背景
本文基于delta 0.7.0
spark 3.0.1
spark 3.x引入了动态分区裁剪,在 spark 的动态分区裁剪上(Dynamic partition pruning)-逻辑计划我们提到在逻辑计划阶段会加入DynamicPruningSubquery,今天我们分析一下在物理阶段怎么对DynamicPruningSubquery进行优化以及实现的
分析
直接转到PlanDynamicPruningFilters的apply方法:
override def apply(plan: SparkPlan): SparkPlan = {
if (!SQLConf.get.dynamicPartitionPruningEnabled) {
return plan
}
plan transformAllExpressions {
case DynamicPruningSubquery(
value, buildPlan, buildKeys, broadcastKeyIndex, onlyInBroadcast, exprId) =>
val sparkPlan = QueryExecution.createSparkPlan(
sparkSession, sparkSession.sessionState.planner, buildPlan)
// Using `sparkPlan` is a

本文基于 delta 0.7.0 和 spark 3.0.1,分析 spark 3.x 动态分区裁剪在物理阶段对 DynamicPruningSubquery 的优化及实现。介绍了 PlanDynamicPruningFilters 的 apply 方法,包括开启动态分区裁剪的条件、物理计划的构造、不同 join 类型的处理等,完成了动态裁剪物理计划优化的分析。
最低0.47元/天 解锁文章
808

被折叠的 条评论
为什么被折叠?



