Hudi 的索引机制和类型

14 篇文章 1 订阅

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。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修破立生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值