Как упростить адреса электронной почты с помощью регулярных выражений в Hive - PullRequest
0 голосов
/ 28 февраля 2019

Я хотел бы упростить адрес электронной почты в Hive, удалив все ненужное.Я уже могу удалить "."используя «translate ()», однако gmail также позволяет игнорировать все, что находится между «+» и «@».В Teradata работает следующее регулярное выражение:

select REGEXP_REPLACE('test+friends@gmail.com', '\+.+\\@' ,'\\@');

дает: 'test@gmail.com', но в Hive я получаю:

FAILED: SemanticException [Ошибка 10014]: Строка 1: 7 Неправильные аргументы '' \ @ '': org.apache.hadoop.hive.ql.metadata.HiveException: Невозможно выполнить открытый метод org.apache.hadoop.io.Text org.apache.hadoop.hive.ql.udf.UDFRegExpReplace.evaluate (org.apache.hadoop.io.Text, org.apache.hadoop.io.Text, org.apache.hadoop.io.Text) для объекта org.apache.hadoop.hive.ql.udf.UDFRegExpReplace@131b58d4 класса org.apache.hadoop.hive.ql.udf.UDFRegExpReplace с аргументами {test+friends@gmail.com: org.apache.hadoop.io.Text, +. + @: org.apache.hadoop.io.Text, @: org.apache.hadoop.io.Text} размером 3

Как мне заставить это регулярное выражение работать в Hive?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Я нашел ответ:

выберите REGEXP_REPLACE ('test+friends@gmail.com ',' [+]. + @ ',' @ ');

или

выберите REGEXP_REPLACE ('test+friends@gmail.com ',' \ +. + @ ',' @ ');

Делает свое дело.У Teradata и Hive, похоже, есть существенные различия в том, как они обрабатывают регулярные выражения.

0 голосов
/ 28 февраля 2019

Вам не нужно экранировать @ в регулярных выражениях.Попробуйте:

select REGEXP_REPLACE('test+friends@gmail.com', '\+[^@]+@' ,'@');

Вы также должны использовать [^@]+ вместо .+, чтобы матч остановился на первом @.В противном случае, если на входе есть несколько адресов, совпадение охватит все из них.

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