我正在尝试使用 pyspark 脚本在 AWS Glue 中建立连接。 JDBC 连接指向 Azure 云中的 Microsoft SQL Server。
当我尝试输入连接字符串时,它会一直工作,直到到达它应该读取的表为止。这主要是因为表名中存在空格。您对如何在这里编写语法有任何提示吗?
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 Server 中引用对象名称是通过将其括在方括号中来完成的(或者,尽管这可能取决于 session 配置,但使用双引号)。
请记住,dbo
是架构,而 122 SampleCompany DE$Contract Header
是表名称。 Schema和表名需要单独引用,不能作为一个单元。
因此,尝试传递“dbo.[122 SampleCompany DE$Contract Header]”
关于apache-spark - JDBC 连接处带有空格的表名会出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65634637/