【发布时间】:2019-09-17 11:41:53
【问题描述】:
当在 Hive 中执行连接,然后使用 where 子句过滤输出时,Hive 编译器将尝试在连接表之前过滤数据。这称为谓词下推 (http://allabouthadoop.net/what-is-predicate-pushdown-in-hive/)
例如:
SELECT * FROM a JOIN b ON a.some_id=b.some_other_id WHERE a.some_name=6
如果启用了下推谓词 (hive.optimize.ppd),则表 a 中 some_name = 6 的行将在执行连接之前被过滤。
不过,我最近也了解到,在将一个表与另一个表连接之前,还有另一种过滤数据的方法(https://vinaynotes.wordpress.com/2015/10/01/hive-tips-joins-occur-before-where-clause/)。
可以在ON子句中提供条件,在join之前会过滤表a
例如:
SELECT * FROM a JOIN b ON a.some_id=b.some_other_id AND a.some_name=6
这两个都提供谓词下推优化吗?
谢谢
【问题讨论】:
标签: join hive left-join hiveql on-clause