Amazon Athena中3个UNION查询添加行号报错,请求技术协助
问题解决:Athena UNION + row_number 报错修复
你的查询报错主要有3个原因,给你一步步修正:
错误点分析
- 第三个子查询末尾的
;多余了,整个UNION查询是一个完整语句,中间不能加分号 row_number()没起别名,你后面用row_num找不到这个列- 第三个查询用
select *会把生成的行号列也包含进去,和前两个查询的3列(id/name/address)列数不匹配,UNION要求所有子查询列数、类型完全一致
修正后的完整语句
( select id, name, address from table1 ) UNION ( select id, name, address from table2 ) UNION ( select id, name, address from ( select id, name, address, row_number() over (partition by id order by id) as rn -- 给行号列起别名 from table3 ) as t where t.rn = 1 -- 用别名筛选 )
额外说明
- 关于你说的Athena不能直接用
distinct:其实Athena支持distinct,如果只是想从table3取id/name/address的唯一值,也可以简化成select distinct id, name, address from table3,和用row_number的效果一致(如果同一个id对应的name/address都相同的话)。 - 如果你用row_number是因为同一个id可能对应不同的name/address,需要保留其中一行,建议把
order by id改成有实际意义的列,比如order by create_time desc来保留最新的一行,不然按id排序选出来的行是随机的。
内容的提问来源于stack exchange,提问作者joe123
相关产品推荐
相关产品推荐

