答案:不是!

默认情况下,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 IndexHBase Index,而从索引的全局性上,则分为Global IndexNon Global Index,其区别就是Global Index的索引是全局唯一的,而Non Global Index的索引只在分区内唯一,联系刚才提到的Index解构就不难推断,对于Global Index来说,它不包含partition path,所以是全局唯一的,而Non Global Index包含了partition path,所以当同一条数据换了分区列重新写入,还是以插入方式写进去的,而不是更新原有数据。(已做实验验证)

不过需要注意的是:使用Global类型的索引是有代价的,每次更新和删除操作都需要影响到全表的所有文件,所以它比较适合数据量较小的表,大表要谨慎使用!


推荐:博主历时三年倾注大量心血创作的《大数据平台架构与原型实现:数据中台建设实战》一书已由知名IT图书品牌电子工业出版社博文视点出版发行,真诚推荐给每一位读者!点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,扫码进入京东手机购书页面!

Hudi的Record Key是全局唯一的吗?相关推荐

  1. c#获取对象的唯一标识_在 Java 中利用 redis 实现分布式全局唯一标识服务

    作者: 杨高超 juejin.im/post/5a4984265188252b145b643e 获取全局唯一标识的方法介绍 在一个IT系统中,获取一个对象的唯一标识符是一个普遍的需求.在以前的单体应用 ...

  2. springboot整合dubbo_springboot整合dubbo设置全局唯一ID进行日志追踪

    1.新建项目 利用idea创建一个父项目,三个子项目,其中一个项目为生产者,一个项目为消费者,一个为接口等公共服务项目,生产者和消费者需要有web依赖,可以作为tomcat容器启动. 2.项目依赖 & ...

  3. dubbo protocol port 消费者端_springboot整合dubbo设置全局唯一ID进行日志追踪

    击上方蓝色"程序员白楠楠",选择"设为星标" 作者:松下听泉 出处:https://blog.csdn.net/weixin_39427718 1.新建项目 利 ...

  4. mysql并发获取唯一数值_高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]...

    需求说明 在过去单机系统中,生成唯一ID比较简单,可以使用MySQL的自增主键或者Oracle中的sequence, 在现在的大型高并发分布式系统中,以上策略就会有问题了,因为不同的数据库会部署到不同 ...

  5. [react] 需要把keys设置为全局唯一吗?

    [react] 需要把keys设置为全局唯一吗? 不需要,key是用来进行diff算法的时候进行同层比较,准备的说key只需要在兄弟节点之间唯一,一般情况key选取是后端定义的id.万不得已的时候可以 ...

  6. 阿里P8架构师谈:分布式系统全局唯一ID简介、特点、5种生成方式

    什么是分布式系统唯一ID 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识. 如在金融.电商.支付.等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据 ...

  7. 如何生成全局唯一标识

    引出 大家都用过QQ或者微信吧, 当我们注册的时候, 会被自动分配一个QQ号, 这个号码是全局唯一且固定的, 那么, 如果是你来写的话, 如何为新注册的用户分配一个号码呢? 亦或是一个电商网站, 要为 ...

  8. 分布式全局唯一ID的实现

    分布式全局唯一ID的实现 前言 上周末考完试,这周正好把工作整理整理,然后也把之前的一些素材,整理一番,也当自己再学习一番. 一方面正好最近看到几篇这方面的文章,另一方面也是正好工作上有所涉及,所以决 ...

  9. ef设置非自增长id_今日学习必备:分布式系统全局唯一ID你懂吗?

    一 什么是分布式系统唯一ID 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识. 如在金融.电商.支付.等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息, ...

最新文章

  1. centos 系统使用verdaccio搭建npm私库
  2. WCF步步为营(五):数据契约
  3. 用c写按键精灵脚本语言,按键精灵之插件编写
  4. win10可用空间变成未分配_教你两种方法有效利用Win10未分配的空间 - 易我科技...
  5. 剑指 Offer 01-----20
  6. 百度推出Apollo 3.5和Apollo Enterprise
  7. python 朋友圈leetcode_利特代码0547。朋友圈[python],LeetCode0547FriendCircles,Python
  8. 西门子plc电源开关如何选型
  9. 文件传输的服务器软件有哪些,好用的数据传输软件有哪些?专业的数据传输软件排行榜...
  10. 国产手机下乡难以撼动山寨手机农村市场
  11. 关于原型设计的工具——AXURE
  12. 专利代理人资格考试怎么准备
  13. Python爬虫三:抓取链家已成交二手房信息(58W数据)
  14. Spring Cloud Gateway 集成Sa-Token
  15. java book打印机_java如何调用本地打印机进行图片打印
  16. 进销存系统_用户信息更新密码修改(3)
  17. 企业运维容器之 docker仓库
  18. 线性代数-矩阵及其运算(总结)
  19. 【案例分享】沃尔沃FMX V4 Euro 6 燃油压力故障诊断
  20. mysql教程源码_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图...

热门文章

  1. Python+OpenCV实时图像处理
  2. 从一段字符串中提取JSON字符串并进行高亮格式化
  3. 【BZOJ4384】【POI2015】Trzy wieże (……)
  4. 爬虫中国最好的大学排名
  5. VS创建透明TextBox控件
  6. fullcalendar显示出勤日_FullCalendar日历插件应用之数据展现(一)
  7. 2021年全球IB考试99人得满分,55考生来自新加坡
  8. android手机短信验证码读取问题
  9. 剖析大数据分析就业前景
  10. 基于蜂虎狩猎 (BEH) 算法求解单目标优化问题附matlab代码