【问题标题】:HiveQL to Group by a substring of a column value and identify missing groupsHiveQL 按列值的子字符串分组并识别缺失的组
【发布时间】:2019-10-18 20:37:43
【问题描述】:

我有一个配置单元表,其中有一个名为 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 逻辑的建议/帮助。

【问题讨论】:

    标签: mysql hive hiveql


    【解决方案1】:

    在子查询中,您可以使用regexp functions regexp_replace() and 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
    

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 2014-01-05
      • 1970-01-01
      • 2020-01-15
      • 2020-08-14
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      相关资源
      最近更新 更多