Iceberg的V2格式
这是我的第102篇原创文章
【V1与V2简介】
Iceberg在V1的格式中定义了,如何使用不可变类型的文件(Parquet、ORC、AVRO)来管理大型分析型的表,包括元数据文件、属性、数据类型、表的模式,分区信息,以及如何写入与读取。
而在V2的格式中,在V1的基础上增加了如何通过这些类型的表实现行级别的更新与删除功能。其最主要的改变是引入了delete file记录需要删除的行数据,这样可以在不重写原有(数据)文件的前提下,实现行数据的更新与删除。
【行级别删除的原理】
1. DeleteFile的表示
在V1版本中,只有DataFile的概念,即记录添加到iceberg中的行数据集。而DeleteFile(删除文件)则记录的是被删除的行的数据集。
删除行数据的方式分为两种:Equality Deletes和Position Deletes。
所谓Equality Deletes就是等值删除,指定一个或多个列的值,其中包含该列值的每一行数据都被视为已删除。例如删除id=10的数据;而Position Deletes为位置删除,删除指定文件中指定位置的行数据。
在V2版本在清单列表文件中(snap-xxx.avro)中增加了一个字段content,以标识哪些文件是DataFile,哪些是DeleteFile。content的值,0表示数据文件、1表示删除数据文件。
对于这两种删除方式,在清单文件(xxx.avro)中,同样通过content字段来表示:0表示新增的文件、1表示Position deletes、2表示Equality deletes。
1)等值删除
在清单文件中,增加equality_ids字段标记进行等值比较的字段的ID集合。
同时,DeleteFile文件记录的内容,则是在删除时,自定义的schema,且至少包含进行等值比较的字段列的值。
2)位置删除
在DeleteData文件中固定列字段为file_path和pos,以及可选的row字段。其中file_path指定需要待删除的行数据所在的数据文件位置,而pos则指定待删除的行记录的起始位置
2. Sequence Nubmer(序号)
为实现行级别的删除而引入了删除文件,那么在数据读取时需要有方式来判断执行的先后顺序,比如对同一条记录,新增、删除、再新增,其先后顺序会直接导致数据的正确性。因此,引入了Sequence Number(序号)来标识数据的执行先后顺序。
序号随快照的产生而生成,并写入快照的元数据文件中(snap-xxx.avro);同时,本次快照所产生的清单文件(xx.avro)会直接继承(使用)快照对应的序号。而本次快照新创建的数据文件和删除文件,序号表示并记录在清单文件中(实际读取到内存后,会被替换为清单文件的序号), 而如果是以"exist"的方式出现在清单文件中(清单文件中status的值为0),则为以产生该文件的快照的序号写入到清单文件中。
【总结】
本文主要从文件格式上讲述了iceberg版本2中如何实现行级别的删除,具体为deletefile的表示。实际上,在读写的逻辑处理上还会有较多的约束和注意点,我们后面的文章再来重点讲述读写流程。
好了,这就是本文的全部内容,如果觉得本文对您有帮助,请点赞+转发,如果觉得有不正确的地方,也可以拍砖指点,最后,欢迎加我微信交流~
本文分享自微信公众号 - 陈猿解码(gh_383bc7486c1a)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Safari 成为全球市场份额排名第二的桌面浏览器
知名流量监测机构 Statcounter 公布了 4 月份全球桌面浏览器市场份额,主要数据如下: Chrome:66.13% Safari:11.87% Edge:11% Firefox:5.65% Opera:3.09% IE:0.55% 可以看到,Chrome 依旧是遥遥领先,苹果的 Safari 则以微弱优势超过 Edge 成为全球市场份额排名第二的桌面浏览器。根据统计,去年同期,Safari 与 Edge 的市占分别为 9.56% 和 9.65%,此时 Safari 稍显落后。不过今年 1 月份以来,Safari 市场份额逐渐上升,拉近了和 Edge 的差距,2 月份 Edge 超过 Safari 的市场份额不到 1%。 虽然 Safari 上月的成绩亮眼,但是否能持续还有待观察。毕竟 Safari 在现代 Web 标准的支持方面落后于竞争对手,迫使 Mac 电脑用户迁移到其他浏览器。Edge 虽然也日渐变得臃肿,导致饱受诟病,但最近有了 Bing Chat 的助攻,似乎能为它扳回一局。
- 下一篇
分布式场景下,如何对外提供易变的服务,打造可靠的注册中心?
摘要:本文讲了关于服务发现的很多干货内容,核心内容为服务发现组件的选择、网关的介绍、 客户端侧如何发给已发现的服务。 本文分享自华为云社区《分布式场景下,如何对外提供易变的服务,打造可靠的注册中心?》,作者:breakDawn。 随着云原生的概念越来越火,服务的架构应该如何发展和演进,成为很多程序员关心的话题。大名鼎鼎的《深入理解java虚拟机》一书作者于21年推出了新作《凤凰架构》,从这本书中可以看到当前时下很多最新的技术或者理念。 本博文将沉淀发布这本书的学习笔记和思考。 如果希望了解更加详细的内容,欢迎购买该书继续详细学习。 从类库到服务 1 服务发现 1.1 服务发现的意义 以前是DNS以及DNS之后的负载均衡承担了服务地址翻译的一部分能力,但是随着微服务的流向 服务的非正常掉线、重启、上下线越来越频繁。zk曾经活跃过,但是过于底层,需要用户自己做很多额外工作。因此专用于服务发现的 eureka出现并被纳入spring cloud。后来就是Consul和nacos继承了eureka的衣钵。 如何在基础设置和网络协议层面,对应用尽可能无感知、方便地实现服务发现是目前服务发现的一个...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启