apache-spark - JDBC 连接处带有空格的表名会出现错误

标签 apache-spark jdbc pyspark aws-glue

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

相关文章:

scala - 如何在 Spark Scala 中使用 mapPartitions?

sql - PySpark/Spark 窗口函数第一期/最后一期

java - 使用 ThreadLocal 进行 JDBC 连接是一个好习惯吗?

apache-spark - EMR PySpark : LZO Codec not found

python - Pyspark RDD以不同的方式聚合不同的值字段

apache-spark - pyspark 数据框中的全外连接

apache-spark - 今天使用 MapReduce 代替 Spark 有什么好处?

ubuntu - spark start-slave 未连接到主控

java - Spring 无法加载 JDBC 驱动程序类错误

java - @NamedQuery 将表/列名称更改为大写导致异常