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()等。

相关推荐
大数据CLUB7 小时前
基于spark的奥运会奖牌变化数据分析
大数据·hadoop·数据分析·spark
Edingbrugh.南空7 小时前
Hadoop高可用集群搭建
大数据·hadoop·分布式
无级程序员1 天前
hive2服务启动报错:/tmp/hive on HDFS should be writable(不是chmod 777能解决的)
hive·hadoop·hdfs
rui锐rui1 天前
大数据学习2:HIve
大数据·hive·学习
凌辰揽月1 天前
Servlet学习
hive·学习·servlet
weixin_307779132 天前
Hive集群之间迁移的Linux Shell脚本
大数据·linux·hive·bash·迁移学习
王小王-1232 天前
基于Hadoop的公共自行车数据分布式存储和计算平台的设计与实现
大数据·hive·hadoop·分布式·hadoop公共自行车·共享单车大数据分析·hadoop共享单车
王小王-1232 天前
基于Hadoop的大规模文本词频统计分析系统设计与实现
hadoop·mapreduce·hadoop词频统计·hadoop文本统计·mapreduce词频统计
陈敬雷-充电了么-CEO兼CTO2 天前
推荐算法系统系列>推荐数据仓库集市的ETL数据处理
大数据·数据库·数据仓库·数据挖掘·数据分析·etl·推荐算法
桂成林2 天前
Hive UDF 开发实战:MD5 哈希函数实现
hive·hadoop·哈希算法