在 JDBC 连接处有空格的表名给出错误

Tablename with spaces at JDBC connection gives error

我正在尝试使用 pyspark 脚本在 AWS Glue 中建立连接。 JDBC 连接指向 Azure Cloud 中的 Microsoft SQL 服务器。

当我尝试输入连接字符串时,它一直有效,直到到达它应该读取的 table。这主要是因为 table 名称中的空格。您对如何在此处编写语法有任何提示吗?

source_df = sparksession.read.format("jdbc").option("url","jdbc:sqlserver://00.000.00.00:1433;databaseName=Sample").option("dbtable", "dbo.122 SampleCompany DE$Contract Header").option("user", "sampleuser").option("password", "sampL3p4ssw0rd").load()

当你执行这个时,它总是抛出错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o69.load. : com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '.122'

你知道如何解决这个问题吗?

鉴于存在空格(可能还有美元符号,以及标识符以数字开头的事实),您需要引用对象名称。在 SQL 服务器中引用对象名称是通过将其括在方括号中来完成的(或者,尽管这可能取决于会话配置,双引号)。

请记住,dbo 是架构,而 122 SampleCompany DE$Contract Header 是 table 名称。 Schema 和 table name 需要单独引用,不能作为一个单位引用。

所以,尝试通过 "dbo.[122 SampleCompany DE$Contract Header]"