sql - 如何在bigquery中将正则表达式与JSON_EXTRACT结合使用

标签 sql regex google-bigquery

我在大查询表上有一个 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/

相关文章:

google-analytics - Bigquery GA360 每日导出 : find earliest daily table

go - 在 Golang 中使用 BigQuery Write API

python - 在循环中从 bigquery 查询数据时出现 Bad Request 错误

java - java中的嵌套选择

mysql - 从 3 个 mySQL 表中提取数据

SQL Server 2008的分页方法?

java - 如何在 Java 中通过正则表达式删除 <script>..</script>?

排除字符的 Python 正则表达式

sql - 为什么我不能将唯一标识符/GUID 传递给存储过程

当循环超过 100 个不同的正则表达式时,Python re 模块变得慢 20 倍