Hive rlike 不支持子查询,完美解决方案

 select * 
    FROM
  DMK_PP.DMK_PP_VEH_CNF_LST
 where sale_mate_desc 
 RLIKE  
( select concat_ws('|',collect_set(exclude_type)) 
   from         
  ods_apd.APD_PROPER_FEE_PRODUCT_EXCLUDE_TYPE
)

当我们用rlike 进行子查询的时候就会报如下错误,但mysql和oracle不会。

当我们把子查询换成字符串的是时候就能正常执行。如下图

 select 
* 
FROM 
DMK_PP.DMK_PP_VEH_CNF_LST 
where sale_mate_desc RLIKE '核算检测|医疗'

所以得到结论就是hive 不支持rlike 、like以及regex的子查询。

那我们要如何解决呢?

这时候我们可以用hive的另外一个函数 locate ,

用法:LOCATE(t1.SGTXT,t0.SGTXT) > 0 表示:t0.SGTXT包含t1.SGTXT

如果是=0 就表示两个字符串不存在包含关系。

那么我们就修改失去了为如下就可以正常执行:

select count(*) 
FROM 
DMK_PP.DMK_PP_VEH_CNF_LST a
left join 
ods_apd.APD_PROPER_FEE_PRODUCT_EXCLUDE_TYPE b
where  locate(b.exclude_type,a.sale_mate_desc)>0

执行效果图如下:完美解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值