Hudi的核心概念 —— 表类型(Table Types)

news2025/1/20 19:20:20

文章目录

  • Copy On Write
  • Merge On Read
  • COW 与 MOR 的对比
  • 查询类型(Query Types)
    • Snapshot Queries
    • Incremental Queries
    • Read Optimized Queries
  • 不同表支持的查询类型

Copy On Write

在 COW 表中,只有数据文件/基本文件(.parquet),没有增量日志文件(.log.*)。对每一个新批次写入都将创建相应数据文件的新版本(新的 FileSlice),新版本文件包括旧版本文件的记录以及来自传入批次的记录(全量最新)。

由于在写入期间进行合并,COW 会产生一些写入延迟。但是 COW 的优势在于它的简单性,不需要其他表服务(如压缩),也相对容易调试。

Merge On Read

MOR 表中,包含列存的基本文件(.parquet)和行存的增量日志文件(基于行的 avro 格式,.log.*)。
顾名思义,MOR 表的合并成本在读取端。因此在写入期间我们不会合并或创建较新的数据文件版本。标记/索引完成后,对于具有要更新记录的现有数据文件,Hudi 创建增量日志文件并适当命名它们,以便它们都属于一个文件组。

在这里插入图片描述

读取端将实时合并基本文件及其各自的增量日志文件。每次的读取延迟都比较高(因为查询时进行合并),所以 Hudi 使用压缩机制来将数据文件和日志文件合并在一起并创建更新版本的数据文件。

在这里插入图片描述

用户可以选择内联或异步模式运行压缩。Hudi 也提供了不同的压缩策略供用户选择,最常用的一种是基于提交的数量。例如可以将压缩的最大增量日志配置为4。这意味着在进行 4 次增量写入后,将对数据文件进行压缩并创建更新版本的数据文件。压缩完成后,读取端只需要读取最新的数据文件,而不必关心旧版本文件。

MOR 表的写入行为,依据 index 的不同会有细微的差别:

  • 对于 BloomFilter 这种无法对 log file 生成 index 的索引方案,对于 INSERT 消息仍然会写 base file (parquet format),只有 UPDATE 消息会 append log 文件(因为 base file 已经记录了该 UPDATE 消息的 FileGroup ID)。
  • 对于可以对 log file 生成 index 的索引方案,例如 Flink writer 中基于 state 的索引,每次写入都是 log format,并且会不断追加和 roll over。

COW 与 MOR 的对比

CopyOnWriteMergeOnRead
数据延迟
查询延迟
Update(I/O) 更新成本高(重写整个 Parquet 文件)低(追加到增量日志)
Parquet 文件大小低(更新成本 I/O 高)较大(低更新成本)
写放大低(取决于压缩策略)

查询类型(Query Types)

Hudi 支持如下三种查询类型:

Snapshot Queries

快照查询,可以查询指定 commit/delta commit 即时操作后表的最新快照。在读时合并(MOR)表的情况下,它通过即时合并最新文件片的基本文件和增量文件来提供近实时表(几分钟)。
对于写时复制(COW),它可以替代现有的 parquet 表(或相同基本文件类型的表),同时提供 upsert/delete 和其他写入方面的功能,可以理解为查询最新版本的 Parquet 数据文件。

Incremental Queries

增量查询,可以查询给定 commit/delta commit 即时操作以来新写入的数据。有效的提供变更流来启用增量数据管道。

Read Optimized Queries

读优化查询,可查看给定的 commit/compact 即时操作的表的最新快照。仅将最新文件片的基本/列文件暴露给查询,并保证与非 Hudi 表相同的列查询性能。

Read Optimized Queries 是对 Merge On Read 表类型快照查询的优化。

SnapshotRead Optimized
数据延迟
查询延迟高(合并列式基础文件+行式增量日志文件)低(原始列式基础文件)

不同表支持的查询类型

Hudi 表类型定义了如何在 DFS 上索引和布局数据,以及如何在此类组织之上实现上述原语和时间线活动(即如何写入数据)。 反过来,定义基础数据如何向查询公开(即如何读取数据)。

表类型支持的查询类型
写入时复制快照查询 + 增量查询
读取时合并快照查询 + 增量查询 + 读取优化查询

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java寒假打卡】Java基础-集合HashSet

【Java寒假打卡】Java基础-集合Set概述哈希值hashSet原理HashSet存储学生对象并遍历小结概述 底层数据结构是哈希表不能保证存储和去除的顺序完全一致没有带索引的方法,所以不能使用普通的for循环进行遍历 使用增强for循环或者迭代器进行遍历由于是Set集合&#xf…

广告业务系统 之 承前启后 —— “消息中心”

文章目录广告业务系统 之 承前启后 —— “消息中心”消息中心物料同步链路图模块设计之 “一分为二”模块交互图之 “强一致性设计”奇怪交互图的数据链路数据一致性问题日志中心广告业务系统 之 承前启后 —— “消息中心” 消息中心 消息中心,是为 投放引擎 做…

韩顺平老师的Linux基础学习笔记 (上)

Linux学习笔记 前言:本系列笔记的参考由 2021韩顺平 一周学会Linux 总结而成,希望能给学习Linux的同学一些帮助。也感谢韩老师录制的视频给我带来了非常巨大的收获! 目录: 韩顺平老师的Linux基础学习笔记 (上)韩顺平老师的Linu…

交通部互通互联二维码之发卡机构公钥证书

背景 随话说的好啊,好比不如烂笔头,之前开发联调OK后,闲置了半年,结果今天再去搞公钥,发现完全忘记了生成规则。审核 有病 哪里来的广告? 特此,记录一下我们的过程,以便后面再出现…

gitee的ssh配置

#1.配置自己的gitee郵箱,返回直接輸入郵箱 ssh-keygen -t rsa -C "郵箱" #2.複製郵箱的ssh秘鑰 cat ~/.ssh/id_rsa.pub #在個人配置添加自己的ssh秘鑰

【jQuery】常用API——jQuery样式

jQuery 给我们封装了很多动画效果,最为常见的如下:一、显示隐藏切换效果1. 显示语法规范 show([speed,[easing],[fn]]);显示参数:(1)参数都可以省略, 无动画直接显示。(2)speed&…

(十五)一篇文章搞懂Java的内部类

目录 1.概述: 2.内部类之一:静态内部类 3.内部类之二:成员内部类 4.内部类之三:局部内部类 5.内部类之四:匿名内部类 1.概述: 内部类就是定义在一个类里面的类,里面的类可以理解成(寄生)。 2.内部类的使用场景、作用: ①当一个事务的内部,还…

前端如何上传图片文件

效果图html代码js效果图 效果: 这篇博客必须要后台调用你的js函数,如果后台不打算调用你的js函数可以放弃此篇博客了,或者自己将代码改良。如果后台接受该代码可以参考这篇文章:(如果后台不是使用php,也没关系只要返…

.net工作流引擎ccflow集成并增加自定义功能

一、为什么需要自定义扩展1、第三方类库已满足大部分需求,剩下的根据具体业务需求抽象成公共功能进行扩展2、第三方呈现的web页面与原类库耦合度较高,希望在原页面上扩展而不影响原来的功能3、在完全不修改第三方类库及web页面的情况下,加入自…

【数据结构】堆

堆 堆的定义 (最大)堆是一个可以被看成一棵树的数组对象,满足如下性质: 堆中的父亲结点总大于或等于其左右孩子结点的值总是一棵完全二叉树 完全二叉树 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点…

1.1.1半导体基础知识

半导体基础知识 上学的时候大概是模电第一节就会讲完这,会详细的介绍什么是导体,绝缘体,半导体,本征半导体,然后接着详细的讲述本征半导体的结构,两种载流子,P,N杂质半导体,PN结以及…

Spring Boot自动配置--如何切换内置Web服务器

系列文章目录 Spring Boot[概述、功能、快速入门]_心态还需努力呀的博客-CSDN博客 Spring Boot读取配置文件内容的三种方式_心态还需努力呀的博客-CSDN博客 Spring Boot整合Junit_心态还需努力呀的博客-CSDN博客 该系列文章持续更新中~ 目录 系列文章目录 前言 一、默认…

【Python】python深拷贝和浅拷贝(二)

【Python】python深拷贝和浅拷贝(二) 前言 上一期我们介绍了Python中深拷贝和浅拷贝的定义以及它们在执行过程中内存结构,同时也给出了深拷贝和浅拷贝的方法。(没有看上一期的朋友看这里,python深拷贝和浅拷贝&#…

架构设计---性能设计的详解

前言: 系统性能是互联网应用最核心的非功能性架构目标,系统因为高并发访问引起的首要问题就是性能的问题,高并发访问的情况下,系统因为资源不足,处理每个请求的时间都会变慢,看起来就是性能的变差。 因此…

什么是随机森林?

什么是随机森林? 随机森林是一种有监督的机器学习算法。由于其准确性,简单性和灵活性,它已成为最常用的一种算法。事实上,它可以用于分类和回归任务,再加上其非线性特性,使其能够高度适应各种数据和情况。 …

JavaSE初阶篇:系统环境变量path|classpath|JAVA_HOME

环境变量是为了 “在命令行窗口下”编译和运行Java程序而配置一、系统变量:Pathpath环境变量作用:将命令所在的路径配置到path中去,就相当于在计算机中“注册”了一样,以后找这个命令,会直接去你配置的路径下寻找。达到…

Revit中怎么使两面墙拉近时不自动连接?柱断梁墙功能

一、Revit中怎么使两面墙拉近时不自动连接? 问题:同材质的墙体在同一条直线上只要将其端点拖拽至一起就会融合成一道整墙体(如图-1、2所示),但是在做一些较特殊的结构时我们不需要其连接成一道整墙,有没有什么办法能够设置呢? 我们可以通过…

避免Mysql插入重复数据的几种方法

1、前言 在平时对数据库操作时,有时候需要向数据库中插入一些数据,此时就需要使用数据库的插入语句,但是在向数据中库插入数据时,不能盲目插入,因为盲目的插入可能会造成数据重复,浪费数据库的资源&#x…

Pytest三种配置文件

😎😎原文出自:测个der,博主的公众号,格式美观一些。 配置介绍 pytest 的主配置文件,可以改变 pytest 的默认行为,执行 pytest -h,这里有很多配置均可用于 pytest.ini配置 (venv) …

HarmonyOS鸿蒙学习笔记(16)Canvas入门使用

Canvas入门指南1、Canvas代码结构2、简单案例2.1 fillStyle和fillRect 绘制蓝色矩形2.2 strokeRect和strokeStyle 绘制红色边框2.3 lineCap的使用2.4 lineJoin的使用2.5 closePath的使用3、参考资料1、Canvas代码结构 在使用Canvas的时候,需要向初始化RenderingCon…