【Hudi】基础概念-数据写

目录

  • 数据写
    • 写操作
    • 写流程(UPSERT)
    • 写流程(Insert)
    • 写流程(Insert Overwrite)
    • Key生成策略
    • 删除策略

数据写

写操作

  • UPSERT:默认行为,数据先通过index打标,有一些启发式算法决定消息的组织以及优化文件的大小==>CDC导入
  • INSERT:跳过index,写入效率更高==>Log Defuplication
  • BULK_INSERT:写顺序,对大数据量的Hudi表初始化友好,对文件的大小限制best offort(写HFile)

写流程(UPSERT)

  • COW

(1)先对 records 按照 record key 去重
(2)首先对这批数据创建索引 (HoodieKey => HoodieRecordLocation);通过索引区分哪些 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
    (1)先对 records 按照 record key 去重(可选)
    (2)首先对这批数据创建索引 (HoodieKey => HoodieRecordLocation);通过索引区分哪些 records 是 update,哪些 records 是 insert(key 第一次写入)
    (3)如果是 insert 消息,如果 log file 不可建索引(默认),会尝试 merge 分区内最小的 base file (不包含 log file 的 FileSlice),生成新的 FileSlice;如果没有 base file 就新写一个 FileGroup + FileSlice + base file;如果 log file 可建索引,尝试 append 小的 log file,如果没有就新写一个 FileGroup + FileSlice + base file
    (4)如果是 update 消息,写对应的 file group + file slice,直接 append 最新的 log file(如果碰巧是当前最小的小文件,会 merge base file,生成新的 file slice)
    (5)log file 大小达到阈值会 roll over 一个新的

写流程(Insert)

  • COW
    (1)先对records按照 record key 去重(可选)
    (2)不会创建index
    (3) 如果有小的base file文件,merge base file,生成新的FileSlice+base file,否则直接写新的 FileSlice + base file

  • MOR
    (1)先对records按照 record key 去重(可选)
    (2)不会创建index
    (3) 如果log file可索引,并且有写的FileSlice,尝试追加或写最新的log file;如果log file不可索引,写一个新的 FileSlice+base file.

写流程(Insert Overwrite)

在同一个分区中创建新的文件组集。现有的文件组被标记为"删除"。根据最新记录的数据创建新的文件组。

  • COW
    在这里插入图片描述
  • MOR
    在这里插入图片描述

Key生成策略

用来生成HoodileKey+(record key + partition path),目前支持一下策略:

  • 支持多个字段组个record keys
  • 支持多个字段组合的partition path
  • 非分区表

删除策略

1)逻辑删:将value字段全部标记为null
2)物理删:
1、通过OPERATION_OPT_KET删除所有输入记录
2、配置PAYLOAD_CLASS)OPT_KEY=org.apache.hudi.EmptyHoodieRecordPayload 删除所有输入记录
3、在输入记录添加字段L_hoodie_is_deleted

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/722863.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(已解决) Github无法显示图像问题

Github无法显示图像的问题 问题描述初次尝试最终解决 问题描述 今天打开github,创建了一个仓库,想从本地把一些最近做的东西传上来(git add . > git commit -m “xxx” > git push),结果发现东西是成功传上来了,但是图片没…

简单好用的C++日志库spdlog使用示例

文章目录 前言一、spdlog的日志风格fmt风格printf风格 二、日志格式pattern三、sink,多端写入四、异步写入五、注意事项六、自己封装了的代码usespdlog.h封装代码解释使用示例 前言 C日志库有很多,glog,log4cpp,easylogging, eas…

PDF为何成为职场必备?编辑不求人,这几款工具助你一臂之力

不管是工作和学习,我们使用PDF文档的频率非常高,但是说起为什么要用PDF,却又只知其一不知其二。 为什么我们需要PDF? PDF,全称为Portable Document Format(可移植文件格式),是一种…

【电机】PID参数整定方法

1 试凑法 采样周期的选择,要根据所设计的系统的具体情况,用试凑的方法,在试凑过程中根据各种合理的建议来预选采样周期,多次试凑,选择性能较好的一个作为最后的采样周期。早整定参数时必须要认真的观察系统的相应情况…

低代码专题 | 低代码开发平台怎么收费,价格多少?一文揭秘!

低代码开发平台近几年真的火得一塌糊涂,不少企业都开始关注并尝试这种新的开发方式。 然而,关于低代码开发平台的收费问题,却是众说纷纭、信息零散。为了帮助大家更清晰地了解低代码开发平台的收费情况,这篇文章将进行全面的解读…

