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
相关产品推荐
相关产品推荐

