一、概述

Iceberg 每次快照都产生了大量的文件。包括 Manifest 文件和数据文件 DataFile,以及快照文件和上述这些文件的校验文件。当存在删除更新操作,Manifest 文件和数据文件又拆分出来删除类型的对应文件 DeleteFile,当快照执行场率过高且每次操作数据量较小时,会产生大量的小文件,从而导致系统性能减弱,为解决这类问题,Iceberg 也提供了相应的文件合并、重写等操作来减轻这类问题。

二、设计

2.1. 文件重写

图中在两个事务(snap-1snap-2 )中分别增加 1 条记录,生成 2 个 manifest 文件和 2 个 datafile 文件,希望这两条记录位于同一个文件,此时需要在 snap-3 中将数据文件 datafile-1datafile-2 删除,为了能够保证之前的快照数据不被破坏,在 snap-3 中增加指向这两个文件的移除指针。
下图展示了执行 snap-3 后的元数据内容,manifest-3manifest-4 的 status-2 表示删除状态。manifest-5 指向的数据文

2.2. Manifest 合并

Iceberg 提供了合并 Manifest 文件的功能,可以通过如下两种方式来开启自动合并~