代码之家  ›  专栏  ›  技术社区  ›  Srinivas

hive中的正则表达式

  •  3
  • Srinivas  · 技术社区  · 7 年前

    我正在学习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 回复  |  直到 7 年前
        1
  •  10
  •   Wiktor Stribiżew    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' 匹配器 group() docs/api/java/util/regex/Matcher。html 有关 或Java正则表达式 方法