Apache Hudi Table Query Types

news2024/12/24 11:57:12

目录

Table Types​

Query types​​​​​​​

Copy On Write Table

Merge On Read


​​​​​​​Table & Query Types | Apache Hudi
        Hudi表类型定义了如何在DFS上对数据进行索引和布局,以及如何在这样的组织之上实现上述原语和时间线活动(即如何写入数据)。反过来,查询类型定义了底层数据如何向查询公开(即如何读取数据)。

Table TypeSupported Query types
Copy On WriteSnapshot Queries + Incremental Queries
Merge On ReadSnapshot Queries + Incremental Queries + Read Optimized Queries

Table Types​

Hudi支持以下表类型

  • 写入时复制:使用列式文件格式(例如parquet)存储数据。通过在写入期间执行同步合并,更新简单地对文件进行版本和重写。
  • 读取时合并:使用列式(例如parquet)+基于行的(例如avro)文件格式的组合存储数据。更新被记录到增量文件中,然后被压缩以同步或异步地生成新版本的列式文件。

下表总结了这两种表类型之间的区别

Trade-offCopyOnWriteMergeOnRead
Data LatencyHigherLower
Query LatencyLowerHigher
Update cost (I/O)Higher (rewrite entire parquet)Lower (append to delta log)
Parquet File SizeSmaller (high update(I/0) cost)Larger (low update cost)
Write AmplificationHigherLower (depending on compaction strategy)

Query types

Hudi支持以下查询类型

  • 快照查询:查询查看给定提交或压缩操作时表的最新快照。在读取表上进行合并的情况下,它通过动态合并最新文件切片的基本文件和增量文件来暴露近乎实时的数据(几分钟)。对于写表复制,它提供了对现有拼花地板表的直接替换,同时提供了追加启动/删除和其他写端功能;
  • 增量查询:自从给定的提交/压缩之后,查询只能看到写入到表中的新数据。这有效地提供了更改流,以启用增量数据管道;
  • 读取优化查询:查询查看给定提交/压缩操作时表的最新快照。只显示最新文件切片中的基本/列式文件,并保证与非hudi列式表相比具有相同的列式查询性能;

下表总结了不同查询类型之间的权衡。

Trade-offSnapshotRead Optimized
Data LatencyLowerHigher
Query LatencyHigher (merge base / columnar file + row based delta / log files)Lower (raw base / columnar file performance)

Copy On Write Table

        “写入时复制”表中的文件切片仅包含基本/列文件,每次提交都会生成新版本的基本文件。换句话说,我们在每次提交时都隐式压缩,这样只存在列数据。因此,写入放大率(为1字节的输入数据写入的字节数)高得多,其中读取放大率为零。这是分析工作负载非常需要的属性,因为分析工作负载主要是重读取的。

下面从概念上说明了当数据写入到写时拷贝表中并在其上运行两个查询时,这是如何工作的。

当数据被写入时,对现有文件组的更新会为该文件组生成一个新的切片,该切片标记有提交即时时间,而插入会分配一个新文件组并为该文件群写入其第一个切片。这些文件切片及其提交时间在上面用颜色编码。针对这样一个表运行的SQL查询(例如:select count(*)统计该分区中的总记录),首先检查最新提交的时间线,并过滤每个文件组中除最新文件片段之外的所有文件片段。正如您所看到的,一个旧的查询不会看到当前飞行中提交的文件以粉色编码,而是在提交后开始的一个新的查询会拾取新的数据。因此,查询不受任何写入失败/部分写入的影响,仅在提交的数据上运行。

写表复制的目的是通过

  • 一流的支持在文件级自动更新数据,而不是重写整个表/分区;
  • 能够增量使用更改,而不是浪费扫描或摸索启发式;
  • 严格控制文件大小以保持出色的查询性能(小文件会严重影响查询性能)。

Merge On Read

        “写入时复制”表中的文件切片仅包含基本/列文件,每次提交都会生成新版本的基本文件。换句话说,我们在每次提交时都隐式压缩,这样只存在列数据。因此,写入放大率(为1字节的输入数据写入的字节数)高得多,其中读取放大率为零。这是分析工作负载非常需要的属性,因为分析工作负载主要是重读取的。

下面从概念上说明了当数据写入到写时拷贝表中并在其上运行两个查询时,这是如何工作的。

