Spark读取SQL Server保留字表User触发语法错误如何解决
问题原因
报错是因为User属于SQL Server的保留关键字,直接作为标识符使用会触发语法校验错误。SQL Server要求保留关键字作为表名、列名等标识符使用时,必须用特殊符号包裹才能被正确识别。
解决方案
将dbtable配置项中的表名User用**方括号[]**包裹即可,方括号是SQL Server中处理保留关键字标识符的通用兼容方案,无需额外调整数据库参数。
修正后的代码
attachmentDf = (spark.read .format("com.microsoft.sqlserver.jdbc.spark") .option("url", azure_sql_url) .option("databaseName", database_name) .option("user", sql_user_name) .option("password", sql_password) .option("encrypt", "true") .option("hostNameInCertificate", "*.database.windows.net") .option("dbtable", "dbo.[User]").load() )
扩展说明
- 如果schema名也为保留关键字,需要同步用方括号包裹,格式为
[schema名].[表名] - 若使用自定义查询作为
dbtable参数,查询语句内部的保留关键字也需要按该规则处理,示例:.option("dbtable", "(SELECT id, name FROM dbo.[User] WHERE status = 1) AS user_tmp") - 所有SQL Server保留关键字(如
Order、Role、Group等)作为标识符使用时,都可以用该方法解决语法报错问题。
内容的提问来源于stack exchange,提问作者Lasse
相关产品推荐
相关产品推荐

