СЛУЧАЙ, КОГДА - НРАВИТСЯ - REGEXP в Hadoop Hive

Я хочу написать запрос в таблице кустов, используя 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;

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


person user37143    schedule 18.04.2019    source источник
comment
что вы пытаетесь сделать, пожалуйста, опишите, регулярное выражение определенно неверно. Что должен делать этот '%[:]no_reply[:]%[^o][^n][:]incomplete[:]%'?   -  person leftjoin    schedule 18.04.2019
comment
регулярное выражение следующее: '\:no_reply\:[^:]*\:incomplete\:\:'   -  person user37143    schedule 19.04.2019
comment
Просто скажите, что он должен делать. Ваше регулярное выражение снова кажется неправильным. Вы не обращаете внимания на косую черту перед :, но я не уверен, что на самом деле должно делать регулярное выражение. Приведите пример строки, если возможно   -  person leftjoin    schedule 19.04.2019
comment
В этой строке: opencase_2,initial_state:inquiry,inquiry:no_reply:initial_state:incomplete::,inquiry:reask:secondary_state:complete:: Мне нужно проверить, есть ли у меня следующая подстрока: no_reply:initial_state:incomplete, однако строка в середине initial_state может варьироваться между множеством значений (300 разных, то есть я не могу написать исчерпывающие условия if).   -  person user37143    schedule 19.04.2019


Ответы (1)


Существует множество документов по квантификаторам регулярных выражений, например этот: 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 в вашем запросе работают одинаково, лучше используйте один и тот же оператор: только regexp или rlike. Эти два слова являются синонимами.

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

person leftjoin    schedule 19.04.2019