赞
踩
今天来说一下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
结果如下:
到这里你应该可以发现正则表达式功能的强大,当然在实际工作中用到的案例特别复杂,特别是在清洗竞对的房型时,耗费了大量的脑力~ 笔者在这里只是提供一些简单的案例供大家学习~
————————————————
版权声明:本文为CSDN博主「数据小白的进阶之路」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_37536446/article/details/81053172
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。