Hive使用regexp,RLIKE需要使用转义字符
程序员文章站
2022-04-26 19:48:13
...
使用Hive做数据清洗,经常需要使用正则表达式。
比较讨厌的是,正则表达式匹配失败的时候,hive完全不会报错。
原来的写法
SELECT * from ahhs_product_info where product_name NOT RLIKE '([\u4e00-\u9fa5])+' ;
在hive里面的写法
SELECT * from ahhs_product_info where product_name NOT RLIKE '([\\u4e00-\\u9fa5])+' ;
另外用到了Hive的正则表达式提取数据的函数,regexp_extract()
用法如下:
regexp_extract(string subject, string pattern, int index)
通过下标返回正则表达式指定的部分。regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) returns ‘bar.’
注意,这里的index指的是:返回所有匹配的第N个。只有当匹配成功的对象>=2的时候,index可以选1,2。一般情况下是0.
如:
select uid, visittime, pageUrl, r_id, regexp_extract(pageUrl,'(?<=p-)\\d+(?=\\.html)',0) as pid from sitevisitlog where statdate='20141021' --根据URL提取产品ID的使用
使用了转义字符,就可以正常地识别正则表达式了。
正则表达式的强大功能比Oracle的LIKE牛逼多了!!
上一篇: 一段优美的正则
下一篇: JAVAEE规范基础知识