我在大查询表上有一个 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
最佳答案
您可以替换可能的字段名称,然后执行提取:
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
关于sql - 如何在bigquery中将正则表达式与JSON_EXTRACT结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55141693/