Hive中正则rlike的用法实战
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive中正则rlike的用法实战相关的知识,希望对你有一定的参考价值。
参考技术A 项目需求:判断标签值是否符合某一正则规律,不符合则筛选出来例如:标签值为:文字类型,需要用文字正则去匹配;手机号类型:正则去匹配;自定义类型:根据实际情况去匹配;
rlike(a.tag_value,a.check_rule)=false;
注意:a.check_rule应该是正则表达式,而不是字段名。但想从hive表中字段的值中去获取的正则表达式,则需要注意什么地方呢?从字段值中获取正则表达式,可以更灵活的校验不同的标签值。
java的正则在hive也可使用,只是需要转义,因此,这里有特别需要注意的细节,就是特殊字符转义加单斜线还是双斜线,全网没人说明白这个问题,而且rlike正则写错,hive也不报错,经实践得出如下结论:
1.a.check_rule这里直接用字符串写死,则用双斜线转义;
2.a.check_rule这里的正则如果是从hive表中获取,则用单斜杠转义;hive在翻译sql表达式时,可明确看出:hive表中的单斜杠转义,会被自动转化为双斜杠进行匹配,也就是说hive表中单斜杠转义提取的时候变成双斜杠,大家注意下。
hive函数REGEXP_REPLACE用法
用正则替换字符,示例代码:
SELECT aa
,REGEXP_REPLACE(aa, '[a-z]', '') -- 替换所有字母
,REGEXP_REPLACE(aa, '[abc]', '') -- 替换指定字母
,REGEXP_REPLACE(aa, '[^abc]', '') -- 替换所有非字母
,REGEXP_REPLACE(aa, '[0-9]', '') -- 替换所有数字
,REGEXP_REPLACE(aa, '[\\s\\S]', '') -- 替换空白符、换行,\\s:是匹配所有空白符,包括换行,\\S:非空白符,不包括换行。
,REGEXP_REPLACE(aa, '\\w', '') -- 替换所有字母、数字、下划线。等价于 [A-Za-z0-9_]
,REGEXP_REPLACE(aa, '[-8+]', '') -- 只替换-8这个字符
,REGEXP_REPLACE(aa, '[-8*]', '') -- 替换-8、-、8这几个字符
FROM (
SELECT '5e40b2b8-0916-42c0-899a-eaf4b2df 5268' AS aa
UNION ALL
SELECT 'c81b5906-38d7-482c-8b66-be5d3359cbf6' AS aa
UNION ALL
SELECT '8856fd0a-2337-4605-963f-0d0d059b1937' AS aa
) t
;
以上是关于Hive中正则rlike的用法实战的主要内容,如果未能解决你的问题,请参考以下文章