转载请在文章起始处注明出处,谢谢。
一、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 '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;
二、正则语法(参考菜鸟教程)
略。
再附一个在线校对工具:在线校对工具
之前觉得正则比较麻烦,主要是语法不熟练。尝试对照语法表做几次,发现正则还是很方便很实用的。
网友评论