更新时间: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被其他操作删除了,则检测为数据冲突发生。

表1 并发冲突矩阵

本次操作/已提交操作

insert

insert overwrite

delete

insert

无冲突

无冲突

无冲突

insert overwrite

可能会发生冲突

可能会发生冲突

可能会发生冲突

delete

无冲突

可能会发生冲突

无冲突

上述并发冲突矩阵是指,当本次操作开始后、提交前,有其他操作开始并完成了提交操作,则本次操作提交时是否会发生冲突。