遇到好多人说在调用Iceberg rewrite时会报以下错误:org.apache.iceberg.exceptions.ValidationException: Cannot commit, found new delete for replaced data file
咂一看信息像是对于要删除的DataFile,有新的DeleteFile作用于它,不应该直接删除DataFile。但是我们很明确并没有DeleteFile作用于其上。
排查后发现问题所在,针对Position-delete File是否作用于DataFile的判断如下。可以看出是根据DeleteFile的metrics中的lowBounds和upperBounds来确定DataFile的文件路径是否在该DeleteFile
但是在配置中metrics的默认长度是16,当我们仓库的路径较长时,所存的文件路径不是完整的路径,那么metrics里面的信息就失去了作用,就会出现判断出错的情况。
因此我们可以改变表的这个属性,以达到保存的metrics信息完整,下面有两种方式
alter table table set tblproperties ( 'write.metadata.metrics.default'='full' );//修改所有metrics的长度都不作限制
alter table table set tblproperties ( 'write.metadata.metrics.column.file_path'='full' );//只针对file_path这个统计值不做限制