Улей REGEXP_EXTRACT возвращает нулевые результаты - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь извлечь R7080075 и X1234567 из приведенных ниже примеров данных.Формат всегда представляет собой один символ верхнего регистра, за которым следует 7-значный номер.Этому идентификатору также всегда предшествует подчеркивание.Так как это данные, сгенерированные пользователем, иногда это первое подчеркивание в записи, а иногда все предыдущие пробелы заменяются подчеркиваниями.

Я запрашиваю Hive HDP с этим в операторе select:

REGEXP_EXTRACT(column_name,'[(?:(^_A-Z))](\d{7})',0) 

Я попытался обратиться к позициям 0-2, и никто не возвращает ошибку или какие-либо данные.Я протестировал код на regextester.com, и он выделил данные, которые я хочу извлечь.Когда я запускаю его в Zepplin, он возвращает NULL.

Мой опыт регулярных выражений ограничен, поэтому я просмотрел статьи здесь о regexp_extract (+ hive) и поговорил с коллегой.Заранее благодарим за помощь.

Пример данных:

Sept Wk 5 Sunny Sailing_R7080075_12345
Holiday_Wk2_Smiles_X1234567_ABC

1 Ответ

0 голосов
/ 01 июня 2018

Руководство Hive гласит следующее:

Обратите внимание, что при использовании предопределенных классов символов необходимо соблюдать осторожность: использование '\ s' в качестве второго аргумента будет соответствовать букве s;'\\ s' необходимо для соответствия пробелу и т. д.

Кроме того, ваше выражение включает в себя ненужные символы в классе символов.

Попробуйте это:

REGEXP_EXTRACT(column_name,'_[A-Z](\\d{7})',0) 

Поскольку вам нужна только часть без подчеркивания, используйте это:

REGEXP_EXTRACT(column_name,'_([A-Z]\\d{7})',1)

Соответствует всему шаблону, но извлекает только вторую группу вместо всего соответствия.

Или альтернативно:

REGEXP_EXTRACT(column_name,'(?<=_)[A-Z]\\d{7}', 0)

При этом используется метод регулярного выражения, называемый "позитивный взгляд назад".Это переводится как: «найди мне заглавный алфавит, за которым следуют 7 цифр, но только , если перед ними стоит _».Он использует _ для сопоставления, но не считает его частью извлеченного совпадения.

...