如何在Hive中统计正则表达式匹配次数且不使用lateral view与explode
Hive正则匹配次数统计无拆分方案
核心思路
- 无需拆分字符串、无需使用lateral view和explode,直接通过长度差计算匹配次数,性能消耗极低
- 利用
regexp_replace删除所有匹配项,计算原字符串和替换后字符串的长度差,除以单条匹配内容的固定长度,即可得到匹配次数
实现代码
匹配次数计算逻辑
你使用的正则\w\w\d单条匹配结果固定为3个字符,对应计算逻辑如下(Hive中反斜杠需要转义,所以写为\\w\\w\\d):
-- 计算匹配次数 (length(stringvar) - length(regexp_replace(stringvar, '\\w\\w\\d', ''))) / 3 AS match_count
带过滤的完整查询示例
比如要筛选匹配次数大于等于2的记录:
SELECT stringvar, (length(stringvar) - length(regexp_replace(stringvar, '\\w\\w\\d', ''))) / 3 AS match_count FROM your_table -- 过滤条件直接复用计算逻辑即可 WHERE (length(stringvar) - length(regexp_replace(stringvar, '\\w\\w\\d', ''))) / 3 >= 2
效果验证
对应你给出的示例数据:
- 字符串
AA1,BB3,CD4:替换后剩余内容为,,,长度差为9,9/3=3,匹配次数正确 - 字符串
AA12,XJ5:替换后剩余内容为2,,长度差为6,6/3=2,匹配次数正确
内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ
相关产品推荐
相关产品推荐