在这个例子中发生了很多有趣的事情,它们揭示了方法中的微妙之处:

  • 我们现在每1分钟左右就会提交一次,这是其他表类型无法做到的;
  • 在每个文件id组中,现在有一个增量日志文件,它保存对基本列文件中记录的传入更新。在本例中,delta日志文件保存了10:05到10:10之间的所有数据。与之前一样,基本柱状文件仍然使用提交进行版本控制。因此,如果只查看基本文件,那么表布局看起来就像一个写时复制表;
  • 定期压缩过程从增量日志中协调这些更改,并生成新版本的基础文件,就像示例中10:05发生的情况一样;
  • 查询同一基础表有两种方法:读取优化查询和快照查询,这取决于我们选择的是查询性能还是数据的新鲜度;
  • 当来自提交的数据可用于查询时,对于读优化查询,语义会以微妙的方式发生变化。请注意,这样一个在10:10运行的查询在10:05之后不会看到数据,而快照查询总是看到最新的数据;
  • 当我们触发压缩时,它决定压缩什么,这是解决这些难题的关键。通过实施压缩策略(与旧分区相比,我们积极压缩最新分区),我们可以确保读取优化的查询在X分钟内以一致的方式查看发布的数据。

        合并读表的目的是直接在DFS上实现近乎实时的处理,而不是将数据复制到可能无法处理数据量的专用系统。该表还有一些次要的好处,例如通过避免数据的同步合并来减少写入放大,即一批中每1字节数据写入的数据量。

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

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

相关文章

区块链入门的几个基本问题

目录前言比特币区块链区块链大揭秘抛砖引玉故事一故事二总结引人入胜侃侃而谈去中心化开放性不可篡改性相关技术共识机制共识机制的两大核心达成共识的主要过程(产生新区块的过程)工作量如何理解?Hash计算Bits和目标Hash值Merkle Root双花问题…

新手python学什么最吃香?

前言 今天跟大家聊聊Python的几个主要发展和就业方向,给准备学习Python的小伙伴解惑。 “ 我想学Python,但是学完Python后都能干啥?” “ 现在学Python,哪个方向最简单?哪个方向最吃香?” “ …… ” …

LeetCode题解 二叉树(五):226 翻转二叉树;101 对称二叉树;100 相同的树;572 另一个树的子树

226 翻转二叉树 easy 这道题有一段广为人知的传说:曾有人说Homebrew(适用于macOS和Linux的开源软件包管理器)的作者Max Howell,没有在白板上写出这道题目,被Google拒绝了。 至于是不是真的因为没做出来这道题就被拒绝…

深入浅出JVM之执行引擎的解释执行与编译执行

本篇文章围绕执行引擎,深入浅出的解析执行引擎中解释器与编译器的解释执行和编译执行、执行引擎的执行方式、逃逸分析带来的栈上分配、锁消除、标量替换等优化以及即时编译器编译对热点代码的探测 执行引擎 hotspot执行引擎结构图 执行引擎分为解释器、JIT即时编译…

大数据框架Hadoop篇之Hadoop入门

1. 写在前面 今天开始,想开启大数据框架学习的一个新系列,之前在学校的时候就会大数据相关技术很是好奇,但苦于没有实践场景,对这些东西并没有什么体会,到公司之后,我越发觉得大数据的相关知识很重要&…

Jmeter(二十二):硬件性能监控指标

硬件性能监控指标 一、性能监控初步介绍 性能测试的主要目标 1.在当前的服务器配置情况,最大的用户数 2.平均响应时间ART,找出时间较长的业务 3.每秒事务数TPS,服务器的处理能力 性能测试涉及的内容 1.客户端性能测试:web前…

洛谷——【入门2】分支结构

文章目录题单简介【深基1-2】小学数学 N 合一题目描述问题 1问题 2问题 3问题 4问题 5问题 6问题 7问题 8问题 9问题 10问题 11问题 12问题 13问题 14输入格式输出格式样例 #1样例输入 #1样例输出 #1提示AC代码【深基2.习6】Apples Prologue / 苹果和虫子题目描述输入格式输出格…

尝鲜:SpreadJS-en已出 16.0 SpreadJS-cn 16.0-23年1月出

此次版本更新将带来众多的增强功能,而其中新的文件结构尤为重要,是近几个版本中最重要的架构级更新! 其设计目标是 *减少 SSJSON 的体积,平均减小到原来 30% *提供按需加载(Lazyload)能力,相对…

【学习】https://gitee.com/DingJiaxiong

【学习】https://gitee.com/DingJiaxiong 文章目录【学习】<https://gitee.com/DingJiaxiong>0 前言1 Java SE2 Java Web3 Maven基础4 Git5 SSM框架6 MybatisPlus7 SpringBoot0 前言 事情是这样&#xff0c;我准备把之前所有的笔记都放到Gitee 上了 不用GitHub … 就别问…

