REGEXP_SUBSTR эквивалент в HIVE SQL? - PullRequest
1 голос
/ 24 марта 2020

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

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

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

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

WHERE mystring RLIKE 'BAC | BBA '

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

Row1: BAC
Row2: BAC
Row3: BBA

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

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

1 Ответ

1 голос
/ 24 марта 2020

Используйте regexp_extract и double-sla sh для специальных символов, таких как \ s:

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

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

...