美文网首页
Hive碎碎念(8):正则

Hive碎碎念(8):正则

作者: xxlee | 来源:发表于2020-07-15 14:47 被阅读0次

    转载请在文章起始处注明出处,谢谢。


    一、Hive常用的正则函数:

    1、LIKE比较: LIKE

    语法: A LIKE B
    操作类型: strings
    描述: 如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合表达式B 的正则语法,则为TRUE;否则为FALSE。B中字符”_”表示任意单个字符,而字符”%”表示任意数量的字符。
    举例:
    hive> select 1 from lxw_dual where 'football' like 'foot%';
    1
    hive> select 1 from lxw_dual where 'football' like 'foot____';
    1
    注意:否定比较时候用NOT A LIKE B
    hive> select 1 from lxw_dual where NOT 'football' like 'fff%';
    1

    2、JAVA的LIKE操作: RLIKE

    语法: A RLIKE B
    操作类型: strings
    描述: 如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合JAVA正则表达式B的正则语法,则为TRUE;否则为FALSE。
    举例:
    hive> select 1 from lxw_dual where 'footbar’ rlike '^f.*r’; 1 注意:判断一个字符串是否全为数字: hive>select 1 from lxw_dual where '123456' rlike '^\\d+';
    1
    hive> select 1 from lxw_dual where '123456aa' rlike '^\d+$';

    3、REGEXP操作: REGEXP

    语法: A REGEXP B
    操作类型: strings
    描述: 功能与RLIKE相同
    举例:
    hive> select 1 from lxw_dual where 'footbar' REGEXP '^f.*r$';
    1

    select '123' REGEXP '1|2|3' ;--包含1/2/3;
    select '123' REGEXP '(1)(2)(3)'; --同时包含123

    4、正则表达式替换函数:regexp_replace

    语法: regexp_replace(string A, string B, string C)
    返回值: string
    说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。
    举例:
    hive> select regexp_replace('foobar', 'oo|ar', '') from lxw_dual;
    fb

    5、正则表达式解析函数:regexp_extract

    语法: regexp_extract(string subject, string pattern, int index)
    返回值: string
    说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符(0显示与之匹配的整个字符串,1显示第一个括号内的内容,2显示第二个括号内的内容)。
    举例:
    hive> select regexp_extract('foothebar', 'foo(.?)(bar)', 1) from lxw_dual;
    the
    hive> select regexp_extract('foothebar', 'foo(.
    ?)(bar)', 2) from lxw_dual;
    bar
    hive> select regexp_extract('foothebar', 'foo(.?)(bar)', 0) from lxw_dual;
    foothebar
    注意,在有些情况下要使用转义字符,下面的等号要用双竖线转义,这是java正则表达式的规则。
    select data_field,
    regexp_extract(data_field,'.
    ?bgStart\=([^&]+)',1) as aaa,
    regexp_extract(data_field,'.?contentLoaded_headStart\=([^&]+)',1) as bbb,
    regexp_extract(data_field,'.
    ?AppLoad2Req\=([^&]+)',1) as ccc
    from pt_nginx_loginlog_st
    where pt = '2012-03-26' limit 2;

    二、正则语法(参考菜鸟教程

    略。
    再附一个在线校对工具:在线校对工具

    之前觉得正则比较麻烦,主要是语法不熟练。尝试对照语法表做几次,发现正则还是很方便很实用的。

    相关文章

      网友评论

          本文标题:Hive碎碎念(8):正则

          本文链接:https://www.haomeiwen.com/subject/qigdhktx.html