Эквивалент REGEXP_SUBSTR в HIVE SQL?

Доброе утро. Я ищу в Hive эквивалент REGEXP_SUBSTR, который я использую в других базах данных, таких как Teradata.

Мой конкретный случай: у меня есть поле со строкой. Это выглядит примерно так:

Row1: ABC ACC ADF AFA BAC CAF
Row2: ACC BAC CAG HOL HRR NOM
Row3: ACC ARR BBA CAF LOM NOM

В моем предложении WHERE я использую RLIKE для поиска определенных частей строки, например:

ГДЕ mystring RLIKE 'BAC|BBA'

Я хотел бы также вернуть ту часть, которая соответствует столбцу. Таким образом, результатом будет:

Row1: BAC
Row2: BAC
Row3: BBA

В других базах данных я бы сделал это, поместив это в инструкцию SELECT: REGEXP_SUBSTR(mystring,'(BAC|BBA)\S*'). Есть ли аналогичная функция в Hive? Если да, то каков синтаксис?

Я просмотрел несколько разных функций Hive, но они, кажется, ожидают, что строка будет каждый раз в одном и том же месте, а здесь это не так. Но я, по общему признанию, мог неправильно понимать синтаксис.


person lottidah    schedule 24.03.2020    source источник
comment
Функция называется regexp_extract() в Hive.   -  person Gordon Linoff    schedule 24.03.2020


Ответы (1)


Используйте regexp_extract и двойную косую черту для специальных символов, таких как \s:

 select regexp_extract('ABC ACC ADF AFA BAC CAF','(BAC|BBA)\\s*');

Подробнее о синтаксисе читайте здесь: Руководство по языку Hive — StringFunctions

person leftjoin    schedule 24.03.2020
comment
Кажется, работает отлично, большое спасибо за пример синтаксиса! - person lottidah; 24.03.2020