如何在BigQuery中将同id的多行数据合并为单行?
BigQuery 多行合并为单行解决方案
针对你的需求,可直接使用以下查询语句实现,无需手动罗列全部30余列:
SELECT * EXCEPT(email, emp_type), STRING_AGG(DISTINCT emp_type, ', ') AS emp_type FROM `你的项目ID.你的数据集名.你的表名` GROUP BY ALL
语法说明
* EXCEPT(email, emp_type)会自动排除不需要的email列和待特殊处理的emp_type列,不管表有多少列都不需要手动逐一写列名,适配表结构变动STRING_AGG(emp_type, ', ')实现同id下多个emp_type值合并为逗号分隔的字符串,若不需要对emp_type去重,删掉参数里的DISTINCT即可GROUP BY ALL是BigQuery专属语法糖,会自动将SELECT子句中所有非聚合字段作为分组依据,避免手动罗列数十个分组键的繁琐操作
特殊场景适配
如果同id下除emp_type外的其他字段也存在不同值,需要指定取值规则(比如取最新一条记录的字段值),可使用以下写法:
WITH sorted_tbl AS ( SELECT *, -- 按业务需要的排序规则排序,比如按更新时间倒序,取最新记录的非emp_type字段值 ROW_NUMBER() OVER(PARTITION BY id ORDER BY update_time DESC) AS rn FROM `你的项目ID.你的数据集名.你的表名` ) SELECT * EXCEPT(email, emp_type, rn), STRING_AGG(DISTINCT emp_type, ', ') OVER(PARTITION BY id) AS emp_type FROM sorted_tbl WHERE rn = 1
内容的提问来源于stack exchange,提问作者Gopinath S
相关产品推荐
相关产品推荐

