Извлечение значения имени поля из длинного |разделенная строка в Cloudera Impala с использованием REGEXP_EXTRACT - PullRequest
1 голос
/ 23 марта 2019

Я новичок в REGEXP и его синтаксис.

У меня есть длинная строка из нескольких пар в формате field_name: значение, разделенное |Используя Impala Shell, я пытаюсь запустить SQL Select, чтобы найти конкретное имя_поля: и затем нужно получить все, что имеет значение, до следующего |

Пытался использовать это руководство, но оно не дает полного синтаксисадля POSIX https://www.cloudera.com/documentation/enterprise/5-9-x/topics/impala_string_functions.html

Я попробовал это

SELECT 
CASE
    WHEN LONGSTRING IS NOT NULL
    AND REGEXP_LIKE(LONGSTRING, 'FIELD_NAME1:') = true
    THEN REGEXP_EXTRACT(LONGSTRING, 'FIELD_NAME1:([^\|]+\|',1)
END AS LONGSTRING_PARSED
from Table1

Я попытался выше, прочитав немного о REGEX101 и прочитав этот предыдущий пост REGEXP_EXTRACT в Impala

Образец длинной строки FIELD_NAME1: VALUE1 | FIELD_NAME2: VALUE2 | FIELD_NAME3: VALUE3

Образец SQL, который я пытался

SELECT 
CASE
  WHEN LONGSTRING IS NOT NULL
  AND REGEXP_LIKE(LONGSTRING, 'FIELD_NAME1:') = true
  THEN REGEXP_EXTRACT(LONGSTRING, 'FIELD_NAME1:([^\|]+\|',1)
END AS LONGSTRING_PARSED
from Table1

Ожидается увидеть VALUE1

Фактический результат Null

...