Подготовлено заявление в spark-jdbc - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь прочитать данные из базы данных MSSQL, используя Spark jdbc с указанным смещением. Таким образом, данные должны быть загружены только после указанной временной отметки, которая будет смещением. Я попытался реализовать это, предоставив запрос в конфигурациях 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()

Вместо этого запрос должен выглядеть примерно так:

s"(select * from TestAllData where update_database_time >= $tmstp) as subq

1 Ответ

0 голосов
/ 12 мая 2019

В Spark-jdbc нет подготовленного оператора, поэтому нет других способов, кроме установки параметров в строке:

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

s"(select * from TestAllData where $dayColumn > '$dayValue') as subq"
...