Azure Databricks中带WITH语句的SQL下推查询无法执行
解决Azure Databricks中JDBC下推带WITH语句的SQL查询语法错误问题
你遇到的语法错误源于JDBC子查询格式不符合目标数据库的语法规范,正确写法需要调整CTE的结构并按要求包裹子查询:
正确的CTE写法
sql = """ (with r as ( select max(load_id) as load_id, table_name from LOG.TABLE_AND_FILE_ACQUISITION_MONITORING group by TABLE_NAME ) select * from r) as t """
替代方案:嵌套子查询(若CTE仍有兼容问题)
如果目标数据库对子查询中的CTE支持有限,可以改用嵌套子查询形式:
sql = """ (select * from ( select max(load_id) as load_id, table_name from LOG.TABLE_AND_FILE_ACQUISITION_MONITORING group by TABLE_NAME ) as r) as t """
核心注意点
spark.read.jdbc的table参数要求子查询必须用括号完整包裹,且必须为整个结果集指定别名(如as t,部分数据库可省略as,但添加后兼容性更强)- CTE定义后直接跟随查询语句,无需额外为SELECT部分添加括号
- 从错误提示判断你连接的大概率是SQL Server,需确保数据库版本支持CTE语法
内容的提问来源于stack exchange,提问作者Gael Bosc
相关产品推荐
相关产品推荐