【STM32】使用标准库检测按键

按键检测使用到GPIO外设的基本输入功能。 1.硬件设计 作者使用的硬件没有按键模块。故使用了一个引脚模拟按键,将PWM1引脚拉低表示按键按下。思路如下:PWM1配置为输入,默认拉高,PWM1手动接地来模拟按下按键,此时PWM&a…

如何做好亚马逊、速卖通自养号测评?这些细节很重要

亚马逊,作为电商领域的领军者,吸引了无数卖家入驻。在这片竞争激烈的土地上,Review成为了卖家们展现实力、赢得消费者信任的关键。 Review不仅反映了产品的质量和卖家的服务,更是消费者选择购买的重要因素。因此,对于卖…

收入公平性评估方法

一、Gini系数## 1.1什么是基尼系数## 基尼系数是国际上用来综合考察居民内部收入分配差异状况的一个重要分析指标。每个人的收入有多有少,差距大时,基尼系数就高;差距小时,基尼系数就低。 1.2基本概念## 基尼系数表示在全部居民收…

js语法---理解防抖原理和实现方法

什么是防抖(节流) 在实际的网页交互中,如果一个事件高频率的触发,这会占用很多内存资源,但是实际上又并不需要监听触发如此多次这个事件(比如说,在抢有限数量的优惠券时,用户往往会提…

golang windows打包为linux可执行文件

使用go的交叉编译功能 set GOOSlinux set GOARCHamd64然后再执行go build 可能会报异常, 所以贴出我的go env配置仅供参考 go env环境配置 D:\GoWork\src\go-tzv>go env set GO111MODULEauto set GOARCHamd64 set GOBIN …

架构师篇-1、总体架构设计

业务架构哲学本质 定位:赋予业务架构设计能力,具备业务架构设计思维模型,掌握业务架构哲学本质,形成以不变应万变的业务架构设计能力。 架构师所需要的能力: 带领业务成功通过框架思维赋能业务架构师知识体系构建掌…

华北水利水电大学-C程序设计作业

目录 基础题 1-1 分析 代码实现 1-2 分析 代码实现 1-3 分析 代码实现 1-4 ​编辑 分析 代码实现 1-5 分析 代码实现 1-6 分析 代码实现 基础题 1-1 从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。其中学生信息包括学号、姓名…

学会python——制作一款天气查询工具(python实例七)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3、天气查询工具 3.1 代码构思 3.2 代码示例 3.3 运行结果 4、总结 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的…

pip安装总是失败,如何配置pip安装源,让环境重获新生?

前情提要 公司新项目组报道后,因为用的是公司内网,安装完python 和pycharm 后,发现pip 下载安装包总是报错 具体解决 1.确认python 环境已经安装 2.在cmd中执行如下命令配置参数 pip config set global.index-url https://这里填写自己公…

Linux 软件包管理器 yum

文章目录 yum是什么?Linux(centos)的生态yum的相关操作yum本地配置安装包lrzsz yum是什么? yum可以形象的比喻成一个下载安装管理的一个客户端,比如小米应用商店、华为应用商城 Linux中的安装包是有依赖关系的(比如下载游戏的时候有各种文件…

神经网络模型---ResNet

一、ResNet 1.导入包 import tensorflow as tf from tensorflow.keras import layers, models, datasets, optimizersoptimizers是用于更新模型参数以最小化损失函数的算法 2.加载数据集、归一化、转为独热编码的内容一致 3.增加颜色通道 train_images train_images[...,…

滑动窗口练习1-长度最小的子数组

1.题目链接:209.长度最小的子数组 2.题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条…

【机器学习】第9章 降维算法——PCA降维

一、概念 1.PCA (1)主成分分析(Principal ComponentAnalysis,PCA)一种经典的线性降维分析算法。 (2)原理,这里以二维转一维为例,原来的平面变成了一条直线 这是三维变二…

git 基本命令

列出分支基本命令: git branch 如果我们要手动创建一个分支 。执行 git branch (branchname) 即可: git branch testing 切换到testing分支: git checkout testing 我们也可以使用 git checkout -b (branchname) 命令来创建新分支并立…

1504 - Java多线程面试题

少年,思无邪,最最动人。 1.Java中有哪几种创建线程的方式 1.1 继承Thread类 代码示例 class HelloWorld01 extends Thread{Overridepublic void run() {System.out.println("这是继承 Thread 类方式实现多线程!");} }public class CreateTh…