使用Hive作数据清洗,常常须要使用正则表达式。html
比较讨厌的是,正则表达式匹配失败的时候,hive彻底不会报错。正则表达式
原来的写法sql
SELECT * from ahhs_product_info where product_name NOT RLIKE '([\u4e00-\u9fa5])+' ;函数
在hive里面的写法ui
SELECT * from ahhs_product_info where product_name NOT RLIKE '([\\u4e00-\\u9fa5])+' ;spa
另外用到了Hive的正则表达式提取数据的函数,regexp_extract()code
用法以下:regexp
regexp_extract(string subject, string pattern, int index)htm
经过下标返回正则表达式指定的部分。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牛逼多了!!