Hive - объединение двух таблиц, чтобы найти строку, которая похожа на строку в справочной таблице - PullRequest
0 голосов
/ 07 мая 2018

Я наткнулся на случай, когда требуется замаскировать данные, используя ключевое слово из другой справочной таблицы, показанной ниже:

1 : enter image description here

Таблица A содержит тысячи ключевых слов, а таблица B содержит 15 миллионов ++ строк для обработки каждого дня.

Как заменить данные в таблице B, используя ключевое слово в таблице A в новом столбце?

Я пытался использовать объединение, но объединение может совпадать только тогда, когда строка совпадает

Вот мой код

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 голосов
/ 07 мая 2018

Использование функции instr(string str, string substr): Возвращает позицию первого вхождения substr в str. Возвращает ноль, если один из аргументов равен нулю, и возвращает 0, если substr не удалось найти в str. Знайте, что это не основано на нуле. Первый символ в str имеет индекс 1.

case 
    when instr(smsIncoming,keyword) >0  then keyword
    else 'undef' 
 end smsIncoming_replaced
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...