как использовать regexp_extract в улье - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь извлечь часть строки ниже с помощью regexp_extract, но безуспешно:

CUST_NEW_ACCOUNTS_LINES_2019-03-03.dat.gz

Я хочу просто получить часть даты.На веб-сайте regex101.com это, кажется, работает, но куст дает мне сообщение об ошибке.

regexp_extract(meta_source_filename,'^(?:[^_]+_){4}([^_]+)') file_date

Может кто-нибудь помочь мне понять, что здесь не так?Я совсем не знаком с синтаксисом regexp_extract, поэтому использую другую функцию в качестве отправной точки.
Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 марта 2019
with your_data as (
select 'CUST_NEW_ACCOUNTS_LINES_2019-03-03.dat.gz' str
)

select regexp_extract(str,'_(\\d{4}(-\\d{2}){2})\\.',1)
from your_data;

Результат:

OK
2019-03-03
Time taken: 0.062 seconds, Fetched: 1 row(s)

Выражение '_(\\d{4}(-\\d{2}){2})\\.' означает:

подчеркивание _ четыре цифры \\d{4} повтор (дефис и две цифры) два раза (-\\d{2}){2}точка \\.

Группа захвата номер один (только дата): (\\d{4}(-\\d{2}){2}).В Hive для экранирования необходимо использовать \\.

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

Вы записали нужную подстроку в группу захвата.Вы должны использовать номер, ID группы в качестве третьего аргумента:

regexp_extract(meta_source_filename,'^(?:[^_]+_){4}([^_]+)', 1) file_date
                                                             ^

См. regexp_extract(string subject, string pattern, int index) документы:

ИндексПараметр - это индекс метода Java (regex Matcher group).См. docs / api / java / util / regex / Matcher.html для получения дополнительной информации о методе index или Java regex group ().

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