Spark3.0为我们带来了许多令人期待的特性。Spark中的静态分区裁剪在介绍动态分区裁剪之前,有必要对Spark中的静态分区裁剪进行介绍。因此,在这种情况下,我们不能再应用静态分区裁剪,因为filter条件在join表的一侧,而对裁剪有用的表在Join的另一侧。Spark将这个查询转化为一种易于理解的形式,我们称它为查询的逻辑计划。物理计划阶段优化如果维度表很小,那么Spark很可能会以broadcasthashjoin的形式执行这个Join。
Spark 3.0 为我们带来了许多令人期待的特性。动态分区裁剪(dynamic partition pruning)就是其中之一。本文将通过图文的形式来带大家理解什么是动态分区裁剪。
Spark 中的静态分区裁剪
在介绍动态分区裁剪之前,有必要对 Spark 中的静态分区裁剪进行介绍。在标准数据库术语中,裁剪意味着优化器将避免读取不包含我们正在查找的数据的文件。例如我们有以下的查询 SQL:
| 1 |
|
在这个简单的查询中,我们试图匹配和识别 Students 表中 subject = English 的记录。比较愚蠢的做法是先把数据全部 scan 出来,然后再使用 subject = 'English' 去过滤。如下图所示:

本文介绍了 Spark 中的静态分区裁剪和动态分区裁剪。静态分区裁剪可减少数据扫描和磁盘 I/O。动态分区裁剪是 Spark 3.0 的特性,在逻辑计划和物理计划阶段有不同优化方式,还说明了其适用条件,如相关参数设置、表类型和 Join 类型等。
最低0.47元/天 解锁文章
2140

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



