数据湖-Iceberg-源码学习-Kernal-Table-数据操作-删除
一、概述
Iceberg 中删除操作通常分为两个步骤: 删除表的数据和元数据。
删除表的数据
Iceberg 删除表的数据文件使用 DeleteFiles 类,它提供了一组方法用于删除表中的数据文件。
删除表的元数据
删除表的元数据通过 Catalog 类实现, Catalog 提供了一组方法用于删除 Iceberg 表和相关元数据
二、设计
在 v0.10.0
之后,Iceberg 除了存储数据的文件 DataFile 以外,还引入了一种新的文件 DeleteFile。
DeleteFile 里面保存的是 “哪一条数据被删除” 的记录。当 Iceberg 提交一次写入(也就是创建一个新的 snapshot) 时,如果这次写入操作里删除了过去的某条记录,Iceberg 并不会直接删除 DataFile 里面的数据。
在 HDFS 和对象存储上,无法修改一个已经存在的文件
所以 Iceberg 把这条记录的 id 写入一个 DeleteFile 里面。这个 DeleteFile 也是创建出的 snapshot 的一部分,被记录在 snapshot 的文件列表里面。
Iceberg 在读取这个 snapshot 的数据时,会同时读取 DataFile 和 DeleteFile 的数据,然后把两边的数据合并,过滤掉同时出现在 DataFile 和DeleteFile 里的数据,实现了 delete 的效果。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joker!
评论
ValineTwikoo