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

相关推荐
梦里不知身是客112 小时前
hive中metastore 服务的意义
数据仓库·hive·hadoop
计算机毕业编程指导师2 小时前
【Python大数据选题】基于Spark+Django的电影评分人气数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·django·电影评分人气
梦里不知身是客113 小时前
hiveserver2服务的作用和启动
hive
梦里不知身是客115 小时前
hive让分区关联数据的三种方式
数据仓库·hive·hadoop
咨询QQ8762239655 小时前
从 Lumerical 和 COMSOL 中提取光栅反射相位
hive
jumu2021 天前
三菱FX5U与3台三菱E700变频器通讯实战
数据仓库
写代码的【黑咖啡】1 天前
数据仓库中保障数据质量的关键环节:任务发布后数据校验
数据仓库
m0_740043731 天前
Spring_全面详解入门
数据仓库·hive·hadoop
皓空揽月1 天前
windows安装hadoop2.7.2教程(单机版)
hadoop·windows
淡定一生23331 天前
数据仓库基本概念
大数据·数据仓库·spark