在 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]"
我正在尝试使用 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]"