0


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 toexecute 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}:Nogroup1(state=42000,code=10014)
标签: spark 大数据 hive

本文转载自: https://blog.csdn.net/qq_33446500/article/details/127496101
版权归原作者 SunnyZ-L 所有, 如有侵权,请联系我们删除。

“hiveSql正则方式提取字段中的内容”的评论:

还没有评论