但尽人事
莫问前程...

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已经支持可以直接用啦!!!
赶快去试试吧!!!
赞(0) 打赏
未经允许不得转载:马洪飞博客 » hive中对查询条件where后面in和not in的支持程度
分享到: 更多 (0)

相关推荐

  • 暂无文章

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    代码很实用

    婚外恋调查1年前 (2017-11-06)回复

但尽人事,莫问前程

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