Извлечение элемента из ячейки, содержащей словарь

0
задан jamiet 13 July 2018 в 07:16
поделиться

2 ответа

Похоже, вы хотите функцию REGEXP_EXTRACT . Вот пример:

SELECT REGEXP_EXTRACT(dict, r'client:([^,:]+)') AS client_step1
FROM (
  SELECT "category:ops,client:acompany,type:sometype" AS dict
)

В результате он возвращает строку acompany. Регулярное выражение ищет client: внутри строки и сопоставляет все после него до следующего , или : или конца строки.

1
ответ дан Elliott Brossard 17 August 2018 в 13:28
поделиться

Другой вариант для синтаксического анализа, например ваш, выглядит следующим образом (для BigQuery Standard SQL)

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, "category:ops,client:acompany,type:sometype" AS dict
)
SELECT id,
  ARRAY(
    SELECT AS STRUCT 
      SPLIT(x, ':')[OFFSET(0)] key, 
      SPLIT(x, ':')[OFFSET(1)] value
    FROM UNNEST(SPLIT(dict)) x 
  ) items
FROM `project.dataset.table`   

с результатом ниже

Row id  items.key   items.value  
1   1   category    ops  
        client      acompany     
        type        sometype       

Как вы можете видеть здесь - вы проанализировать все словарные статьи

Если вам все еще нужно только значение определенного элемента - вы можете использовать ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, "category:ops,client:acompany,type:sometype" AS dict
)
SELECT id,
  ( SELECT 
      SPLIT(x, ':')[OFFSET(1)]
    FROM UNNEST(SPLIT(dict)) x 
    WHERE SPLIT(x, ':')[OFFSET(0)] = 'client'
    LIMIT 1
  ) client
FROM `project.dataset.table`  
1
ответ дан Mikhail Berlyant 17 August 2018 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: