Apache Iceberg Architecture—Iceberg 架构详解

Apache Iceberg Architecture

在这里插入图片描述

Apache Iceberg 的架构可以分为三个主要层次:Iceberg Catalog、元数据层和数据层。

在这里插入图片描述


一、 Iceberg Catalog(目录)

Iceberg Catalog 是 Iceberg 的顶层组件,负责管理所有 Iceberg 表的元数据和元数据操作

Catalog 管理表的架构和元数据,提供了创建、查询和修改表的接口,是 用户和系统与Iceberg表交互的入口点。
在这里插入图片描述

Iceberg Catalog (catalog 目录)提供了一个中心位置,用户可以通过它找到每个表当前元数据文件的位置,是读取和写入 Iceberg 表的关键组件。

在这里插入图片描述

  1. 当前元数据指针

    • Iceberg Catalog 中保存每个表的当前元数据文件的指针(current metadata pointer),确保用户能够获取到最新的元数据
      在这里插入图片描述
  2. 原子操作支持

    • Catalog 必须支持原子操作,以确保在更新当前元数据指针时能够提供事务的原子性和正确性。
    • 常见的支持方式包括 HDFS、Hive Metastore 和 Nessie。
  3. 元数据存储方式

    • 不同的 Catalog 方案存储当前元数据指针的方式不同:
      • HDFS:在表的元数据文件夹中有一个名为 version-hint.txt 的文件,内容为当前元数据文件的版本号。
      • Hive Metastore:表在元存储中的条目包含一个属性,存储当前元数据文件的位置。
      • Nessie:Nessie 存储每个表的当前元数据文件的位置。
  4. 查询流程

    • 执行 SELECT 查询时,查询引擎首先访问 Iceberg Catalog,获取目标表的当前元数据文件位置,然后打开该文件进行数据读取

二、元数据层 (metadata layer)

Iceberg 的元数据层负责管理和存储有关表的关键信息,确保高效的数据读取与操作。元数据主要包括三个部分:元数据文件清单列表清单文件

在这里插入图片描述

1. 元数据文件(Metadata File)

在这里插入图片描述
元数据文件保存关于表的基本信息:

  • 表的 schema:定义表中字段的类型和名称。
  • 分区信息:说明数据如何在表中分区以优化查询性能。
  • 快照(Snapshots):记录表在不同时间点的状态。每个快照里面会列出表在某个时刻的所有 data files 列表。data files是存储在不同的manifest files里面,manifest files是存储在一个Manifest list文件里面,而一个Manifest list文件代表一个快照

在这里插入图片描述

  • 当前快照的引用:标识哪个快照是表的最新状态。

在这里插入图片描述
在这里插入图片描述

当执行 SELECT 查询时,查询引擎首先通过目录获取当前元数据文件的位置,然后读取当前快照的 ID,并在快照数组中查找该 ID,最终打开与之对应的清单列表。


2. 清单列表(Manifest List)

在这里插入图片描述
清单列表是一个指向多个清单文件的列表。每个清单文件记录一个快照的详细信息:

  • 清单文件的位置:清单文件的存储位置。
  • 快照 ID:该清单文件所属的快照 ID。
  • 分区信息:记录哪些分区包含在该清单中。
  • 列的范围:跟踪数据文件的下限和上限。

在这里插入图片描述

在这里插入图片描述

查询引擎打开清单列表后,读取清单路径并加载清单文件。此时,可以进行一些优化,例如基于行数或分区信息过滤数据。

3. 清单文件(Manifest File)

在这里插入图片描述
清单文件是 Iceberg 管理数据文件的核心,主要职责包括:

  • 跟踪数据文件及其详细信息和统计数据。
  • 每个清单文件追踪一部分数据文件,以实现并行读取和提高效率。

在这里插入图片描述

  • 文件路径:数据文件的存储位置。
  • 数据文件格式:指明使用的文件格式,如 Parquet、ORC 或 Avro。
  • 记录计数:文件中记录的数量。
  • 列的上下限:用于数据过滤和优化的统计信息。

在这里插入图片描述

当查询引擎打开清单文件后,读取文件路径和相关统计信息,以便访问实际的数据文件,并利用统计信息进行优化。


三、 数据层 (Data Layer)

数据层是实际存储数据的地方,Data Files数据文件是Apache Iceberg表真实存储数据的文件。

  • 数据文件 (Data Files)
    在这里插入图片描述
    • Iceberg 支持多种数据文件格式,如 Parquet、ORC 和 Avro。这些文件按照列式存储,便于高效的读写和压缩。如果文件格式选择的是parquet,那么文件是以“.parquet”结尾。
    • 数据文件按照 Iceberg 的分区策略进行组织,以优化数据访问。
    • Iceberg每次更新会产生多个数据文件(data files)。

在这里插入图片描述


再回过头来看一下这个结构,是不是就豁然开朗啦。
在这里插入图片描述

仅供学习使用哈

整理不易,列位彦祖一键三连哈😂

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

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

相关文章

HTML常用的文本标签

常用文本标签 <span>: 元素没有特定含义 <b>: 定义粗体文字 <i>: 定义斜体文字 <em>: 定义着重文字 <strong>: 定义加重语气 <del>: 定义删除字 <span>文本标签</span><br><b>文本标签</b><b…

Java框架学习(Spring)(tx)(03)

简介&#xff1a;以本片记录在尚硅谷学习ssm-spring-tx时遇到的小知识 详情移步&#xff1a;想参考的朋友建议全部打开相互配合学习&#xff01; 视频&#xff1a; 057-spring-tx-编程式和声明式事务理解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1AP411s7D7?p5…

MySQL tinyint(1)类型数据在经过flink cdc同步到doris后只有0/1问题定位与解决

背景&#xff1a; 近期在负责公司数据仓库搭建事宜&#xff0c;踩了一些坑后&#xff0c;终于通了&#xff0c;目标报表也成功迁移到了新方案上&#xff0c;可在数据验收的时候发现&#xff0c;同一个订单查询出了多条记录&#xff0c;原本以为只是简单的left join出多条记录问…

Unreal Engine 5 C++: 插件编写03 | MessageDialog

在虚幻引擎编辑器中编写Warning弹窗 准备工作 FMessageDialog These functions open a message dialog and display the specified informations there. EAppReturnType::Type 是 Unreal Engine 中用于表示应用程序对话框&#xff08;如消息对话框&#xff09;返回结果的枚举…

【算法笔记】二分查找 红蓝染色法

目录 二分查找 红蓝染色法&#xff08;感谢灵神&#xff09;闭区间[left, right]左闭右开区间[left, right)开区间(left, right)变式 二分查找 红蓝染色法&#xff08;感谢灵神&#xff09; 这里是灵神的教学视频&#xff1a;二分查找 红蓝染色法_哔哩哔哩_ bilibili 学了二分…

ubuntu中通过源码安装pointnet2_ops_lib

注&#xff1a;本帖所用环境为&#xff1a;ubuntu 24.04、 cuda 12.04 文章目录 1. 克隆 PointNet 源码库2. 安装依赖3. 编译 pointnet2_ops_lib4. 测试安装 1. 克隆 PointNet 源码库 首先&#xff0c;克隆 PointNet 的 GitHub 仓库&#xff1a; git clone https://github.co…

加密软件是怎么实现文件加密的

1、选择加密算法&#xff1a;加密软件支持多种加密算法&#xff0c;如对称加密算法&#xff08;如AES、DES&#xff09;和非对称加密算法&#xff08;如RSA&#xff09;。用户可根据需求和安全性要求选择合适的算法。 2、生成密钥&#xff1a;加密算法需要一定的密钥来对文件进…

代码随想录Day17 图论-1

DFS和BFS基础 做图论这部分的题目DFS和BFS少不了 DFS是深搜 沿着一条路一直搜索下去直到无法继续向下 再通过回溯 换一条路进行搜索 BFS是广搜 就是从当前节点出发 一直把当前节点所连接的所有节点都搜索过之后 进入下一节点在开始相同的搜索过程 98.所有可达路径 题意很简…

linux环境oracle11.2.0.4打补丁(p31537677_112040_Linux-x86-64.zip)

