今天继续实验 AQE 的特性, 看看动态切换 Join 策略
的实例.
运行
items 和 sales 表数据继续用前一篇博客创建的, 开启AQE, 并提交以下查询:
set spark.sql.adaptive.enabled = true; |
结果
从 Spark UI 上可以看到 Initial Plan 如下 , items 过滤 i_price < 10 后数据是很小的,
但是 static plan 并不知道, 使用的是 SortMergeJoin, 其实可以使用 broadcast join 替代.
+- == Initial Plan == |
不过开启 AQE 之后, 动态优化后的物理计划如下, 使用 BroadcastHashJoin
替代了.
== Physical Plan == |
BroadcastHashJoin
如下图, 左侧是 sales, 右侧是 items,
右侧 BroadcastExchange
中 data size total
只有 6.9 MB:
备注(动态计划) :
(1) Scan parquet spark_catalog.hive_niko_test.sales |
备注(静态计划) :
(26) Filter |
参考
https://docs.databricks.com/en/_extras/notebooks/source/aqe-demo.html