Apache Spark 3.0.0 终于赶在下周二举办的 Spark Summit AI 会议之前正式发布了! Apache Spark 3.0.0 自2018年10月02日开发到目前已经经历了近21个月。
其中有几个重要的特性:
...
今天讲的是这个动态分区修剪。
静态分区裁剪
select * from table_test where name='foo';Spark会自动进行以下优化,先 filter再scan:

这样优化后,Spark SQL处理的数据量大大减少。但是这一切都是在编译的时候进行的,所以叫做静态分区裁剪。
这也是传统数据库中所说的谓词下推。
动态分区裁剪
假如说我们有一个这样的SQL:
select table1.c1 from table1 join table2
on table1.c1 = table2.c1
where table2.c2 = 1;如果不做任何优化,执行过程便是:table1和table2全表进行一次join,然后在过滤table2.c2=1。
优化后的执行过程:table2先进行一次过滤table2.c2=1,然后在和table1进行join。
当然触发动态裁剪是需要一些条件的:
欢迎点赞+收藏
欢迎转发至朋友圈