Как использовать регулярное выражение с JSON_EXTRACT для большого запроса - PullRequest
2 голосов
/ 13 марта 2019

У меня есть поле JSON в большой таблице запросов, и в настоящее время я использую следующий метод для извлечения из элемента id (например):

coalesce(
   nullif(JSON_EXTRACT(e.event_payload, 'content_id'), ''),
   nullif(JSON_EXTRACT(e.event_payload, 'cid'), ''),
   nullif(JSON_EXTRACT(e.event_payload, 'c_id'), ''),
   ...
  ) AS content_id,

У меня нет шаблонав полях этого JSON ... Возможно ли использовать REGEX с JSON_EXTRACT для большого запроса, подобного этому?

JSON_EXTRACT(e.event_payload, "(content_id|cid|c_id)") as content_id

1 Ответ

3 голосов
/ 13 марта 2019

Вы можете заменить возможные имена полей и затем выполнить извлечение:

SELECT
  JSON_EXTRACT(
    REGEXP_REPLACE(e.event_payload, r'"c\_?id"', '"content_id"'),
    '$.content_id') as content_id
FROM dataset.table

Как самостоятельный пример:

WITH T AS (
  SELECT '{"cid": {"a": 1}}' AS event_payload UNION ALL
  SELECT '{"content_id": {"b": 2}}' UNION ALL
  SELECT '{"c_id": {"c": 3}}'
)
SELECT
  JSON_EXTRACT(
    REGEXP_REPLACE(e.event_payload, r'"c\_?id"', '"content_id"'),
    '$.content_id') as content_id
FROM T AS e
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...