概述
文章目录
- hiveSql正则方式提取字段中的内容
- 1. 示例
hiveSql正则方式提取字段中的内容
通过 regexp_extract(string subject, string pattern, int index)
UDF完成
- 函数:
regexp_extract(string subject, string pattern, int index)
- 返回结果:string
- 使用说明:
返回pattern提取的字符串。
param1:要匹配的字符串(非字符串也可以)或字段
param2:正则表达式
param3:是 Java regex Matcher group() 方法索引,表示要返回的部分。0表示把整个正则表达式对应的结果全部返回。
例如,regexp_extract('foothebar', 'foo(.*?)(bar)', 2) 返回 'bar'
。
请注意,在使用预定义的字符类时需要进行转义,同java中的使用方式:使用's'
将匹配字母s
;'\s'
将会匹配任何空白字符。
1. 示例
官方示例中的执行结果
-- 其中param2表示返回正则表达式中$2的结果,即(bar)对应的结果
> select regexp_extract('foothebar', 'foo(.*?)(bar)', 2);
+------+
| _c0 |
+------+
| bar |
+------+
-- 如果param2值为0,则返回pattern匹配的整个结果
> select regexp_extract('foothebar', 'foo(.*?)(bar)', 0);
+------------+
| _c0 |
+------------+
| foothebar |
+------------+
param1并非只可以是string类型,如下示例中param1的type为int
> select regexp_extract(5454310223, '10', 0);
+------+
| _c0 |
+------+
| 10 |
+------+
如果param2的pattern中不包含(),则param3只可以是0,其他值会报错
> select regexp_extract('100.034万人民币', '^\d+\.*\d+', 0) as result;
+----------+
| result |
+----------+
| 100.034 |
+----------+
> select regexp_extract('100.034万人民币', '^\d+\.*\d+', 1) as result;
Error: Error while compiling statement: FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments '1': org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String,java.lang.Integer) with arguments {100.034万人民币,^d+.*d+,1}:No group 1 (state=42000,code=10014)
最后
以上就是勤奋月亮为你收集整理的hiveSql正则方式提取字段中的内容hiveSql正则方式提取字段中的内容的全部内容,希望文章能够帮你解决hiveSql正则方式提取字段中的内容hiveSql正则方式提取字段中的内容所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复