我正在使用 Spark JDBC 将一些数据从 Microsoft SQL 服务器读取到数据框中。当表不存在时(例如,它被意外删除)我得到一个异常:com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'TestAllData'。
我想创建一些机制来首先检查表是否存在,然后才读取数据。有没有办法使用 Spark JDBC 做到这一点?因为我尝试使用来自 Ms sql server 的 if exists 构造,但它不适用于使用 Spark 进行查询。
目前,我用于读取数据的代码如下所示:
def getDataQuery() = {
s"(select * from TestData) as subq"
}
def jdbcOptions(dataQuery: String, partitionColumn: String, lowerBound: String, upperBound: String, numPartitions: String) = Map[String,String](
"driver" -> config.getString("sqlserver.db.driver"),
"url" -> config.getString("sqlserver.db.url"),
"user" -> config.getString("sqlserver.db.user"),
"password" -> config.getString("sqlserver.db.password"),
"customSchema" -> config.getString("sqlserver.db.custom_schema"),
"dbtable" -> dataQuery,
"partitionColumn" -> partitionColumn,
"lowerBound" -> lowerBound,
"upperBound" -> upperBound,
"numPartitions" -> numPartitions
)
val dataDF = sparkSession
.read
.format("jdbc")
.options(jdbcOptions(getDataQuery()))
.load()