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

GCP BigQuery中如何将列转换为数组?求解决方案

解决BigQuery查询结果格式转换问题

你未提供当前查询返回的数据格式和期望的目标格式,但结合你提到的unnest、array_agg函数,我针对三种最常见的格式转换场景给出解决方案:

场景1:将同一col1对应的多个col2值聚合为数组

如果原始数据是同一col1对应多行不同col2,想要合并为单行列数组,可修改查询为:

SELECT 
  col1,
  ARRAY_AGG(col2) AS col2_list
FROM `your-project.your-dataset.table` 
WHERE partitionid BETWEEN 0 AND 1000
GROUP BY col1

该查询会将每个col1关联的所有col2值打包成数组,例如原始行(A, X)、(A, Y)会转换为(A, [X, Y])。

场景2:行转列(将col2的不同值转为单独列)

若需要把col2的不同取值作为独立列展示,分两种情况处理:

当col2取值固定时:

SELECT 
  col1,
  MAX(IF(col2 = 'val1', col2, NULL)) AS val1_col,
  MAX(IF(col2 = 'val2', col2, NULL)) AS val2_col
FROM `your-project.your-dataset.table` 
WHERE partitionid BETWEEN 0 AND 1000
GROUP BY col1

当col2取值不固定时,使用PIVOT函数:

SELECT *
FROM (
  SELECT col1, col2
  FROM `your-project.your-dataset.table` 
  WHERE partitionid BETWEEN 0 AND 1000
)
PIVOT (
  COUNT(col2) FOR col2 IN ('val1', 'val2', 'val3') -- 替换为你的col2实际取值
)

场景3:将数组拆分为多行(反向聚合)

如果原始结果中col2是数组,需要拆分为多行,可使用UNNEST:

SELECT 
  col1,
  UNNEST(col2_list) AS col2
FROM (
  SELECT col1, ARRAY_AGG(col2) AS col2_list
  FROM `your-project.your-dataset.table` 
  WHERE partitionid BETWEEN 0 AND 1000
  GROUP BY col1
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:52:47