订阅更新

Iceberg Position Delete 和 Equality Delete 有什么区别?

面试问 210 约 3 分钟读完

本文目录
  1. 面试怎么回答
  2. Position Delete 绑定物理位置
  3. Equality Delete 按字段值匹配
  4. 两者的成本方向相反
  5. Sequence Number 决定作用范围
  6. 维护任务最终要合并删除
  7. Iceberg V3 还要认识 Deletion Vector
  8. 参考资料

面试怎么回答

Position Delete 用文件路径和行位置精确标记删除,通常需要写入端先定位目标行,读取应用更直接;Equality Delete 按主键等字段值删除,不必先找文件,适合 CDC,但读取需要做等值匹配,积累后读放大更明显。两者都受分区和 sequence number 约束,并需要定期重写数据文件合并删除。Iceberg V3 还引入了 Deletion Vector。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

同样是删除 id=100 的一行,Iceberg 可以记住“某个文件的第 57 行已删除”,也可以记住“所有 id=100 的旧记录都删除”。

这就是 Position Delete 与 Equality Delete:一个绑定物理位置,一个按字段值匹配,写入成本、读取成本和适用场景都不同。

Position Delete 按文件路径和行位置精确删除,Equality Delete 按字段值匹配旧数据;前者读前要定位行,后者写入更灵活但读取匹配更重,V3 还引入 Deletion Vector。

Position Delete 绑定物理位置

它记录 data_file_path 和 row_position,精确指出哪个数据文件的哪一行不可见。适合写任务已经扫描到目标文件和行位置的 Copy-on-Write 或 Merge-on-Read 更新。读取时只需把对应位置过滤掉。

Equality Delete 按字段值匹配

它保存一个或多个 equality field,例如 id=100。读取旧数据文件时,只要这些字段值相等,就视为被删除。写入端不必先知道记录具体在哪个文件,适合 CDC 按业务主键到达的场景。

Position Delete 与 Equality Delete

两者的成本方向相反

Position Delete 在写入前通常需要定位目标行,写成本更高但应用删除时更直接;Equality Delete 写起来轻,但读取需要按等值字段构建匹配并对候选数据文件应用,删除文件多或基数大时会增加读放大。

Sequence Number 决定作用范围

Delete File 不是无条件删除所有历史和未来行。规划器会根据数据与删除文件的 sequence number、分区和值域统计,判断它应作用于哪些旧 Data File。否则同一个主键后来重新插入,也可能被旧删除误伤。

Delete File 的完整生命周期

维护任务最终要合并删除

持续更新会积累 Delete File,让每次查询都承担 Merge-on-Read 成本。需要定期 Rewrite Data Files,把删除结果物化进新的 Data File,并清理不再引用的 Delete File。只合并小数据文件,不一定能解决删除文件读放大。

Iceberg V3 还要认识 Deletion Vector

最新规范中,Deletion Vector 用位图记录单个 Data File 的删除位置,执行时比传统 Position Delete File 更紧凑;V3 中 Position Delete File 已被弃用,但已有文件仍可读取。面试回答最好先确认表格式版本与引擎支持。

参考资料

刷题进度保存在当前浏览器