码迷,mamicode.com
首页 > 数据库 > 详细

sql中的exist in在hive中的用法

时间:2014-07-22 08:07:35      阅读:1966      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   strong   re   c   

Hive不支持where子句中的子查询,SQL常用的exist in子句需要改写。

 

这一改写相对简单。考虑以下SQL查询语句: 

SELECT a.key, a.value FROM a WHERE a.key in (SELECT b.key FROM B);

改写成:

SELECT a.key, a.value FROM a LEFT OUTER JOIN b ON (a.key = b.key) WHERE b.key <> NULL;

解释:先做左连接,结果形如:

aaa  111

bbb  222

ccc   null

ddd  null

然后再过滤掉key为null的,剩下的就是表a的key在表b中存在的。

 

一个更高效的实现是利用left semi join改写为:

SELECT a.key, a.val FROM a LEFT SEMI JOIN b on (a.key = b.key);

限制条件:JOIN 子句中右边的表只能在 ON 子句中设置过滤条件,在 WHERE 子句、SELECT 子句或其他地方过滤都不行。

sql中的exist in在hive中的用法,布布扣,bubuko.com

sql中的exist in在hive中的用法

标签:style   blog   color   strong   re   c   

原文地址:http://www.cnblogs.com/luogankun/p/3857543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!