一文了解 Apache Spark 3.0 动态分区裁剪(Dynamic Partition Pruning)
发布日期:2021-06-30 11:25:41
浏览次数:2
分类:技术文章
本文共 1750 字,大约阅读时间需要 5 分钟。
静态分区裁剪(Static Partition Pruning)
用过 Spark 的同学都知道, Spark SQL 在查询的时候支持分区裁剪,比如我们如果有以下的查询:
SELECT * FROM Sales_iteblog WHERE day_of_week = 'Mon'
Spark 会自动进行以下的优化:
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
从上图可以看到,Spark 在编译 SQL 的时候自动将 Filter 算子下推到数据源,也就是在 Scan 前进行了 Filter 操作,将 day_of_week = 'Mon' 的数据全部拿出来,其他数据不需要的拿出,这样 Spark SQL 中处理的数据就变少了,整个 SQL 的查询数据就会变快,这一切都是编译的时候(compile time)进行的,所以这个叫做静态分区裁剪(Static Partition Pruning)。
上面的 SQL 查询在 Spark 进行了算子下推,已经能够满足我们的查询性能的提升。 但是现实世界数据的查询可不会都这么简单,我们来看看下面的查询语句:
SELECT * FROM Sales JOIN Date WHERE Date.day_of_week = 'Mon'
比较差的查询引擎是这么做的:
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
从上图可以看出,查询引擎直接忽略了 Date.day_of_week = 'Mon' 这个过滤条件,上来就是两表 join,然后 join 的结果再进行过滤,这个可能导致很多无效的计算,如果 Date.day_of_week = 'Mon' 可以过滤掉大量的无用数据,肯定可以提升查询性能。在 Spark SQL 里面能够很好的处理这种情况,它会把 Date.day_of_week = 'Mon' 过滤条件下推到 Date 表的 Scan 之前进行:
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号: iteblog_hadoop
动态分区裁剪(Dynamic Partition Pruning)
上面 Spark SQL 进行的算子下推是不是不能再提升查询性能呢?有没有一种更好的方法进一步过滤掉一些无用的数据?这就是本文要介绍的动态分区裁剪。动态分区裁剪这个功能是 Spark 3.0 引入的,详见 SPARK-11150 、 SPARK-28888 。
什么是动态分区裁剪? 所谓的动态分区裁剪就是基于运行时(run time)推断出来的信息来进一步进行分区裁剪。 举个例子,我们有如下的查询:
SELECT * FROM dim_iteblog
JOIN fact_iteblog
ON (dim_iteblog.partcol = fact_iteblog.partcol)
WHERE dim_iteblog.othercol > 10
动态查询的执行计划如下:
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
从上面可以看出,拥有动态分区裁剪,Spark 能够在运行的时候先对 fact_iteblog 表的 partcol 进行了一次过滤,然后再和 dim_iteblog 表进行 Join,可想而知这个性能一般都会有提升的,特别是在 fact_iteblog 表有很多无用的数据时性能提升会非常大的。
Databricks 公司在10台配置为 i3.xlarge 的集群上进行 TPC-DS 测试,得到的结论是在 102 查询中相比 Spark 2.4 有 60 个查询的查询性能提升了 2 - 18 倍的提升。
在 Query 98 的查询中,性能提升了 100 倍!
新福利:
从11月01日开始至12月06日截止,一共五周时间,每周五我会从公众号底部留言+转发+在看综合最多的读者中抽取一名读者,免费包邮送实体新书《Flink入门与实战》,留言互动起来吧~
猜你喜欢
转载地址:https://iteblog.blog.csdn.net/article/details/102908685 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月16日 07时03分49秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
17.docker实战之安装ES
2019-04-30
18.docker实战之idea添加docker插件
2019-04-30
java 高效工具库
2019-04-30
19.docker之dockerCompose基础
2019-04-30
20.docker之DockerCompose基础进阶
2019-04-30
1.全局异常处理
2019-04-30
3.mysql 索引基础知识
2019-04-30
线程、事件与QObject
2019-04-30
树莓派4不连接显示器开机的方法
2019-04-30
[转]ffmpeg在vs2008中的使用
2019-04-30
[转]用"树莓派"打造一款智能音响(也许有点智障。。。)
2019-04-30
学习笔记(02):一学即懂的计算机视觉(第一季)-什么是视觉?
2019-04-30
学习笔记(03):一学即懂的计算机视觉(第一季)-第一个计算机视觉程序
2019-04-30
学习笔记(04):一学即懂的计算机视觉(第一季)-计算机视觉方向知识体系结构...
2019-04-30
学习笔记(05):一学即懂的计算机视觉(第一季)-学了视觉可以做什么
2019-04-30
学习笔记(06):一学即懂的计算机视觉(第一季)-有光即有世界:照明模型
2019-04-30
学习笔记(08):一学即懂的计算机视觉(第一季)-实战演练:颜色空间分解
2019-04-30
学习笔记(09):一学即懂的计算机视觉(第一季)-最浅显的卷积与滤波概念讲解!...
2019-04-30
学习笔记(10):一学即懂的计算机视觉(第一季)-图像平滑滤波与去噪
2019-04-30
学习笔记(11):一学即懂的计算机视觉(第一季)-数学形态学滤波
2019-04-30