hive中的正则表达式及其应用

今天来说一下hive中的正则表达式,主要包含:元字符匹配、位置匹配、频率匹配

1、元字符匹配

(.)   表示匹配除换行符以外的任意字符。

(\w) 表示匹配字母、下划线、数字或汉字(\\W)。

(\d) 表示匹配数字

(\s) 表示匹配任意的空白符

([ ])  表示匹配方括号中任一字符

([^匹配内容]) 表示匹配方括号中任一字符

2、位置匹配

(^) 表示匹配字符串的开始,空值:^$

($) 表示匹配字符串的结束

(\b) 表示匹配单词的开始或结束。

(\B) 表示匹配非单词的开始或结束

3、频率匹配

(*) 表示匹配重复0次或多次

(+) 表示匹配重复一次或更多次

(?) 表示匹配重复0次或1次

({n}) 表示匹配重复n次

({n,}) 表示重复n次或更多次

({n,m}) 表示重复n到m次

正则匹配函数:regexp_extract函数

用法:

regexp_extract(string subject, string pattern, int index)

返回值: string

功能:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

        有了以上基础知识以后,就可以从繁杂的字符中匹配想要的东西,笔者在清洗竞对的房型、解析埋点中,正则表达式发挥了其强大的作用~

下面来看一些实际的案例,为了方便读者实现,这里面可以将filterlist直接替换为数据格式中并加上引号就可以实现相关结果,以方便大家实现和方便理解~

实例一:

场景:在进入到酒店详情页时,想看一下有多少用户会点击“增值税专用发票”这个按钮时,因此需要将埋点表中这个数据解析出来。

数据格式如下,是存在于一个json套json的字段中,如下数据是存放在filterlist字段中:

"[{\"filtertitle\":\"**服务\",\"filtertype\":\"3\",\"filtersubtype\":\"\",\"filtername\":\"增值税专用发票\",\"filterid\":\"3|SpecialInvoiceHotel\"}]"

代码如下:
 

select  regexp_extract(filterlist,'(filtername\\"\\:\\")(\\增\\值\\税\\专\\用\\发\\票)(\\"\\,)',2) as filtername
from AAA

解析结果如下:

实例二:

场景:在分析用户行为数据时,需要将用户在平台筛选的数据进行解析,但是埋点记录的方式是以json字符串的方式存储的,因此需要将埋点数据解析为结构化的数据形式。清洗出filtertype、filtername、filterid、filtertitle等字段。

数据格式如下:

{"filtertype":"29","filtername":"成人Node","filtertitle":"成人Group","filtersubtype":"","filterid":"29|1","filterValue":"1|4"}
{"filtertitle":"钻级","filtertype":"16","filtersubtype":"","filtername":"四钻/高档","filterid":"16|4",}

解析代码如下:

use dw_HHHHHH;
select clientcode
      ,regexp_extract(filterlist,'(filtertype"\\:")(\\d+)(",)',2)               as filtertype
      ,regexp_extract(filterlist,'(filtername"\\:")((\\W*\\w*)|(\\W*))(",)',2)  as filtername
      ,regexp_extract(filterlist,'(filtertitle"\\:")((\\W*\\w*)|(\\W*))(",)',2) as filtertitle
      ,regexp_extract(filterlist,'(filterid"\\:")(\\d+\\|\\d+)(",)',2)          as filterid
from tmp_action_click

结果如下:

        到这里你应该可以发现正则表达式功能的强大,当然在实际工作中用到的案例特别复杂,特别是在清洗竞对的房型时,耗费了大量的脑力~ 笔者在这里只是提供一些简单的案例供大家学习~

 

 

 

  • 15
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HiveSQL,可以使用正则表达式进行模式匹配和替换操作。HiveSQL提供了一些内置函数来处理正则表达式,其包括regexp_replace函数。该函数的语法如下: regexp_replace(string A, string B, string C) 其,A是要进行替换的字符串,B是要匹配的正则表达式,C是要替换的内容。该函数会将字符串A符合正则表达式B的部分替换为C。 需要注意的是,在HiveSQL正则表达式的语法与Java的正则表达式语法相似。如果需要使用特殊字符,可能需要进行转义。可以参考Java正则表达式的语法来编写HiveSQL正则表达式。 参考资料: \[1\] regexp_replace函数的说明,https://blog.csdn.net/weixin_37536446/article/details/81053172 #### 引用[.reference_title] - *1* [hive sql正则表达式总结](https://blog.csdn.net/weixin_40659514/article/details/127105119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [hive sql 正则表达式](https://blog.csdn.net/u011919863/article/details/119900339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值