蜂巢中的正则表达式

时间:2017-09-05 17:33:03

标签: regex hive hiveql

我在Hive中学习简单的正则表达式。我正在按照教程和简单的hql语句出错?

select REGEXP_EXTRACT( 'Hello, my name is Ben. Please visit' , 'Ben' )

这是我收到的错误消息:

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中学习它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:7)

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

要提取完整匹配项,请使用0

select REGEXP_EXTRACT( 'Hello, my name is Ben. Please visit' , 'Ben', 0)

要提取捕获组值,请使用组索引,例如

select REGEXP_EXTRACT( 'Hello, my name is Ben. Please visit' , 'name is (\\w+)', 1)

将摘录Ben

请参阅this reference

  

regexp_extract(string subject, string pattern, int index)
  返回使用模式提取的字符串。例如,regexp_extract('foothebar', 'foo(.*?)(bar)', 2)返回'bar.'请注意,在使用预定义字符类时需要注意:使用'\s'作为第二个参数将匹配字母s; '\\s'是匹配空格等所必需的。'index'参数是Java正则表达式匹配器 group()方法索引。有关'index'或Java正则表达式group()方法的详细信息,请参阅 docs / api / java / util / regex / Matcher.html