【问题标题】:How to use regex with JSON_EXTRACT on big query如何在 bigquery 中使用带有 JSON EXTRACT 的正则表达式
【发布时间】: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 的来源不同,所以它们不遵循相同的模式...

标签: sql regex google-bigquery


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多