如何在 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 中包含 #

如何让 BigQuery 的 API 使用标准 SQL 进行查询?

使用控制台将多条 JSON 记录加载到 BigQuery

如何使用java将复杂的动态嵌套json插入bigquery