在Azure Databricks中读取启用CDF的Delta表时Spark SQL报错求助
问题解决:Azure Databricks中table_changes函数解析表名失败
错误原因
你的代码生成的SQL语句里,table_changes函数的表名参数没有被引号包裹,Spark将db.t1识别为未解析的列/参数,而非合法的表标识符。实际生成的SQL是:
SELECT MAX(_commit_version) as max_version FROM table_changes(db.t1,0)
db.t1缺少引号,不符合table_changes函数对表名参数的格式要求(需为字符串形式)。
修正方案
有两种可行的修正方式:
方式1:给变量添加引号
直接在表名变量中包含单引号,确保插入SQL后参数为合法字符串:
tab = "'db.t1'" df = spark.sql(f"SELECT MAX(_commit_version) as max_version FROM table_changes({tab},0)") df.first()["max_version"]
方式2:在f-string中包裹变量
格式化SQL时,给tab变量外层加上单引号,保证生成的SQL参数格式正确:
tab = 'db.t1' df = spark.sql(f"SELECT MAX(_commit_version) as max_version FROM table_changes('{tab}',0)") df.first()["max_version"]
验证说明
修正后生成的SQL会变为:
SELECT MAX(_commit_version) as max_version FROM table_changes('db.t1',0)
此时table_changes能正确识别'db.t1'为目标表,可正常查询变更历史中的最大提交版本。
内容的提问来源于stack exchange,提问作者Surender Raja
相关产品推荐
相关产品推荐

