Как сгенерировать искровой запрос усечения sql без Only

Я использую Spark (3.0.0_preview) и читаю / пишу из / в GreenPlum (версия 5.24). Greenplum версии 5.24 не поддерживает команду "усечь только $ table_name".

В Spark 3.0.0_preview и jdbcdriver (org.postgresql "%" postgresql "%" 42.2.5) Spark генерирует команду "усечь только $ table_name".

 df.write.format("jdbc").option("url", "jdbc:postgresql://test:5432/sample")
.option("user", "sample")
.option("password", "sample")
.option("dbtable", "test.employer")
.option("truncate", true) // **Genearte truncate table only**
.mode(SaveMode.Overwrite)
.save();

Я хочу создать команду усечения без опции ТОЛЬКО. Как единственный вариант, Greenplum V5.24 не поддерживает


person JDev    schedule 23.12.2019    source источник
comment
Greenplum не усекает зависимые таблицы. RI также не применяется в Greenplum. Итак, вам не нужно только.   -  person Jon Roberts    schedule 23.12.2019
comment
@Jon Roberts, мне это не нужно, но Spark создает запрос усечения с параметром Only. Согласно источнику, диалект PostgreSQL Spark может генерировать только TRUNCATE ONLY ... или TRUNCATE ONLY ... CASCADE   -  person JDev    schedule 23.12.2019


Ответы (1)


Как упоминалось @mazaneicha, диалект PostgreSQL Spark может генерировать ТОЛЬКО TRUNCATE

Чтобы это работало для меня, я использую Scala для усечения моей таблицы. Не очень хорошее исправление, но будет работать, пока мы не обновимся до GreenPlum 6, который поддерживает ТОЛЬКО TRUNCATE TABLE.

 truncate(""test.employer", "jdbc:postgresql://test:5432/sample","sample","sample" )
 df.write.format("jdbc").option("url", "jdbc:postgresql://test:5432/sample")
 .option("user", "sample")
 .option("password", "sample")
 .option("dbtable", "test.employer")
 .mode(SaveMode.Append)
 .save();

 def truncate(tableName: String, jdbcUrl: String, username: String, password: 
 String) = {
 val connection = DriverManager.getConnection(jdbcUrl, username, password)
 connection.setAutoCommit(true)
 val statement = connection.createStatement()
 statement.execute(s"TRUNCATE TABLE $tableName")
 }
person JDev    schedule 23.12.2019