设计背景

(待补充)

相关资料

Row-Level Delete

链接:

  1. https://iceberg.apache.org/spec/#row-level-deletes

在apache iceberg format v1中,iceberg支持了file-level的delete操作。参考Table API 。本质上就是用户传一个文件列表,那么iceberg可以通过txn把这批文件删除掉。

所谓 row-level delete,就是可以删除符合某些特定条件的行数据。这里面主要分为两种场景:
image.png

那么,在v2的目标里面,两种更新的场景都是支持的。批量更新的场景叫做pos-delete设计,cdc写入场景叫做equality-delete设计。

Apache Iceberg Batch Delete

链接:

  1. https://docs.google.com/document/d/1FMKh_SQ6xSUUmoCA8LerTkzIxDUN5JbStQp5Hzot4eo/edit#heading=h.p74qmh3a6ets
  2. https://docs.google.com/document/d/1Pk34C3diOfVCRc-sfxfhXZfzvxwum1Odo-6Jj9mwK38/edit

文档1是描述v2的批量删除/更新的核心文档,来自netflix的初始团队;文档2是来自apple的Apache Iceberg PMC对批量删除/更新做的详细阐述,里面呈现了大量的技术细节和方案评估,值的一读。

但是,如果发现文档1和文档2有偏差时,应该毫不犹豫以文档1为标准。

Apache Iceberg Stream Delete

链接:

  1. https://developer.aliyun.com/article/782120

这个文档是当前最完善地描述流式更新的设计文档。里面详细对比了不同开源的优缺点,以图文的方式详细呈现了核心设计,以及未来可能的优化点。

有的用户非常关注【如何在iceberg中实现增量CDC数据的读取】这个问题。目前Apache Iceberg并没有把解决这个问题作为v2的目标,但是我们在这个 issue: https://github.com/apache/iceberg/issues/360#issuecomment-653532308 详细探讨了如何实现CDC数据的增量读取的方案,感兴趣的同学可以读读。

Sequence Number设计及讨论

链接:

  1. https://github.com/apache/iceberg/pull/588
  2. https://github.com/apache/iceberg/issues/358
  3. https://iceberg.apache.org/spec/#sequence-numbers 社区文档(值得重点阅读)。

在每次txn提交的时候,为iceberg的manifests文件、data文件维护一个自增的sequence number。用来跟踪每个data/delete文件的先后顺序。从而在读取的时候知道,哪些delete文件应该apply到哪些data文件之上。

Iceberg Format v2 遗留 Tasks

链接:https://docs.google.com/document/d/1FyLJyvzcZbfbjwDMEZd6Dj-LYCfrzK1zC-Bkb3OiICc/edit

这个文档罗列了一些v2还没有完全做完的task,这个文档记录的比较早了,所以可能有些过时了,其中部分的task已经完成了。

如何将MySQL binlog通过Flink CDC同步到Apache Iceberg表中

链接:https://github.com/apache/iceberg/pull/2410