Hive和Impala之间的正则表达式语法是否不同?

时间:2018-12-19 16:33:20

标签: regex hive impala

以下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样式正则表达式与我所拥有的相同。

1 个答案:

答案 0 :(得分: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 regex语法。尝试http://www.fileformat.info/tool/regex.htm进行测试。