码迷,mamicode.com
首页 > 其他好文 > 详细

hive用left semi join替代in子查询的方式

时间:2014-12-01 19:20:05      阅读:535      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   os   sp   on   2014   

执行如下hive sql:

select * from trackinfo 
where ds=$date and session_id in (select session_id from rcmd_track_path where ds=$date and add_cart_flag>0 and product_id>0);</span>

提示报错如下:

FAILED: ParseException line 2:39 cannot recognize input near 'select' 'session_id' 'from' in expression specification

原因分析 & 解决方案 如下:

hive不支持in 子查询的用法,可以考虑用left semi join的方式来替换in,对上面的hive sql改写如下:

select * 
from trackinfo t1 
left semi join rcmd_track_path t2 
on (t1.session_id=t2.session_id and t2.add_cart_flag>0 and t2.product_id>0 and t1.ds=$date and t2.ds=$date);

left semi join用法参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

hive用left semi join替代in子查询的方式

标签:style   blog   http   io   ar   os   sp   on   2014   

原文地址:http://blog.csdn.net/yeweiouyang/article/details/41645315

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