BigQuery使用UNPIVOT时指定列提示未识别列名问题咨询
问题原因及解决方法
报错的核心原因是UNPIVOT操作会将你指定的列(Active_30、Active_45等)从列维度转换为行维度的取值,执行UNPIVOT之后的数据集里,已经不存在这些原列名了,所以你在SELECT语句中直接引用它们会提示“未识别名称”。
第一个语句用select *能正常执行,是因为*会自动取UNPIVOT处理后的所有列——也就是原表中未被UNPIVOT的列(比如Primary_Email),加上UNPIVOT生成的两列:Active_Users(存储原列对应的值)和Days(存储原列名作为分类值)。
正确的写法
如果你想保留Primary_Email并完成UNPIVOT,不需要在SELECT里写Active_30等列,直接取UNPIVOT生成的结果列即可:
create or replace table `xxx.users.active users` as select Primary_Email, Active_Users, Days from `xxx-check.users.users` unpivot(Active_Users for Days in (Active_30, Active_45, Active_60, Active_90));
如果需要先筛选源表的特定列再做UNPIVOT,可以用子查询先提取所需列,再对结果执行UNPIVOT:
create or replace table `xxx.users.active users` as select Primary_Email, Active_Users, Days from ( -- 先从源表选出需要的列 select Primary_Email, Active_30, Active_45, Active_60, Active_90 from `xxx-check.users.users` ) unpivot(Active_Users for Days in (Active_30, Active_45, Active_60, Active_90));
内容的提问来源于stack exchange,提问作者user16996079
相关产品推荐
相关产品推荐

