欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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牛逼多了!!

 

 

相关标签: Hive RLIKE regexp