Похоже, вы хотите функцию REGEXP_EXTRACT
. Вот пример:
SELECT REGEXP_EXTRACT(dict, r'client:([^,:]+)') AS client_step1
FROM (
SELECT "category:ops,client:acompany,type:sometype" AS dict
)
В результате он возвращает строку acompany
. Регулярное выражение ищет client:
внутри строки и сопоставляет все после него до следующего ,
или :
или конца строки.
Другой вариант для синтаксического анализа, например ваш, выглядит следующим образом (для 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`