如何获取 hive 中子字符串的计数
Posted
技术标签:
【中文标题】如何获取 hive 中子字符串的计数【英文标题】:How to get count of substring in hive 【发布时间】:2021-07-03 15:17:14 【问题描述】:我在一列中有一个带分隔符的字符串:例如:
REG:aaaaa|REG:bbbbb|REG:cccc|IMP:abcd|IMP:efghi
列的长度可能因某些不同的输入而异。我想要以下输出
length(REG) : 3
length(IMP) : 2
【问题讨论】:
【参考方案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
使用这种方法你不需要分解数组和聚合计数。
【讨论】:
以上是关于如何获取 hive 中子字符串的计数的主要内容,如果未能解决你的问题,请参考以下文章
如何在字符串中查找子字符串,其中子字符串位于 Access Query 的单独表中?