我正在Hive中学习简单的正则表达式.我正在按照教程和简单的hql语句获取错误?
select REGEXP_EXTRACT( 'Hello, my name is Ben. Please visit' , 'Ben' )
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误消息:
Wrong arguments ''Ben'': 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) on object org.apache.hadoop.hive.ql.udf.UDFRegExpExtract@ec0c06f of class org.apache.hadoop.hive.ql.udf.UDFRegExpExtract with arguments {Hello, my name is Ben. Please visit:java.lang.String, Ben:java.lang.String} of size 2
它适用于其他语言,但我想在Hive中学习它.任何帮助,将不胜感激.
您必须提供第三个参数,即要提取的组索引.
要提取完整匹配,请使用0:
select REGEXP_EXTRACT( 'Hello, my name is Ben. Please visit' , 'Ben', 0)
Run Code Online (Sandbox Code Playgroud)
要提取捕获组值,请使用组索引,例如
select REGEXP_EXTRACT( 'Hello, my name is Ben. Please visit' , 'name is (\\w+)', 1)
Run Code Online (Sandbox Code Playgroud)
将提取Ben.
看到这个参考:
regexp_extract(string subject, string pattern, int index)
返回使用模式提取的字符串.例如,regexp_extract('foothebar', 'foo(.*?)(bar)', 2)返回'bar.'请注意,在使用预定义的字符类时需要注意:使用'\s'第二个参数将匹配字母s;'\\s'必须匹配空格等.'index'参数是Java正则表达式匹配group()方法索引.有关或使用Java regex 方法的更多信息,请参阅docs/api/java/util/regex/Matcher.html.'index'group()