蜂巢中的正则表达式

Sri*_*vas 3 regex hive hiveql

我正在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中学习它.任何帮助,将不胜感激.

Wik*_*żew 8

您必须提供第三个参数,即要提取的组索引.

要提取完整匹配,请使用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()