我想检查 Spark jdbc 是否提供了将自动提交设置为 false 的方法。我正在将数据帧写入已经有一些数据的 postgres 表。如果存在任何写入问题,整个表将被删除,之前的数据也会丢失。即使我在 jdbc 属性中使用 truncate=True 选项,表结构仍保留,但数据会丢失。那么有没有办法将autocommit设置为false,写入成功后手动commit呢?
我正在使用以下 jdbc 连接字符串。
targeturl = f"jdbc:postgresql://{host_tar}:{port_tar}/{db_tar}?currentSchema={schema_tar}"
我们是否需要向此 URL 添加任何其他参数来启动自动提交?
要将 JDBC 连接 URL 中的 autoCommit 属性设置为 false,可以修改 targeturl
targeturl = f"jdbc:postgresql://{host_tar}:{port_tar}/{db_tar}?currentSchema={schema_tar}&autoCommit=false"
这会将 JDBC 连接 URL 中的 autoCommit 属性设置为 false,这将禁用自动提交并允许您在写入成功后手动提交事务。
您可以通过调用 JDBC 连接对象上的 commit 方法来手动提交事务。
df.write \
.format("jdbc") \
.option("url", targeturl) \
.option("dbtable", table_name) \
.option("user", username) \
.option("password", password) \
.mode("append") \
.save()
您可以像这样手动提交交易
connection = DriverManager.getConnection(targeturl, username, password)
connection.commit()