Как JSON_EXTRACT использовать ключ из столбца?
Функция Bigquery JSON_EXTRACT принимает строку в качестве ключа для возврата значения. Можно ли взять строку из столбца?
json_string_expr
обрабатывать это как {'A': '123', 'B': '456'}
, Я хочу взять ключ из столбца list
, Таблица Bigquery и ожидаемый результат приведены ниже.
| json_string_expr | list | expected_result
|{'A': '123', 'B': '456'} | A | '123'
|{'A': '789', 'B': '012'} | B | '012'
JSON_EXTRACT(json_string_expr, '$.list')
не может дать ожидаемый результат, потому что функция ожидает строку после $.
, Любая идея, как вернуть ожидаемый результат, используя стандартный SQL?
1 ответ
Решение
Ниже для BigQuery Standard SQL
К сожалению, JSONPath должен быть строковым литералом или параметром запроса, поэтому см. Обходной путь ниже
#standardSQL
SELECT json_string_expr, list,
(SELECT SPLIT(kv, ':')[SAFE_OFFSET(1)]
FROM UNNEST(SPLIT(REGEXP_REPLACE(json_string_expr, r"[{} ']", ''))) kv
WHERE SPLIT(kv, ':')[SAFE_OFFSET(0)] = list
) value
FROM `project.dataset.table`
Другая, менее подробная версия
#standardSQL
SELECT json_string_expr, list,
REGEXP_EXTRACT(json_string_expr, CONCAT(r"'", list, "': '(.*?)'")) value
FROM `project.dataset.table`
если применить обе приведенные выше версии к образцу данных из вашего вопроса - результат
Row json_string_expr list value
1 {'A': '123', 'B': '456'} A 123
2 {'A': '789', 'B': '012'} B 012