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
执行效果图如下:完美解决。