将T-SQL重构为Databricks SQL时子查询rn字段解析失败求助
问题解决:Databricks SQL无法解析子查询中的rn字段
原T-SQL语句在SQL Server中执行正常,但在Databricks SQL中报错AnalysisException: cannot resolve 'rn',核心原因是Databricks SQL遵循标准SQL语法,不支持SQL Server特有的列名=表达式的别名定义方式。
原错误SQL:
SELECT * FROM (select rn = ROW_NUMBER() OVER (PARTITION BY ID order by ID), * from db.myview c ) c where c.rn = 1
修改后的正确SQL:
SELECT * FROM (select ROW_NUMBER() OVER (PARTITION BY ID order by ID) AS rn, * from db.myview c ) c where c.rn = 1
关键说明
- Databricks SQL(基于Spark SQL)要求使用
AS 列名的标准语法定义列别名,不支持列名=表达式这种非标准写法。 - 调整别名定义方式后,子查询中的
rn字段就能被正常识别,过滤条件c.rn = 1也可以正常执行。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

