SparkSQL查询报anot_pda_cli引用歧义 可选值完全相同无法解决
问题根本原因
报错核心原因是
temp_safras_qlt_aux临时视图/表本身存在两个完全重名的anot_pda_cli列,而非跨表字段歧义。因此即使你添加表前缀也无法解决,因为两个重名列归属同一个表,Spark元数据无法区分相同前缀+相同名称的两个字段。
排查步骤
- 先打印临时表的结构确认重名列存在:
temp_safras_qlt_aux.printSchema()
执行后你会看到输出中有两个命名为anot_pda_cli的字段。
- 回溯
temp_safras_qlt_aux的建表逻辑,重名列通常来自两种场景:- 建表时多表JOIN直接用
SELECT *,两个关联表都有anot_pda_cli字段且没有重命名 - 建表的SELECT语句中重复写了两次
anot_pda_cli字段且未指定别名
- 建表时多表JOIN直接用
解决方案
重建temp_safras_qlt_aux,保证所有字段名唯一:
- 如果是JOIN场景产生的重名,给同名字段指定不同别名,示例:
CREATE OR REPLACE TEMP VIEW temp_safras_qlt_aux AS SELECT a.dt_mvtc, a.cd_cli, a.cd_gr_mdld_prd_pd, a.anot_pda_cli AS anot_pda_cli_a, -- 给左表字段加别名 b.anot_pda_cli AS anot_pda_cli_b, -- 给右表字段加别名 a.TMP_QUALI, b.ANOT_PDA_PRD, b.MAX_VLR_PDA FROM 表1 a JOIN 表2 b ON a.关联键 = b.关联键
- 确认业务需要使用的是哪一个
anot_pda_cli,后续查询时使用对应的别名即可,不会再出现歧义报错。
内容的提问来源于stack exchange,提问作者Silvio sjsj
相关产品推荐
相关产品推荐

