Spark-jdbc 中的准备语句

Cas*_*sie 5 sql-server apache-spark spark-jdbc

我正在尝试使用具有指定偏移量的 Spark jdbc 从 MSSQL 数据库读取数据。因此,应该仅在指定的时间戳(即该偏移量)之后加载数据。我尝试通过在 jdbc 配置中提供查询来实现它,但是,我没有找到使用参数化值创建准备好的语句的可能性。在这种情况下,我想参数化一个偏移量,该偏移量在每次应用程序启动后都会改变。如何使用 jdbc 选项来实现它?

所有数据库配置都位于 application.conf 文件中。这是我从数据库读取的方式:

def jdbcOptions(query: String) = Map[String,String](
    "driver" -> config.getString("sqlserver.db.driver"),
    "url" -> config.getString("sqlserver.db.url"),
    "dbtable" -> s"(select * from TestAllData where update_database_time >= '2019-03-19 12:30:00.003') as subq,
    "user" -> config.getString("sqlserver.db.user"),
    "password" -> config.getString("sqlserver.db.password"),
    "customSchema" -> config.getString("sqlserver.db.custom_schema")
  )

    val testDataDF = sparkSession
      .read
      .format("jdbc")
      .options(jdbcOptions())
      .load()
Run Code Online (Sandbox Code Playgroud)

相反,查询应该看起来几乎像这样:

s"(select * from TestAllData where update_database_time >= $tmstp) as subq
Run Code Online (Sandbox Code Playgroud)

Cas*_*sie 2

Spark-jdbc中没有prepared语句,所以除了在String中设置参数之外没有其他方法:

val dayColumn = "update_database_time"
val dayValue = "2019-03-19 12:30:00.003"

s"(select * from TestAllData where $dayColumn > '$dayValue') as subq"
Run Code Online (Sandbox Code Playgroud)