BigQuery能否通过单查询实现按ID行转列合并行数据到唯一列?
答案
可以通过单条BigQuery查询实现,无需额外中间步骤。
实现方案
采用条件聚合的方式完成行转列:按id、name字段分组,针对每个目标属性列,匹配对应cat值提取value,无匹配项时自动返回NULL,和要求的空值生成规则完全一致。
参考SQL代码
SELECT id AS ID, name AS Name, MAX(IF(cat = 'att1', value, NULL)) AS Att1_Val1, MAX(IF(cat = 'att2', value, NULL)) AS Att2_Val1, MAX(IF(cat = 'att3', value, NULL)) AS Att3_Val1, MAX(IF(cat = 'att4', value, NULL)) AS Att4_Val1 FROM `你的源表路径` -- 替换为实际项目、数据集、表名 GROUP BY id, name ORDER BY id
运行结果对照
基于给出的示例源表数据,执行上述查询后的输出和目标表结构、数据完全匹配:
- ID=1、Name=name1:Att1_Val1=1,Att2_Val1=2,Att3_Val1=3,Att4_Val1=NULL
- ID=2、Name=name2:Att1_Val1=4,Att2_Val1=5,Att3_Val1=6,Att4_Val1=7
补充:如果后续
cat字段新增了固定枚举属性,只需要在SELECT块中新增对应条件聚合字段即可,整体逻辑无需调整。
内容的提问来源于stack exchange,提问作者TRM
相关产品推荐
相关产品推荐

