BigQuery中列含结构体时如何获取唯一行并生成指定表
解决方案
你可以通过GROUP BY子句按name分组,结合聚合函数来获取唯一的name及其对应的结构体数组,无需依赖DISTINCT(因为DISTINCT会对所有选中列做唯一性判断,结构体/数组类型通常无法直接参与这类判断)。
根据你的实际场景,有两种常见处理方式:
1. 同一name对应的结构体数组唯一
如果每个name对应的favoritePlayerHours结构体数组在所有行中完全一致,直接用ANY_VALUE函数提取该数组即可:
SELECT name, ANY_VALUE(favoritePlayerHours) AS favoritePlayerHours FROM 你的表名 GROUP BY name
2. 同一name存在多个不同结构体数组,需合并
如果同一个name有多行不同的favoritePlayerHours数组,想要将它们合并为一个数组,可使用ARRAY_CONCAT_AGG:
SELECT name, ARRAY_CONCAT_AGG(favoritePlayerHours) AS favoritePlayerHours FROM 你的表名 GROUP BY name
若你最终需要的是第一列为所有唯一name的数组,第二列为每个玩家对应结构体数组的集合,可以嵌套一层聚合实现:
SELECT ARRAY_AGG(DISTINCT name) AS unique_names, ARRAY_AGG(STRUCT(name, favoritePlayerHours)) AS player_structs FROM ( SELECT name, ANY_VALUE(favoritePlayerHours) AS favoritePlayerHours FROM 你的表名 GROUP BY name )
内容的提问来源于stack exchange,提问作者Makketronix
相关产品推荐
相关产品推荐

