Различен ли синтаксис для регулярного выражения между Hive и Impala? - PullRequest
0 голосов
/ 19 декабря 2018

Следующая функция 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 голосов
/ 19 декабря 2018

Я нашел ответ сам.Java не поддерживает выражения в скобках POSIX, поэтому я использовал AZ вместо: upper:

https://www.cloudera.com/documentation/enterprise/5-9-x/topics/impala_string_functions.html В Impala 2.0 и более поздних версиях синтаксис регулярных выражений Impala соответствует синтаксису расширенных регулярных выражений POSIX, используемомубиблиотека Google RE2.Подробнее см. Документацию RE2.

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select#LanguageManualSelect-REGEXColumnSpecification Мы используем синтаксис Java regex.Попробуйте http://www.fileformat.info/tool/regex.htm для целей тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...