如何在 bigquery 中使用带有 JSON EXTRACT 的正则表达式
Posted
技术标签:
【中文标题】如何在 bigquery 中使用带有 JSON EXTRACT 的正则表达式【英文标题】:How to use regex with JSON_EXTRACT on big query 【发布时间】:2019-03-13 12:16:02 【问题描述】:我在大查询表上有一个 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 的字段上没有模式...可以在这样的大查询中使用带有 JSON_EXTRACT 的 REGEX 吗?
JSON_EXTRACT(e.event_payload, "(content_id|cid|c_id)") as content_id
【问题讨论】:
三个键都可以出现吗? 不,这些键代表相同的信息,我的问题是 JSON 的来源不同,所以它们不遵循相同的模式... 【参考方案1】:您可以替换可能的字段名称,然后执行提取:
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
【讨论】:
以上是关于如何在 bigquery 中使用带有 JSON EXTRACT 的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
使用 Nifi 将带有数组的 json 插入 BigQuery 的问题
Bigquery 为其余数据输出带有 json 数组对象的不同 zip 行
从带有键名的 JSON 中提取值在 bigquery 中包含 #