0
点赞
收藏
分享

微信扫一扫

Hudi 的索引机制和类型

color_小浣熊 2022-02-26 阅读 116

Hudi 的索引

Hudi 通过索引机制把 hoodie key (record key + 分区路径) 映射一个 file id 来提供高效的 Upsert 操作。record key 和数据文件的 group/file id 形成的映射关系从数据的第一个版本开始就不会改变了。简单来说,一条数据的所有版本都可以通过同一个 file id 找到。

对于 Copy-On-Write 的表来说,索引可以避免关联整张表来决定哪些文件需要重写,以加快 upsert/delete 的操作。

对于 Merge-On-Read 的表来说,索引可以限定 base 文件需要合并的数据条数,并且只需要对有更新的记录对应的 base 文件进行合并。

相反,如果没有索引机制的话(例如 Apache Hive ACID),需要所有的base 件合并 update/delete的数据,会造成很大的性能损失和资源占用。

在这里插入图片描述黄色代表更新文件,白色代表 base 文件,图片来源于官网

Hudi 索引的类型

Hudi 当前支持的索引类型:

  • Bloom 索引(默认):对 record key 创建布隆过滤器
  • Simple 索引:对update/delete 操作和存储中提取出来的key,执行轻量级的 join
  • HBase 索引 :通过外部的 HBase存储来管理索引

也可以通过扩展公开的 API 来实现个性化的索引。用户可以通过 hoodie.index.type 来配置索引的类型。

Global index 和 Non Global index

Global index(全局索引): Global index 要求保证 key 在表中所有分区的都是唯一的,保证一个给定的 record key 在表中只能找能唯一的一条数据。Global index 提供了强唯一性保证,但是随着表增大,update/delete 操作损失的性能越高,因此只适用于小表。

Non Global index(非全局索引):非全局索引只能保证数据在分区的唯一性。但是通过对 Hudi 索引的学习,不难了解到 key 与 file id 存在映射关系,同一个 key 的数据(包括 updete/delete)必然会存在同一个分区里面。这种实现方式提供更好的索引查找性能,适用于大表。

Bloom 索引 和 Simple 索引 支持 Global 和 Non Global 选项。
HBase 索引只支持 Global。

举报

相关推荐

0 条评论