HIVE:谓词下推

谓词

指返回bool值即true和false的函数,或是隐式转换为bool的函数:

如SQL中的谓词主要有 LKIE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS

谓词下推 Predicate Pushdown(PPD):

谓词下推 Predicate Pushdown(PPD),简而言之,就是在不影响结果的情况下,尽量将过滤条件提前执行。谓词下推后,过滤条件在map端执行,减少了map端的输出,降低了数据在集群上传输的量,节约了集群的资源,也提升了任务的性能。

谓词下推的基本思想 :将过滤表达式尽可能移动至靠近数据源的位置,以使真正执行时能直接跳过无关的数据。

下面是join条件中的四个常见的概念:

  1. 保留行表:在外关联语句中返回所有行的表. 比如a left (outer) join b 中的 a 表; a right (outer) join b 中的 b 表; a full outer join b a 和 b 表都是 保留表。
  2. NULL补充表:外关联语句中用null值来填充没有匹配行的表. 比如a left (outer) join b 中的 b 表; a right (outer) join b 中的 a 表,a full outer join b a 和 b 表都是 null值保留表
  3. Join中谓词:在Join on条件中的谓词.
  4. Join后谓词:在Where条件中的谓词.

谓词下推法则

第一条法则: join条件过滤不能下推到保留行表中。

比如以下选择,left join中左表s1为保留行表,所以on条件(join过滤条件)不能下推到s1中

select s1.key, s2.key from src s1 left join src s2 on s1.key > '2';

而s2表不是保留行,所以s2.key>2条件可以下推到s2表中:

select s1.key, s2.key from src s1 left join src s2 on s2.key > '2';

第二条法则:where条件过滤不能下推到NULL补充表。

比如以下选择left join的右表s2为NULL补充表所以,s1.key>2 where条件可以下推到s1:

select s1.key, s2.key from src s1 left join src s2 where s1.key > '2';

而以下选择由于s2为NULL补充表所以s2.key>2过滤条件不能下推

select s1.key, s2.key from src s1 left join src s2 where s2.key > '2';

注意:如果在表达式中含有不确定函数,整个表达式的谓词将不会被pushed

例如

select a.*

from a join b on a.id = b.id

where a.ds = '2019-10-09' and a.create_time = unix_timestamp();

因为unix_timestamp是不确定函数,在编译的时候无法得知,所以,整个表达式不会被pushed,即ds='2019-10-09'也不会被提前过滤。类似的不确定函数还有rand()等。

相关推荐
ApacheSeaTunnel12 小时前
新兴数据湖仓手册·从分层架构到数据湖仓架构(2025):数据仓库分层的概念与设计
大数据·数据仓库·开源·数据湖·dataops·白鲸开源·底层技术
洛克大航海13 小时前
Ubuntu中使用Hadoop的HDFS和MapReduce
hadoop·ubuntu·hdfs·mapreduce
夫唯不争,故无尤也20 小时前
Maven创建Java项目实战全流程
java·数据仓库·hive·hadoop·maven
想ai抽20 小时前
深入starrocks-怎样实现多列联合统计信息
java·数据库·数据仓库
还是大剑师兰特21 小时前
Hadoop面试题及详细答案 110题 (71-85)-- 集群部署与运维
大数据·hadoop·大剑师·hadoop面试题
派可数据BI可视化21 小时前
商业智能BI与业务结构分析
大数据·数据仓库·信息可视化·数据分析·商业智能bi
_清浅1 天前
大数据平台基础(Hadoop大数据原理与应用)
大数据·hadoop·分布式
The Sheep 20231 天前
WPF自定义路由事件
大数据·hadoop·wpf
还是大剑师兰特2 天前
Hadoop面试题及详细答案 110题 (86-95)-- Hadoop生态系统工具
hadoop·大剑师·hadoop面试题
yumgpkpm2 天前
CMP (类Cloudera) CDP7.3(400次编译)在华为鲲鹏Aarch64(ARM)信创环境中的性能测试过程及命令
大数据·hive·hadoop·python·elasticsearch·spark·cloudera