【问题标题】:Is the syntax for a regular expression different between Hive and Impala?Hive 和 Impala 之间的正则表达式的语法是否不同?
【发布时间】:2018-12-19 16:33:20
【问题描述】:

以下 regexp_extract 函数在 Impala 中似乎可以工作,但在 Hive 中使用时不起作用:

select regexp_extract("efwe FR wefwef", '.*?([[:upper:]]+).*?', 1)

Impala 中的结果是 FR(正如我所料,即第一组中的大写字符)

Hive 中的结果是 e(不是我所期望的)

谁能解释这是为什么?

通过研究这个问题,我了解到将正则表达式转换为 java 风格的正则表达式可能会有所帮助 (http://www.regexplanet.com/advanced/java/index.html)。但据我所知,Java Style Regex 与我所拥有的相同。

【问题讨论】:

  • Impala 似乎使用 RE2,而 Java 正则表达式则完全不同。在 Hive 中使用 '.*?(\\p{Lu}+).*'

标签: regex hive impala


【解决方案1】:

我自己发现了答案。 Java 不支持 POSIX 括号表达式,所以我使用 A-Z 而不是 :upper:

https://www.cloudera.com/documentation/enterprise/5-9-x/topics/impala_string_functions.html 在 Impala 2.0 及更高版本中,Impala 正则表达式语法符合 Google RE2 库使用的 POSIX 扩展正则表达式语法。有关详细信息,请参阅 RE2 文档。

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select#LanguageManualSelect-REGEXColumnSpecification 我们使用 Java 正则表达式语法。尝试http://www.fileformat.info/tool/regex.htm 进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2011-06-11
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多