| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Hive 中的join和谓词下推 -> 正文阅读 |
|
[大数据]Hive 中的join和谓词下推 |
1、谓词下推????????总所周知,hive在执行过程中,会有很多自动优化。其中很重要的一个就是谓词下推。至于什么是谓词下推? ????????网上找了个段相对官方的解释:将过滤表达式尽可能移动至靠近数据源的位置,以使真正执行时能直接跳过无关的数据。换言之就是说,在合适的场景下,优先执行过滤条件。 2、hive中的谓词下推????????在hive生成物理执行计划中,有一个配置项用于管理谓词下推优化是否开启。
????????但如果hive谓词下推的功能与join同时存在,都能在哪些场景下生效?结论见文末。 3、谓词下推场景分析(1)准备数据? ? ? ? 准备两张表,数据如下。 (2)查看谓词下退是否开启(3) inner join????????对左表where过滤
????????查看执行计划,在对a表进行scan是优先进行filter,过滤col_b > 333。可见谓词下推生效。 ?????????对右表where过滤
????????查看执行计划,在对b表进行scan是优先进行filter,过滤col_c > 333。可见谓词下推生效。 ????????对左表on过滤
????????查看执行计划,在对a表进行scan是优先进行filter,过滤col_b > 333。可见谓词下推生效。 ?????????对右表on过滤
????????查看执行计划,在对b表进行scan是优先进行filter,过滤col_c > 333。可见谓词下推生效。 (4)left join(right join 同理)????????对左表where过滤
????????查看执行计划,在对a表进行scan是优先进行filter,过滤col_b > 333。可见谓词下推生效。 ????????对右表where过滤
????????查看执行计划,在对b表进行scan是未进行filter。可见谓词下推不生效。 ????????对左表on过滤
????????查看执行计划,在对a表进行scan是未进行filter。可见谓词下推不生效。 ????????对右表on过滤
?????????查看执行计划,在对b表进行scan是优先进行filter,过滤col_c > 333。可见谓词下推生效。 ? (5)full join????????对左表where过滤
????????查看执行计划,在对表进行scan是未进行filter。可见谓词下推不生效。 ????????对右表where过滤
????????查看执行计划,在对b表进行scan是未进行filter。可见谓词下推不生效。 ????????对左表on过滤
????????查看执行计划,在对表进行scan是未进行filter。可见谓词下推不生效。 ????????对右表on过滤
????????查看执行计划,在对b表进行scan是未进行filter。可见谓词下推不生效。 4、left join场景下的两种写法对比?????????sql1:
? ? ? ? ?sql2:
????????目前已知第一种写法不会触发谓词下推,那么我采用第二种写法,手动进行谓词下退会怎样。 ????????由两者结果可见,手动谓词下推和第一种写法的结果完全不一样。可见,两者的区别不单单是性能的问题,而是两者的执行流程、产生结果也完全不同。因此奉劝小伙伴遇到此场景下还是不要偷懒为好。 5、总结????????综上所述,简单总结了hive中谓词下推的各种场景下的生效情况。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/22 6:13:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |