You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用com.databricks.spark.sqldw写入Synapse DWH失败是否会回滚操作

Databricks com.databricks.spark.sqldw 连接器写入Synapse的ACID属性与异常处理方案

写入失败的回滚规则

com.databricks.spark.sqldw 连接器默认对append和overwrite两种写入模式都实现了原子性保证,中途失败不会产生残留的部分写入数据:

  • overwrite模式:底层先将全量数据写入Synapse侧临时表,校验数据完整性后通过原子DDL操作替换原表。写入过程任何环节失败都会自动清理临时表,原表数据不会被修改。
  • append模式:全量待写入数据会先同步到临时存储,确认所有分片写入成功后,再通过单事务批量插入目标表。失败后临时数据自动清理,目标表不会新增不完整数据。

仅当你手动修改了默认事务配置、使用低于2.4.0的老旧版本连接器,或临时目录权限配置异常时,才可能出现原子性失效的情况,建议保持官方默认配置。

两类异常的处理逻辑

两种异常的触发场景完全不同,可分别设计处理逻辑:

  • SqlDWConnectorException:为连接器侧抛出的异常,常见原因包括参数配置错误、权限不足、Spark侧资源不足、临时存储访问失败等,这类故障属于非瞬时故障,重试无法解决,不需要加入重试逻辑,直接抛出告警排查配置即可。
  • SqlDWSideException:为Synapse服务端返回的异常,常见原因包括Synapse实例资源耗尽、锁冲突、网络抖动、事务超时等,这类故障多为瞬时故障,可在try-catch块中捕获后加入指数退避重试逻辑,重试3-5次仍失败再触发告警。

兜底方案建议

即便连接器默认满足原子性,核心业务场景仍建议做如下兜底:

  • 写入前先对DataFrame做schema一致性、非法值校验,避免因数据问题触发写入失败
  • 捕获任意异常后,都执行一次临时目录残留文件清理,避免占用存储资源
  • 写入完成后可新增行计数校验,比对源DataFrame和目标表新增行数,确认写入完整性

内容的提问来源于stack exchange,提问作者halfwind22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:27:02