Hudi表类型和查询类型

发布时间 2023-05-30 12:46:01作者: -见

官方参考

Table & Query Types

查询类型

  • 快照查询(Snapshot Queries)

查询最新的数据。

  • 增量查询(Incremental Queries)

查询指定时间范围内新增或修改的数据。

  • 读优化查询(Read Optimized Queries)

仅查询 Parquet 格式的基础文件中的数据,为 MOR 表特有。

表类型 支持的查询类型
COW 快照查询、增量查询
MOR 快照查询、增量查询、读优化查询
  • 快照查询和读优化查询对比
对比项 快照查询 读优化查询
数据延迟
查询延迟 高(需合并基础文件和增量的日志文件) 低(只涉及基础文件)

表类型

对比项 COW MOR
数据延迟
查询延迟
更新开销(I/O) 高(重写整个 parquet 文件) 低(追加写增量日志文件)
Parquet 文件大小 小(高更新开销) 大(低更新开销)
写放大 低(依赖压缩策略)

文件类型

  • 基础文件(basefiles)

基础文件为列存储格式(parquet)的文件,可类比为 MySQL innodb 引擎的 idb 数据文件或者 Redis 的 RDB 文件(Redis 的 RDB 未含所有数据,MOR 表的也是,但 COW 表的包含所有数据)。

  • 日志文件(logfiles)

日志文件是增量的(delta)只追加写的文件,可类比为 MySQL 的 binlog 文件或者 Redis 的 AOF 文件(实际为全量数据),为 MOR 表独有,为行存储格式(avro)文件。

COW 表 MOR 表
基础文件 包含所有数据 仅包含压缩(Compaction)后的数据
日志文件 没有日志文件 每次新写入的都放在日志文件,通过压缩合并为基础文件,压缩可同步或者异步进行,或者周期性的进行

压缩(Compaction)

Hudi 的压缩是为解决日志文件过多问题,通过压缩合并日志文件,减少日志文件数量。压缩分为调度(schedule)和执行(run)两个步骤,压缩的方式分为同步和异步两种。

设置 hoodie.compact.inline 为 true 启用同步压缩,设置为 false 启用异步压缩,默认为 false 。hoodie.compact.inline.max.delta.commits 控制最近一次压缩后新产生多少个 commits 后启动压缩,而 hoodie.compact.inline.max.delta.seconds 则控制最近一次压缩后多久启动压缩,压缩策略通过 hoodie.compaction.strategy 指定。

设置 hoodie.compact.schedule.inline 为 true(默认为 false),则可在每次写完成后决定是否触发压缩。

设置 hoodie.compact.inline.trigger.strategy 控制压缩触发策略。