表格式比较 - 仅追加表和增量读取 - 杰克·范莱特利

  • Main观点:介绍了多种表格式(Iceberg、Delta Lake、Apache Hudi、Apache Paimon)对追加表和增量读取的支持,包括其原理、代码实现及性能考虑等,并对不同表格式在流式处理方面进行了比较和总结。
  • 关键信息

    • 追加表按提交到增量/快照日志的顺序物理排序,不同表格式有不同的日志记录方式(Delta Lake 和 Apache Hudi 用增量日志,Apache Iceberg 和 Apache Paimon 用快照日志)。
    • 增量读取允许计算引擎执行重复查询,返回自上次查询执行以来的新记录或更改,有多种类型,如追加表增量读取等。
    • 各表格式在计算引擎对追加表的增量读取支持上有所不同,如 Apache Flink 示例,不同表格式在多写者支持、作为有序流使用等方面各具特点。
    • 性能方面,避免昂贵的数据冲突对多个写者的部署很关键,Delta 和 Hudi 基于增量日志的流处理能力与 Paimon 基于快照日志的设计有所不同,且尚未进行性能基准测试。
  • 重要细节

    • Apache Iceberg:Append 操作只能添加数据文件,通过读取快照日志中添加状态的清单条目来进行增量读取,支持多写者,可在单写多读拓扑中建模全序流,在多写多读拓扑中借助 bucket 分区变换可建模分区流,代码中通过特定 API 和类来实现增量读取。
    • Delta Lake:Append-only 表通过插入命令添加数据文件,读取增量数据通过读取增量日志中的 AddFile 动作,支持多写者,单写多读拓扑中应作为有序流,但创建部分有序分区流的构建块不足,代码中通过特定方法和类来实现增量读取。
    • Apache Hudi:分为 COW 和 MOR 表,MOR 表更高效,通过主 key 映射到桶和文件组来管理数据,多写者时存在数据冲突问题,现有乐观并发控制在某些情况下会导致冲突,代码中通过特定类来实现增量读取。
    • Apache Paimon:采用基于读取合并的设计,有主键表和追加表,追加表通过尾随和快照日志获取添加的文件,有追加表和追加队列两种类型,追加队列提供类似 Kafka 主题的部分排序,代码中通过特定接口和类来实现增量读取。
阅读 21
0 条评论