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的用法实战的主要内容,如果未能解决你的问题,请参考以下文章

Hive内置运算符

SQL的模糊匹配区别---like,rlike,regexpx

HiveQL

关于Hive正则匹配中文字符串的问题

正则表达式之实战--计算器

Flink SQL实战演练之Kafka To Hive