
# 如何处理并发提交数据冲突
在并发写入Iceberg表时，通常会遇到两类冲突：并发提交数据冲突、乐观锁并发提交元数据冲突。
本文介绍并发提交数据冲突。
当出现以下并发作业时，可能会产生数据冲突，从而导致作业失败：
- 对同一分区数据并发执行DML操作，例如对同一分区执行Update/Delete/Insert Overwrite/Insert操作。
- Compaction与DML操作并发执行。
下文描述当前各引擎支持的Iceberg操作类型可能会遇到的并发数据冲突。
- 当执行Insert Overwrite操作时，可能会出现以下冲突：
  - data数据冲突：如果为分区表，在检测数据冲突时，识别到insert overwrite涉及的分区有其他操作提交后产生的新的data文件，则检测为数据冲突发生；如果为非分区表，在检测数据冲突时，识别到有任何其他操作提交后产生的新的data文件，则检测为数据冲突发生。
  
  - delete数据冲突：如果为分区表，在检测数据冲突时，识别到insert overwrite涉及的分区有其他操作删除了data文件、新增了delete文件，则检测为数据冲突发生；如果为非分区表，在检测数据冲突时，识别到有其他操作删除了data文件、新增了delete文件，则检测为数据冲突发生。
   
- 当执行Delete操作时，可能会出现以下冲突： data数据冲突：在检测数据冲突时，识别到delete file涉及的data file被其他操作删除了，则检测为数据冲突发生。
  
- 当执行Update操作时，可能会出现以下冲突：
  - data数据冲突：在检测数据冲突时，识别到delete file涉及的data file被其他操作删除了，则检测为数据冲突发生。
  
  - delete数据冲突：在检测数据冲突时，识别到有其他操作对update操作涉及的分区产生了新的delete file，则检测为数据冲突发生。
   
表1并发冲突矩阵 
| 本次操作/已提交操作       | insert  | insert overwrite | delete  |
|:---|:---|:---|:---|
| insert           | 无冲突     | 无冲突              | 无冲突     |
| insert overwrite | 可能会发生冲突 | 可能会发生冲突          | 可能会发生冲突 |
| delete           | 无冲突     | 可能会发生冲突          | 无冲突     |
| update           | 无冲突     | 可能会发生冲突          | 可能会发生冲突 |
   
![](https://support.huaweicloud.com/devg-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
上述并发冲突矩阵是指，当本次操作开始后、提交前，有其他操作开始并完成了提交操作，则本次操作提交时是否会发生冲突。