上传补丁及opatch工具 创建目录并上传opatch工具和补丁包 [oraclerhel64 ~]$ mkdir /u01/psu [oraclerhel64 ~]$ cd /u01/psu [oraclerhel64 psu]$ ll total 514572 -rw-r--r-- 1 oracle oinstall 391781147 Sep 23 17:37 p31537677_112040_Linux-x86-64.zip -rw-r--r-- 1 or…

iOS 顶级神器,巨魔录音机更新2.1正式版

嘿&#xff0c;这是黑猫。如果巨魔没有通话录音机&#xff0c;那它的价值至少减半。 用户的痛点就是商机&#xff0c;因此开发通话录音功能的巨魔开发者&#xff0c;不约而同地选择了付费制。 而在一众录音机中&#xff0c; TrollRecorder 巨魔录音机可以说是用户体验最好&am…

【深度学习】03-神经网络2-1损失函数

在神经网络中&#xff0c;不同任务类型&#xff08;如多分类、二分类、回归&#xff09;需要使用不同的损失函数来衡量模型预测和真实值之间的差异。选择合适的损失函数对于模型的性能至关重要。 这里的是API 的注意⚠️&#xff0c;但是在真实的公式中&#xff0c;目标值一定是…

STM32 的 SDIO 接口(基于STM32F429HAL库)

目录 一、引言 二、SDIO 控制器组成 1.时钟管理模块 2.命令通道模块 3.数据通道模块 4.中断管理模块 三、STM32F429 的 SDIO 特性 1.高速数据传输 2.兼容性强 3.灵活的配置选项 4.可靠性和稳定性 四、HAL 库中的 SDIO 相关结构和函数 1.SD_HandleTypeDef结构体…

基于SpringBoot+Vue的在线问诊管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

OpenCV特征检测(12)检测图像中的潜在角点函数preCornerDetect()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算用于角点检测的特征图。 该函数计算源图像的基于复杂空间导数的函数 dst ( D x src ) 2 ⋅ D y y src ( D y src ) 2 ⋅ D x x src − 2 …

vue使用PDF.JS踩的坑--部署到服务器上显示pdf.mjs viewer.mjs找不到资源

之前项目使用的pdf.js 是2.15.349版本&#xff0c;最近换了一个4.6.82的版本&#xff0c;在本地上浏览文件运行的好好的&#xff0c;但是发布到服务器&#xff08;IIS&#xff09;上打不开文件&#xff0c;控制台提示找不到pdf.mjs viewer.mjs。 之前使用的2.15.349pdf和viewer…

自动换行且带下划线的居中长标题的论文封面一种绘图实现

自动换行且带下划线的居中长标题的论文封面一种绘图实现 引言 在一些学位论文的封面上要求标题带有下划线&#xff0c;但长标题的情况下标题自动换行后下划线就会面临一些问题。 因此&#xff0c;往往需要一些特殊的处理。 在《如何制作自动换行且有定长下划线的论文封面模板…

第九节 Opencv自带颜色表操作

知识点&#xff1a;Look Up lTable&#xff08;LUT&#xff09;查找表 了解LUT查找表的作用与用法&#xff0c;代码实现与API介绍 -applyColorMap&#xff08;src,dst,COLORMAP&#xff09; -src表示输入图像 -dst表示输出图像 匹配到的颜色LUT&#xff0c;Opencv支持13种…

17.2 ksm源码讲解

本节重点介绍 : k8s资源对象的 buildStores构造函数注入MetricFamiliesk8s client-go 之 Reflector listAndWatch 方法watchHandler 监听更新&#xff0c;调用add等action 架构图总结 项目地址 地址 go get go get -v -d k8s.io/kube-state-metrics/v2v2.1.1源码分析 m…

【Godot4.3】自定义数列类NumList

概述 数列是一种特殊数组。之前写过等比、等差数列、斐波那契等数列的求取函数。今天就汇总到一起&#xff0c;并添加其他的一些数列&#xff0c;比如平方数、立方数、三角形数等。 这里我首先采用以前比较喜欢的静态函数库的写法&#xff0c;然后在其基础上改进为基于类继承…

大数据毕业设计选题推荐-国潮男装微博评论数据分析系统-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…