如何在没有 Only 的情况下生成 spark sql 截断查询
Posted
技术标签:
【中文标题】如何在没有 Only 的情况下生成 spark sql 截断查询【英文标题】:How to generate a spark sql truncate query without Only 【发布时间】:2019-12-23 06:56:57 【问题描述】:我正在使用 Spark(3.0.0_preview) 并从/向 GreenPlum(5.24 版)读取/写入。 Greenplum 5.24 版不支持“truncate table only $table_name”命令。
使用 Spark 3.0.0_preview 和 jdbcdriver(org.postgresql" % "postgresql" % "42.2.5),Spark 生成的命令是“truncate table only $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();
我想生成不带 ONLY 选项的截断命令。由于 Greenplum V5.24 不支持唯一的选项
【问题讨论】:
Greenplum 不会截断“依赖”表。 RI 也没有在 Greenplum 中强制执行。因此,您不需要“仅”。 @Jon Roberts,我不需要它,但 Spark 正在使用 Only 选项创建截断查询。根据消息来源,Spark 的 PostgreSQL 方言只能生成 TRUNCATE ONLY ... 或 TRUNCATE ONLY ... CASCADE 【参考方案1】:正如@mazaneicha 提到的,Spark 的 PostgreSQL 方言只能生成 TRUNCATE ONLY
为了让这对我有用,我正在使用 Scala 截断我的表格。这不是一个好的修复方法,但在我们升级到仅支持 TRUNCATE TABLE 的 GreenPlum 6 之前可以使用
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")
【讨论】:
以上是关于如何在没有 Only 的情况下生成 spark sql 截断查询的主要内容,如果未能解决你的问题,请参考以下文章
apache spark可以在没有hadoop的情况下运行吗?
如何在没有 Spark-Shell 的情况下从 AWS 控制台运行 Spark jar 文件
如何在没有 SparkSQL 的情况下使用 fastxml 解析 Spark 中的 JSON?
如何在没有数据库连接的情况下从 dbplyr 生成 SQL?