СЛУЧАЙ КОГДА - НРАВИТСЯ - REGEXP в Hadoop Hive - PullRequest
1 голос
/ 18 апреля 2019

Я хочу написать запрос в таблицу улья, используя CASE WHEN, LIKE и регулярное выражение.Я использовал regexp и rlike, но я не получаю желаемых результатов.Мои попытки пока следующие:

    select distinct ending from
(select date, ending, name, count(distinct id) 
from (select CONCAT_WS("/",year,month,day,hour) as date, id, name,
case when type = 'TRAN' then 'tran'
when events regexp '%[:]no_reply[:]%[^o][^n][:]incomplete[:]%' and type rlike '%HUP' then 'con'
when events not regexp '%[:]no_reply[:]%[^o][^n][:]incomplete[:]%' and type rlike '%HUP'  then 'aban'
else 'other'
end as ending
from data_struct1) tmp
group by date, ending, name) tmp2;

, а также

select distinct ending from
    (select date, ending, name, count(distinct id) 
    from (select CONCAT_WS("/",year,month,day,hour) as date, id, name,
    case when type = 'TRAN' then 'tran'
    when events rlike '%[:]no_reply[:]%[^o][^n][:]incomplete[:]%' and type rlike '%HUP' then 'con'
    when events not rlike '%[:]no_reply[:]%[^o][^n][:]incomplete[:]%' and type rlike '%HUP'  then 'aban'
    else 'other'
    end as ending
    from data_struct1) tmp
    group by date, ending, name) tmp2;

Оба запроса возвращают неверные результаты (неплохой синтаксис, просто неправильные результаты).

1 Ответ

1 голос
/ 19 апреля 2019

Существует много документов по квантификаторам регулярных выражений, например, это: https://docs.microsoft.com/en-us/dotnet/standard/base-types/quantifiers-in-regular-expressions

select 'opencase_2,initial_state:inquiry,inquiry:no_reply:initial_state:incomplete::,inquiry:reask:secondary_state:complete::' regexp 'no_reply:[^:]+:incomplete';

OK
true

Также это неправильно: rlike '%HUP'.Это должно быть похоже на '.*HUP$' (в конце строки) или просто на 'HUP', если не имеет значения, где находится HUP: в середине или в конце, или в начале строки

rlike и regexp в вашем запросе работают одинаково, лучше использовать один и тот же оператор: только регулярное выражение или rlike.Эти два синонима.

Тест: https://regex101.com/r/ksG67v/1

...