You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写BigQuery SQL过滤JSON类型的Info.error数组数据?

问题描述

原始数据表

RowNameInfo
1Tom{"count":0, "error":[0,"failed",0]}
2Joe{"count":0, "error":["failed","failed","failed"]}
3Joe{"count":0, "error":[0,0,0]}
4Tom{"count":0, "error":["failed","failed",0]}

过滤需求

  • 保留Info.error数组全为0的记录
  • 排除Info.error数组全为"failed"的记录
  • 保留Info.error数组至少包含一个0的记录

期望输出

RowNameInfo
1Tom{"count":0, "error":[0,"failed",0]}
3Joe{"count":0, "error":[0,0,0]}
4Tom{"count":0, "error":["failed","failed",0]}

求对应的BigQuery SQL语句。


解决方案

以下是满足需求的BigQuery SQL语句:

SELECT *
FROM your_table_name
WHERE
  -- 排除所有元素都是"failed"的记录
  NOT (SELECT COUNT(*) FROM UNNEST(Info.error) elem WHERE elem != 'failed') = 0
  -- 确保数组中至少存在一个0(包含全0的情况)
  AND EXISTS (SELECT 1 FROM UNNEST(Info.error) elem WHERE elem = 0)

逻辑说明

  1. 排除全"failed"记录:通过UNNEST展开数组后,统计非"failed"元素的数量。如果数量为0,说明数组全是"failed",用NOT排除这类行。
  2. 保留含0的记录:用EXISTS检查数组中是否有元素等于0,全0的数组自然满足这个条件,因此无需额外单独判断全0的情况,一条条件即可覆盖需求中的规则1和3。

内容的提问来源于stack exchange,提问作者Hikaru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:45:46