Hudi的Record Key是全局唯一的吗?
答案:不是!
默认情况下,Record Key只保证在同一分区内是唯一的。如果我们需要让Record Key变成全局唯一主键,按官方文档的说法:
Record keys uniquely identify a record/row within each partition. If one wants to have a global uniqueness, there are two options. You could either make the dataset non-partitioned, or, you can leverage Global indexes to ensure record keys are unique irrespective of the partition path.
有两种做法。
方法一:不对表进行分区(这是显而易见的)
方法二:将Hudi的索引类型改为Global类型(Hudi默认的索引类型是BLOOM),例如GLOBAL_BLOOM,即:hoodie.index.type=GLOBAL_BLOOM
对于方法二,我们需要做一些解释,解释前需要先了解一下Hudi的Index是怎样的一种机制。简单地说:Hudi的Index维护的是:一个Record Key + 一个partition path(可选,非必须) 到 一个Hudi Dataset文件的映射关系
,由此就不难理解Index的作用了:当一条记录需要被更新和删除时,Hudi就是利用Index迅速定位到该记录所在的文件进行操作(如果是COW表,会以针拷贝此文件中未变更的数据再与变更数据合并形成新文件,如果是MOR表,会围绕此文件追加日志)。
从类型上分,Hudi目前有三种Index:Bloom Index (default)
,Simple Index
,HBase Index
,而从索引的全局性上,则分为Global Index
和Non Global Index
,其区别就是Global Index
的索引是全局唯一的,而Non Global Index
的索引只在分区内唯一,联系刚才提到的Index解构就不难推断,对于Global Index
来说,它不包含partition path,所以是全局唯一的,而Non Global Index
包含了partition path,所以当同一条数据换了分区列重新写入,还是以插入方式写进去的,而不是更新原有数据。(已做实验验证)
不过需要注意的是:使用Global类型的索引是有代价的,每次更新和删除操作都需要影响到全表的所有文件,所以它比较适合数据量较小的表,大表要谨慎使用!
推荐:博主历时三年倾注大量心血创作的《大数据平台架构与原型实现:数据中台建设实战》一书已由知名IT图书品牌电子工业出版社博文视点出版发行,真诚推荐给每一位读者!点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,扫码进入京东手机购书页面!
Hudi的Record Key是全局唯一的吗?相关推荐
- c#获取对象的唯一标识_在 Java 中利用 redis 实现分布式全局唯一标识服务
作者: 杨高超 juejin.im/post/5a4984265188252b145b643e 获取全局唯一标识的方法介绍 在一个IT系统中,获取一个对象的唯一标识符是一个普遍的需求.在以前的单体应用 ...
- springboot整合dubbo_springboot整合dubbo设置全局唯一ID进行日志追踪
1.新建项目 利用idea创建一个父项目,三个子项目,其中一个项目为生产者,一个项目为消费者,一个为接口等公共服务项目,生产者和消费者需要有web依赖,可以作为tomcat容器启动. 2.项目依赖 & ...
- dubbo protocol port 消费者端_springboot整合dubbo设置全局唯一ID进行日志追踪
击上方蓝色"程序员白楠楠",选择"设为星标" 作者:松下听泉 出处:https://blog.csdn.net/weixin_39427718 1.新建项目 利 ...
- mysql并发获取唯一数值_高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]...
需求说明 在过去单机系统中,生成唯一ID比较简单,可以使用MySQL的自增主键或者Oracle中的sequence, 在现在的大型高并发分布式系统中,以上策略就会有问题了,因为不同的数据库会部署到不同 ...
- [react] 需要把keys设置为全局唯一吗?
[react] 需要把keys设置为全局唯一吗? 不需要,key是用来进行diff算法的时候进行同层比较,准备的说key只需要在兄弟节点之间唯一,一般情况key选取是后端定义的id.万不得已的时候可以 ...
- 阿里P8架构师谈:分布式系统全局唯一ID简介、特点、5种生成方式
什么是分布式系统唯一ID 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识. 如在金融.电商.支付.等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据 ...
- 如何生成全局唯一标识
引出 大家都用过QQ或者微信吧, 当我们注册的时候, 会被自动分配一个QQ号, 这个号码是全局唯一且固定的, 那么, 如果是你来写的话, 如何为新注册的用户分配一个号码呢? 亦或是一个电商网站, 要为 ...
- 分布式全局唯一ID的实现
分布式全局唯一ID的实现 前言 上周末考完试,这周正好把工作整理整理,然后也把之前的一些素材,整理一番,也当自己再学习一番. 一方面正好最近看到几篇这方面的文章,另一方面也是正好工作上有所涉及,所以决 ...
- ef设置非自增长id_今日学习必备:分布式系统全局唯一ID你懂吗?
一 什么是分布式系统唯一ID 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识. 如在金融.电商.支付.等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息, ...
最新文章
- centos 系统使用verdaccio搭建npm私库
- WCF步步为营(五):数据契约
- 用c写按键精灵脚本语言,按键精灵之插件编写
- win10可用空间变成未分配_教你两种方法有效利用Win10未分配的空间 - 易我科技...
- 剑指 Offer 01-----20
- 百度推出Apollo 3.5和Apollo Enterprise
- python 朋友圈leetcode_利特代码0547。朋友圈[python],LeetCode0547FriendCircles,Python
- 西门子plc电源开关如何选型
- 文件传输的服务器软件有哪些,好用的数据传输软件有哪些?专业的数据传输软件排行榜...
- 国产手机下乡难以撼动山寨手机农村市场
- 关于原型设计的工具——AXURE
- 专利代理人资格考试怎么准备
- Python爬虫三:抓取链家已成交二手房信息(58W数据)
- Spring Cloud Gateway 集成Sa-Token
- java book打印机_java如何调用本地打印机进行图片打印
- 进销存系统_用户信息更新密码修改(3)
- 企业运维容器之 docker仓库
- 线性代数-矩阵及其运算(总结)
- 【案例分享】沃尔沃FMX V4 Euro 6 燃油压力故障诊断
- mysql教程源码_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图...