HiveQL для группировки по подстроке значения столбца и определения отсутствующих групп - PullRequest
1 голос
/ 18 октября 2019

У меня есть таблица улья, в которой есть столбец с именем DATALIST. Он может иметь значения ниже

XYZ_EF1_GHD_OLDDAT
XYZ_EF1_GHD_NEWFORMAT
ABC_FG1_JJJ_ASD_OLDDAT
TTT_LMN_IJK_YHVS_TXY_OLDDAT
TTT_LMN_IJK_YHVS_TXY_NEWFORMAT
PQR_GHSS_TYHT_NEWFORMAT

Мне нужно создать вывод, который бы идентифицировал все имена, которые не имеют в столбце _NEWFORMAT и _OLDDAT. В этих сценариях он должен вывести следующее

Value                          Reason
ABC_FG1_JJJ_ASD               Missing NEW
PQR_GHSS_TYHT                 Missing OLD
XYZ_EF1_GHD                   Contains Both NEW and OLD
TTT_LMN_IJK_YHVS_TXY          Contains both NEW and OLD

Буду очень признателен за любые предложения / помощь по логике SQL / HIVEQL.

1 Ответ

1 голос
/ 18 октября 2019

В подзапросе вы можете использовать функции регулярного выражения regexp_replace() и regexp_extract() для отделения значения от суффикса. Затем вы можете агрегировать и применять логику во внешнем запросе:

select 
    value,
    case 
        when min(suffix) = '_NEWFORMAT' and max(suffix) = '_OLDDAT' 
            then 'Contains both NEW and OLD'
        when max(suffix) = '_NEWFORMAT'
            then 'Missing OLD'
        else 'Missing NEW'
    end reason
from (
    select 
        regexp_replace(datalist, '_OLDDAT|_NEWFORMAT$', '') value,
        regexp_extract(datalist, '(_OLDDAT|_NEWFORMAT)$', 1) suffix
    from mytable
) x
group by value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...