首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >五分钟系列 | Spark3.0新特性之动态分区裁剪

五分钟系列 | Spark3.0新特性之动态分区裁剪

作者头像
大数据真好玩
发布2020-07-02 15:17:55
发布2020-07-02 15:17:55
1.2K0
举报
文章被收录于专栏:暴走大数据暴走大数据

Apache Spark 3.0.0 终于赶在下周二举办的 Spark Summit AI 会议之前正式发布了! Apache Spark 3.0.0 自2018年10月02日开发到目前已经经历了近21个月。

其中有几个重要的特性:

  • 动态分区修剪
  • 自适应查询执行
  • 加速器感知调度

...

今天讲的是这个动态分区修剪。

静态分区裁剪

代码语言:javascript
复制
select * from table_test where name='foo';

Spark会自动进行以下优化,先 filter再scan:

这样优化后,Spark SQL处理的数据量大大减少。但是这一切都是在编译的时候进行的,所以叫做静态分区裁剪。

这也是传统数据库中所说的谓词下推

动态分区裁剪

假如说我们有一个这样的SQL:

代码语言:javascript
复制
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。

当然触发动态裁剪是需要一些条件的:

  • 待剪枝的表再join条件中存在分区字段,没有分区字段肯定是剪不了枝的
  • 如果是join左边表剪枝,那么join类型必须是inner join,left semi join 或者 right join。右边剪枝则类似。这很好理解,剪枝左边表是用右边表产出的分区字段作为过滤条件。那么如果是left outer join,无论右边有没有这个分区,左边的值总是存在。因此不需要被剪枝。
  • 另一张表需要存在至少一个过滤条件,比如 a join b on a.id = b.id where b.day=1

欢迎点赞+收藏

欢迎转发至朋友圈

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据真好玩 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档