更新时间:2025-09-18 GMT+08:00
并发数据修改冲突
在并发写入Iceberg表时,通常会遇到两类冲突:并发修改数据冲突、乐观锁并发提交冲突。本文介绍并发数据修改冲突。
当出现以下并发作业时,可能会产生数据冲突,从而导致作业失败:
- 对同一分区数据并发执行DML操作,例如对同一分区执行Update/Delete/Insert Overwrite/Insert操作。
- Compaction与DML操作并发执行。
下文描述当前DataArtsFabric SQL支持的Iceberg操作类型可能会遇到的并发数据冲突。
- 当执行Insert Overwrite操作时,可能会出现以下冲突:
- data数据冲突:如果为分区表,在检测数据冲突时,识别到insert overwrite涉及的分区有其他操作提交后产生的新的data文件,则检测为数据冲突发生;如果为非分区表,在检测数据冲突时,识别到有任何其他操作提交后产生的新的data文件,则检测为数据冲突发生。
- delete数据冲突:如果为分区表,在检测数据冲突时,识别到insert overwrite涉及的分区有其他操作删除了data文件、新增了delete文件,则检测为数据冲突发生;如果为非分区表,在检测数据冲突时,识别到有其他操作删除了data文件、新增了delete文件,则检测为数据冲突发生。
- 当执行Delete操作时,可能会出现以下冲突:
data数据冲突:在检测数据冲突时,识别到delete file涉及的data file被其他操作删除了,则检测为数据冲突发生。
本次操作/已提交操作 |
insert |
insert overwrite |
delete |
---|---|---|---|
insert |
无冲突 |
无冲突 |
无冲突 |
insert overwrite |
可能会发生冲突 |
可能会发生冲突 |
可能会发生冲突 |
delete |
无冲突 |
可能会发生冲突 |
无冲突 |

上述并发冲突矩阵是指,当本次操作开始后、提交前,有其他操作开始并完成了提交操作,则本次操作提交时是否会发生冲突。
父主题: 如何处理Iceberg表并发冲突