hiveql按列值的子字符串分组并标识缺少的组

3ks5zfa0  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(342)

我有一个配置单元表,它有一个名为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

我需要创建一个输出,该输出将标识列中不同时具有\u newformat和\u 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逻辑的建议/帮助都将不胜感激。

ymdaylpp

ymdaylpp1#

在子查询中,可以使用regexp函数 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

相关问题