Hudi-数据写操作流程
概述
在hudi数据湖框架中支持三种方式写入数据:UPSERT(插入更新)、INSERT(插入)和BULK INSERT(写排序)
UPSERT:默认行为,数据先通过index打标(INSERT/UPDATE),有一些启发式算法决定消息的组织以优化文件的大小
INSERT:跳过index,写入效率更高
BULK_INSERT:写排序,对大数据量额hudi表初始化友好,对文件大小的限制best effort(写HFile)

UPSERT写入流程
COW类型表,UPSERT写入流程
1.先对records按照record key去重
2.首先对这批数据创建索引(HoodieKey => HoodieRecordLocation),根据record key和分区路径构建索引;通过索引区分哪些records是update,哪些records是insert(key第一次写入)
3.对于update消息,会直接找到对应key所在的最新FileSlice的base文件,并做merge后写新的base file(新的FileSlice)
4.对于insert消息,会扫描当前partition的所有SmallFile(小于一定大小的base file),然后merge写新的FileSlice,如果没有SmallFile,直接写信的FileGroup + FileSlice;
MOR类型表,UPSERT写入流程
1.先对records按照record key去重
2.首先对这批数据创建索引(HoodieKey => HoodieRecordLocation),根据record key和分区路径构建索引;通过索引区分哪些records是update,哪些records是insert(key第一次写入)
3.如果是insert消息
A.如果log file不可建索引(默认),会尝试merge分区内最小的base file(不包含log file的FileSlice),生成新的FileSlice;如果没有base file就新写一个FileGroup + FileSlice + base file
B.如果log file可建索引,尝试append小的log file,如果没有就新写一个FileGroup + FileSlice + base file
4.如果是update消息,写对应的FileGroup + FileSlice,直接append最新的log file(如果碰巧是当前最小的文件,会merge base file,生成新的FileSlice)log file大小达到阈值会roll over一个新的
INSERT写入流程
COW类型表,INSERT写入流程
1.先对records按照record key去重(可选)
2.不会创建index
3.如果有小的base file文件,merge base file,生成新的FileSlice + base file,否则直接写新的FileSlice + base file
MOR类型表,INSERT写入流程
1.先对records按照record key去重(可选)
2.不会创建index
3.如果log file可索引,并且有小的FileSlice,尝试追加或写最新的log file;如果log file不可索引,写一个新的FileSlice + base file
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2020-02-26 机器学习-矩阵空间的变换
2017-02-26 echarts如何显示在页面上
2017-02-26 mybatis提取<where><if>共用代码