【问题标题】:How to get count of substring in hive如何获取 hive 中子字符串的计数
【发布时间】:2021-07-03 15:17:14
【问题描述】:

我在一列中有一个带分隔符的字符串:例如:

 REG:aaaaa|REG:bbbbb|REG:cccc|IMP:abcd|IMP:efghi

列的长度可能因某些不同的输入而异。我想要以下输出

length(REG) : 3
length(IMP) : 2

【问题讨论】:

    标签: sql hive hiveql amazon-athena presto


    【解决方案1】:

    应该是这样的:

    select 
        count(case when value like 'REG:%' then 1 end) REGcount
      , count(case when value like 'IMP:%' then 1 end) IMPcount
    from split('REG:aaaaa|REG:bbbbb|REG:cccc|IMP:abcd|IMP:efghi','[|]')
    

    对于模式搜索,我不确定“[|]”是否有效或“\\|”。所以让我们知道

    【讨论】:

      【解决方案2】:

      您可以通过'(^|\\|)REG:' 拆分字符串 - 此正则表达式表示字符串开头的'REG:''|REG:',然后取数组大小-1。

      Hive 演示:

      select size(split(str, '(^|\\|)REG:'))-1 as REG_cnt, 
             size(split(str, '(^|\\|)IMP:'))-1 as IMP_cnt
      from
      (--initial data
      select 'REG:aaaaa|REG:bbbbb|REG:cccc|IMP:abcd|IMP:efghi' as str
      )s
      

      结果:

      reg_cnt  imp_cnt
      3        2
      

      对于 Presto/Athena:

      select cardinality(regexp_split(str, '(^|\|)REG:'))-1 as REGcnt, 
             cardinality(regexp_split(str, '(^|\|)IMP:'))-1 as IMPcnt
      from
      (--initial data
      select 'REG:aaaaa|REG:bbbbb|REG:cccc|IMP:abcd|IMP:efghi' as str
      )s
      

      结果:

      reg_cnt  imp_cnt
      3        2
      

      使用这种方法你不需要分解数组和聚合计数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        相关资源
        最近更新 更多