如何获取配置单元中的子字符串计数

h9a6wy2h  于 2021-07-13  发布在  Hive
关注(0)|答案(2)|浏览(356)

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

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

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

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

c0vxltue1#

应该是这样的:

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','[|]')

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

vxqlmq5t

vxqlmq5t2#

你可以用 '(^|\\|)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

普雷斯托/雅典娜:

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

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

相关问题