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

  • A+
所属分类:大数据

以前毫无疑问是不支持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已经支持可以直接用啦!!!
赶快去试试吧!!!
  • QQ群二维码
  • 免费维皮恩账号赶紧来吧
  • weinxin
  • 微信公众号
  • 扫一扫关注"你不知道的iPhone技巧"
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

    • avatar 婚外恋调查 1

      代码很实用