hiveSql正则方式提取字段中的内容

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)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值