正则表达式的语法在hive和impala之间有区别吗?

9wbgstp7  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(400)

以下regexp\u extract函数在impala中似乎可以工作,但在hive中使用时不起作用:

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

Impala 的结果是 FR (如我所料,即第一组的大写字符)
Hive的结果是 e (不是我想的那样)
有人能解释这是为什么吗?
通过研究这个问题,我了解到将正则表达式转换为java风格的regex可能会有所帮助(http://www.regexplanet.com/advanced/java/index.html). 但据我所知,java风格的regex和我所拥有的是一样的。

55ooxyrt

55ooxyrt1#

我自己找到了答案。java不支持posix括号表达式,所以我使用了a-z而不是:upper:
https://www.cloudera.com/documentation/enterprise/5-9-x/topics/impala_string_functions.html 在impala2.0及更高版本中,impala正则表达式语法符合google re2库使用的posix扩展正则表达式语法。有关详细信息,请参阅re2文档。
https://cwiki.apache.org/confluence/display/hive/languagemanual+select#languagemanualselect-regexcolumnspecification我们使用javaregex语法。尝试http://www.fileformat.info/tool/regex.htm 用于测试目的。

相关问题