hive正则表达式之 regexp regexp_extract regexp_replace

本文详细介绍了Hive中的正则表达式函数,包括REGEXP、REGEXP_EXTRACT和REGEXP_REPLACE的语法和用法,通过实例展示了如何在Hive查询中应用这些函数进行数据匹配和提取。
部署运行你感兴趣的模型镜像

1.regexp

语法: A REGEXP B
操作类型: strings
描述: 功能与RLIKE相同

select count(*) from olap_b_dw_hotelorder_f where create_date_wid not regexp '\\d{8}'

与下面查询的效果是等效的:

select count(*) from olap_b_dw_hotelorder_f where create_date_wid not rlike '\\d{8}';

2.regexp_extract

语法: regexp_extract(string subject, string pattern, int index)
返回值: string
说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

hive> select regexp_extract('IloveYou','I(.*?)(You)',1) from test1 limit 1;

Total jobs = 1

...

Total MapReduce CPU Time Spent: 7 seconds 340 msec

OK

love

Time taken: 28.067 seconds, Fetched: 1 row(s)

hive> select regexp_extract('IloveYou','I(.*?)(You)',2) from test1 limit 1;

Total jobs = 1

...

OK

You

Time taken: 26.067 seconds, Fetched: 1 row(s)

hive> select regexp_extract('IloveYou','(I)(.*?)(You)',1) from test1 limit 1;

Total jobs = 1

...

OK

I

Time taken: 26.057 seconds, Fetched: 1 row(s)

 
hive> select regexp_extract('IloveYou','(I)(.*?)(You)',0) from test1 limit 1;

Total jobs = 1

...

OK

IloveYou

Time taken: 28.06 seconds, Fetched: 1 row(s)

hive> select regexp_replace("IloveYou","You","") from test1 limit 1;

Total jobs = 1

...

OK

Ilove

Time taken: 26.063 seconds, Fetched: 1 row(s)

3.regexp_replace

语法: regexp_replace(string A, string B, string C)
返回值: string
说明:将字符串A中的符合Java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似Oracle中的regexp_replace函数。

hive> select regexp_replace("IloveYou","You","") from test1 limit 1;

Total jobs = 1

...

OK

Ilove

Time taken: 26.063 seconds, Fetched: 1 row(s)

hive> select regexp_replace("IloveYou","You","lili") from test1 limit 1;

Total jobs = 1

...

OK

Ilovelili

以上转载自 Hadoop Hive概念学习系列之hive的正则表达式初步(六)

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

Hive里,可使用`regexp_extract`函数按照正则表达式的规则拆分字符串。该函数的语法为:`regexp_extract(string subject, string pattern, int index)`,作用是将字符串`subject`按照`pattern`正则表达式的规则拆分,返回`index`指定的字符。需注意,部分情况下要使用转义字符 [^1]。 以下是具体示例: 1. 从字符串中提取特定部分: ```sql -- 从 'foothebar' 中提取 'the' SELECT regexp_extract('foothebar', 'foo(.*?)(bar)', 1); -- 从 'foothebar' 中提取 'bar' SELECT regexp_extract('foothebar', 'foo(.*?)(bar)', 2); -- 返回整个匹配的字符串 'foothebar' SELECT regexp_extract('foothebar', 'foo(.*?)(bar)', 0); ``` 2. 巧用正则表达式的贪婪匹配: ```sql -- 从 '979|7.10.80|8684' 中提取 '8684' SELECT regexp_extract('979|7.10.80|8684', '.*\\|(.*)', 1); ``` 3. 提取字符串中分隔符后的部分: ```sql -- 如果分隔符后无内容,返回 'NA' SELECT IF(regexp_extract('00303', '([0-9a-zA-Z]+)[_/,;]?(.*)', 2) = '', 'NA', regexp_extract('00303', '([0-9a-zA-Z]+)[_/,;]?(.*)', 2)); -- 提取 '003/03' 中分隔符 '/' 后的 '03' SELECT IF(regexp_extract('003/03', '([0-9a-zA-Z]+)[_/,;]?(.*)', 2) = '', 'NA', regexp_extract('003/03', '([0-9a-zA-Z]+)[_/,;]?(.*)', 2)); -- 提取 '003_03' 中分隔符 '_' 后的 '03' SELECT IF(regexp_extract('003_03', '([0-9a-zA-Z]+)[_/,;]?(.*)', 2) = '', 'NA', regexp_extract('003_03', '([0-9a-zA-Z]+)[_/,;]?(.*)', 2)); -- 提取 '0033/s' 中分隔符 '/' 后的 's' SELECT IF(regexp_extract('0033/s', '([0-9a-zA-Z]+)[_/,;]?(.*)', 2) = '', 'NA', regexp_extract('0033/s', '([0-9a-zA-Z]+)[_/,;]?(.*)', 2)); ``` 4. 从JSON字符串中提取特定字段: ```sql -- 从 'filterlist' 字段中提取 'filtertype' 的值 SELECT clientcode, regexp_extract(filterlist, '(filtertype"\\:")(\\d+)(",)', 2) AS filtertype FROM tmp_action_click; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值