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

BigQuery(BQ)左关联后构造嵌套表如何避免生成含大量NULL的数组

解决方案

你可以直接在聚合t1结构体的ARRAY_AGG函数中添加DISTINCT关键字实现去重,修改后的代码如下:

with 
  t1 AS (select 1 AS c1, 2 AS c2 UNION ALL select 5, 6),
  t2 AS (select 3 AS c1, 4 AS c4 UNION ALL select 3, 5 UNION ALL select 3,4 UNION ALL select 5,6)
SELECT 
  t2.c1, 
  ARRAY_AGG(DISTINCT t2.c4), 
  ARRAY_AGG(DISTINCT (SELECT AS STRUCT t1.*))
FROM t2 LEFT JOIN t1 ON t1.c1=t2.c1
GROUP BY t2.c1

原理说明

当t2的c1值在t1中没有匹配记录时,每一行t2数据都会对应生成一条全字段为NULL的t1结构体,聚合时这些完全相同的NULL结构体会全部存入数组导致重复。添加DISTINCT后,聚合过程会自动对数组元素去重,完全一致的NULL结构体只会保留1个,符合你预期的输出效果。

可选扩展

如果你不需要保留NULL记录,希望无匹配时返回空数组,可以额外添加过滤条件:

ARRAY_AGG(DISTINCT (SELECT AS STRUCT t1.*) FILTER (WHERE t1.c1 IS NOT NULL))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:48:00