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