Spring的AOP切面应用对【后台对接口增强】

目录&#x1f4da;简介&#xff1a;&#x1f4a8;切面表达式&#xff1a;&#x1f4ad;切面通知类型&#xff1a;&#x1f5fa;️创建项目演示&#xff1a;&#x1f3a2;创建项目&#xff1a;&#x1f383;添加依赖&#xff1a;&#x1f4a8;编写切面类&#xff1a;&#x1f68…

前端显示分页详解

我们在浏览页面的时候&#xff0c;是不是经常看到网页经常是以页面的形式给我们展现出来的&#xff0c;我们以淘宝的页面为例&#xff08;如下图&#xff09;&#xff0c;那这样按照页面呈现有什么好处呢&#xff1f;这篇文章让我们来深入探究了解这其中的奥秘。 优点&#xff…

泛型自动装箱

目录 前言 泛型 1.泛型的目的 2.泛型存在的意义和注意事项&#xff1a; 3.擦除机制 4.泛型的边界 5.泛型方法&#xff1a; 包装类&#xff1a; 前言 只要知道《》是啥意思&#xff0c;其他了解即可 泛型的上界 通配符简单知道就行 泛型 1.泛型的目的 指定当前的容器&am…

【JVM】浅析程序计数器与虚拟机栈

文章目录1. 程序计数器2. 虚拟机栈3. 栈内存溢出1. 程序计数器 Program Counter Register 程序计数器&#xff08;寄存器&#xff09; 程序计数器的作用是什么&#xff1f; 是记录下一条JVM指令的执行地址行号 程序计数器有什么特点&#xff1f; 线程私有的不会存在内存溢出 …

ADI Blackfin DSP处理器-BF533的开发详解59:DSP控制ADXL345三轴加速度传感器的应用2(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 MEMS三轴加速度传感器 我做了一个三轴加速度传感器的子卡&#xff0c;插在这个板子上&#xff0c;然后写了一些有意思的应用程序。 硬件实现原理…

Linux——定制Linux

Linux启动流程 首先&#xff0c;Linux要通过自检&#xff0c;检查硬件设备有没有故障如果有多块启动盘的话&#xff0c;需要在BIOS选择启动磁盘启动MBR中的bootloader引导程序加载内核文件执行所有进程的父进程、老祖宗systemd欢迎界面 加载内核文件的关键文件 kernel文件&a…

C#调用Python脚本训练并生成AI模型(以Paddle框架为例)

目录一. IronPython语言移植1.1 IronPython安装1.2 示例代码1.3 运行结果1.4 特点二. C#调用Python文件打包dll2.1 步骤2.2 限制三. C#命令行调用.py文件执行3.1 代码3.3 运行结果3.4 特点四. C#调用Python可执行exe4.1 步骤4.1.1 使用pyinstaller打包python程序4.1.2 在c#中调…

入门:手动构建镜像

前面我们已经了解了Docker镜像的结构&#xff0c;实际上所有常用的应用程序都有对应的镜像&#xff0c;我们只需要下载这些镜像然后就可以使用了&#xff0c;而不需要自己去手动安装&#xff0c;顶多需要进行一些特别的配置。当然要是遇到某些冷门的应用&#xff0c;可能没有提…

【细胞分割】中值滤波+分水岭法细胞计数【含Matlab源码 640期】

⛄一、图像分割简介 理论知识参考&#xff1a;【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】 ⛄二、部分源代码 clear; close all; %------------------ %程序中定义图像变量说明 %Image->原图变量; %Image_BW->二值化图象; %Image_BW_medfilt->中…

【实时数仓】DWM层跳出明细计算之需求分析、读取数据、通过Flink的CEP完成跳出判断、写回kafka、测试

文章目录一 DWM层-跳出明细计算1 需求分析与思路&#xff08;1&#xff09;什么是跳出&#xff08;2&#xff09;计算跳出行为的思路&#xff08;3&#xff09;实现思路2 读取数据&#xff08;1&#xff09;代码编写&#xff08;2&#xff09;测试3 通过Flink的CEP完成跳出判断…

【MATLAB100个实用小技巧】——数值分析(85-100)

文章目录前言系列文章85.86. 三次样条插值法87. NEWTON 插值88. hermite 插值89. newton 形式的 hermite 插值90. 平方根法91. gauss 消去法92. 三角分解法93. jacobi 迭代法94. gauss 迭代法95. sor 迭代法96. 最速下降法97. 共额梯度法98. newton 迭代法99. broyden 迭代法10…