hive中对查询条件where后面in和not in的支持程度

以前毫无疑问是不支持hive的where后面in后面加子查询,甚至更早的版本连in和not in都不支持,以前只能通过left join来实现,好在现在新版本支持啦,hive0.13之后支持in和not in加子查询啦!!!

测试环境:hive-0.14

需求:将mysql语句改写为hive语句,语句如下:

SELECT ',' ',v_dealyyyymm, ' ,T1.PROD_INST_ID
 FROM DD_PDT_OFFER_INST_M t1
 WHERE date_format(T1.exp_DATE,\'%Y%m\')>=',' ',v_lastyyyymm, '
 AND date_format(T1.eff_date,\'%Y%m\')<=',' ',v_lastyyyymm, '
 AND T1.DEAL_MON=',' ',v_lastyyyymm, '
 AND T1.prod_offer_id in (select prod_offer_id 
 from DD_PDT_OFFER_M 
 where deal_mon= ',' ',v_lastyyyymm, '
 and offer_type=12 
 and prod_offer_name like \'%流量%\') ');

如果原先不支持in的时候只能通过left join实现,写法如下:

SELECT '$v_dealyyyymm' ,t1.PROD_INST_ID
 FROM pods.DD_PDT_OFFER_INST_M t1
 left join (select prod_offer_id 
 from pods.DD_PDT_OFFER_M 
 where partition_date= '$v_lastyyyymm'
 and offer_type=12 
 and prod_offer_name like '%流量%') b
 on T1.prod_offer_id=b.prod_offer_id 
 WHERE from_unixtime(unix_timestamp(T1.exp_DATE,'yyyy-mm-dd'),'yyyyMM')>='$v_lastyyyymm'
 AND from_unixtime(unix_timestamp(T1.eff_date,'yyyy-mm-dd'),'yyyyMM')<='$v_lastyyyymm'
 AND T1.partition_date='$v_lastyyyymm'
 and b.prod_offer_id is not null
现在,hive-0.14已经支持可以直接用啦!!!
赶快去试试吧!!!

马洪飞

但尽人事,莫问前程...

相关推荐

1 条评论

  1. 代码很实用

发表评论

电子邮件地址不会被公开。 必填项已用*标注

微信扫一扫,分享到朋友圈

hive中对查询条件where后面in和not in的支持程度
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close