Hive - 连接两个表以查找与参考表中的字符串类似的字符串

时间:2018-05-07 11:13:35

标签: hive

我偶然发现需要使用其他参考表中的关键字来屏蔽数据的情况,如下所示:

1enter image description here

表A包含数千个关键字,表B包含每天处理的1500万++行..

如何使用新列中的表A中的关键字替换表B中的数据?

我尝试使用join但是join只能在字符串完全相同时匹配

这是我的代码

select
sourcetype, hourx,minutex,t1.adn,hostname,t1.appsid,t1.taskid,
product_id,
location,
smsIncoming,
case 
when smsIncoming regexp keyword = true then keyword
else 'undef' end smsIncoming_replaced
from(
select ... from ...
)t1
left join
(select adn,keyword,type,mapping_param,mapping_param_json,appsid,taskid,is_api,charlentgh,wordcount,max(datex) 
from ( select adn,keyword,type,mapping_param,mapping_param_json,appsid,taskid,is_api,charlentgh,wordcount,datex ,last_update,
              max(last_update) over (partition by keyword) as last_modified 
       from sqm_stg.reflex_service_map ) as sub
where   last_update = last_modified 
group by adn,keyword,type,mapping_param,mapping_param_json,appsid,taskid,is_api,charlentgh,wordcount)t2
on t1.adn=t2.adn and t1.appsid=t2.appsid and t1.taskid=t2.taskid

需要建议:)

由于

1 个答案:

答案 0 :(得分:0)

使用instr(string str, string substr)函数:返回substr中第一次出现str的位置。如果任一参数为null,则返回null;如果在substr中找不到str,则返回0。请注意,这不是零基础。 str中的第一个字符具有索引1.

case 
    when instr(smsIncoming,keyword) >0  then keyword
    else 'undef' 
 end smsIncoming_replaced