iceberg存储结构详解

news2024/12/25 23:57:13

iceberg底层组织方式

下图是Iceberg中表格式,s0、s1代表的是表Snapshot信息,每个表示当前操作的一个快照,每次commit都会生成一个快照Snapshot,每个Snapshot快照对应一个manifest list 元数据文件,每个manifest list 中包含多个Manifest元数据文件,manifest中记录了当前操作生成数据所对应的文件地址,也就是data file的地址。

基于snapshot的管理方式,Iceberg能够获取表历史版本数据、对表增量读取操作,data files存储支持不同的文件格式,目前支持parquet、ORC、Avro格式。

在这里插入图片描述

数据文件 data files

数据文件是 Apache Iceberg 表真实存储数据的文件,一般是在表的数据存储目录的 data目录下,如果我们的文件格式选择的是 parquet,那么文件是以“.parquet”结尾。
例 如 :
在这里插入图片描述

Iceberg 每次更新会产生多个数据文件(data files)。

表快照 Snapshot

快照代表一张表在某个时刻的状态。每个快照里面会列出表在某个时刻的所有 data files 列表。data files 是存储在不同的 manifest files 里面,manifest files 是存储在一个 Manifest list 文件里面,而一个 Manifest list 文件代表一个快照。

清单列表 Manifest list

manifest list 是一个元数据文件,它列出构建表快照(Snapshot)的清单(Manifest file)。这个元数据文件中存储的是 Manifest file 列表,每个 Manifest file 占据一行。每行中存储了Manifest file 的路径、其存储的数据文件(data files)的分区范围,增加了几个数文件、删除了几个数据文件等信息,这些信息可以用来在查询时提供过滤,加快速度。
例如:
在这里插入图片描述

就是Manifest List 文件。

清单文件 Manifest file

Manifest file 也是一个元数据文件,它列出组成快照(snapshot)的数据文件(data files)的列表信息。每行都是每个数据文件的详细描述,包括数据文件的状态、文件路径、分区信息、列级别的统计信息(比如每列的最大最小值、空值数等)、文件的大小以及文件里面数据行数等信息。其中列级别的统计信息可以在扫描表数据时过滤掉不必要的文件。

Manifest file 是 以 avro 格 式 进 行 存 储 的 , 以 “ .avro ” 后 缀 结 尾 。

在这里插入图片描述

详细图解

在这里插入图片描述

  1. HDFS目录
    在这里插入图片描述
  2. data目录
  • parquet格式data files文件
    在这里插入图片描述
  1. metadata目录下存放json元数据文件
  • json格式元数据文件
    在这里插入图片描述
    json内容如下:
{
  "format-version" : 2,
  "table-uuid" : "1fbaf999-cad9-4513-b4aa-fe72fda389a6",
  "location" : "hdfs://nameservice/warehouse/hive/a",
  "last-sequence-number" : 0,
  "last-updated-ms" : 1724985394437,
  "last-column-id" : 2,
  "current-schema-id" : 0,
  "schemas" : [ {
    "type" : "struct",
    "schema-id" : 0,
    "fields" : [ {
      "id" : 1,
      "name" : "id",
      "required" : false,
      "type" : "long"
    }, {
      "id" : 2,
      "name" : "count",
      "required" : false,
      "type" : "long"
    } ]
  } ],
  "default-spec-id" : 0,
  "partition-specs" : [ {
    "spec-id" : 0,
    "fields" : [ ]
  } ],
  "last-partition-id" : 999,
  "default-sort-order-id" : 0,
  "sort-orders" : [ {
    "order-id" : 0,
    "fields" : [ ]
  } ],
  "properties" : {
    "owner" : "xc",
    "write.parquet.compression-codec" : "zstd"
  },
  "current-snapshot-id" : -1,
  "refs" : { },
  "snapshots" : [ ],
  "statistics" : [ ],
  "snapshot-log" : [ ],
  "metadata-log" : [ ]
}
  • Manifest file
    在这里插入图片描述
    文件内容如下:
{u'status': 2, u'data_file': {u'record_count': 3, u'nan_value_counts': [], u'file_format': u'PARQUET', u'column_sizes': 
[{u'value': 58, u'key': 1}, {u'value': 85, u'key': 2}], u'equality_ids': None, u'partition': {}, u'split_offsets': [4], 
u'value_counts': [{u'value': 3, u'key': 1}, {u'value': 3, u'key': 2}], u'content': 0, u'null_value_counts': [{u'value': 0, u'key': 
1}, {u'value': 0, u'key': 2}], u'sort_order_id': 0, u'upper_bounds': [{u'value': '\x04\x00\x00\x00\x00\x00\x00\x00', u'key':
 1}, {u'value': '\x04\x00\x00\x00\x00\x00\x00\x00', u'key': 2}], u'lower_bounds': [{u'value': 
 '\x02\x00\x00\x00\x00\x00\x00\x00', u'key': 1}, {u'value': '\x03\x00\x00\x00\x00\x00\x00\x00', u'key': 2}], 
 u'file_size_in_bytes': 748, u'key_metadata': None, u'file_path': u'hdfs://nameservice/warehouse/hive/a/data/00000-2-
 7608cda8-968a-4199-b82e-446e43dbb60a-00001.parquet'}, u'file_sequence_number': 2, u'sequence_number': 2, 
 u'snapshot_id': 4905875536637374047L}
  • Manifest list(Snapshot)
    在这里插入图片描述
    文件内容如下:
{u'deleted_data_files_count': 0, u'deleted_rows_count': 0, u'partition_spec_id': 0, u'added_rows_count': 3, 
u'existing_data_files_count': 0, u'added_snapshot_id': 2085907655093186390, u'content': 0, u'manifest_length': 6721, 
u'added_data_files_count': 2, u'min_sequence_number': 1, u'manifest_path': 
u'hdfs://nameservice/warehouse/hive/a/metadata/1bcc1d6a-c4ab-40cd-b01d-e5e05507a51f-
m0.avro', u'existing_rows_count': 0, u'sequence_number': 1, u'partitions': []}

总结

上面我们详细把每个结构都进行了图解,最后用一张结构明了的汇总图作为总结:
在这里插入图片描述

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

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

相关文章

2024国赛数学建模预测算法-BP神经网络模型的预测精度分析(MATLAB 实现)

人工神经网络 第一节 人工神经网络概述 在您阅读这本书的时候,大约有个相互连接的神经元在帮助您阅读、呼吸、思考,以及完成各种各样的动作。这些神经元中,有些有着与生俱来的功能,比如呼吸、吮吸,有些则是由后天训练…

动态规划DP--背包问题

文章目录 0-1背包问题 -- 问题定义动态规划解法代码题目:分割等和子集题解 0-1背包问题 – 问题定义 在 0-1 背包问题中,给定一个背包的最大容量 W,以及 n 个物品,每个物品有两个属性: 重量:第 i 个物品的…

[数据集][目标检测]电动车入梯进电梯电单车入梯检测数据集VOC+YOLO格式7106张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):7106 标注数量(xml文件个数):7106 标注数量(txt文件个数):7106 标注…

广义回归神经网络(GRNN)

一、简介 广义回归神经网络 (General Regression Neural Network , GRNN) 的概念是由德 国科学家多纳德提出的,是径向基网络的其中一种 。因为其是以数理统计为基 础的,因此 GRNN 可以依据样本数据逼近其中包含的非线性映射关系。即使样本 数…

家里有猫用宠物空气净化器有用吗?希喂、米家、有哈哪款更好

在快节奏的现代生活中,越来越多的人选择宠物作为心灵的慰藉与生活的伴侣。起初,这份陪伴的需求简单而纯粹,但随着日子一天天过去,那份简单的情感逐渐生根发芽,成长为深厚的责任与爱。我在前两年养了两只猫,…

一款云笔记支持在线协同文档,脑图,白板演示的工具,多个设备同步,让灵感与你同行(附源码)

前言 在快节奏的工作环境中,如何高-效地记录、整理并分享工作笔记已经成为了一项重要的技能。传统的笔记方式往往难以满足跨设备、即时同步以及团队协作的需求,导致信息孤岛和工作效率低下。面对这样的挑战,我们迫切需要一种全新的工具来改变…

【ArcGIS Pro原理第一期】各种空间插值原理:GPI、LPI、IDW等

ArcGIS Pro原理第一期:空间插值原理 空间插值方法概述1.1 全局多项式(global polynomial interpolation, GPI)方法原理使用范围 1.2 局部多项式(local polynomial interpolation, LPI)方法原理精度测量(Mea…

echarts进度

echarts图表集 let numdata["I级",II级,III级,IV级,V级,劣V级] let pricedata40 option {backgroundColor: #0f375f,title: {show: false,text: ,left: center,top: 30%,textStyle: {color: #00D5FF,fontSize: 16,},},tooltip: {show: false},grid: {// show: true,…

鸿蒙界面开发——组件(5):菜单Menu 绑定菜单

菜单组件Menu Menu组件需和bindMenu或bindContextMenu方法配合使用,不支持作为普通组件单独使用。 Menu 以垂直列表形式显示的菜单。包含MenuItem、MenuItemGroup子组件。 Menu()作为菜单的固定容器,无参数。 MenuItem(value?: MenuItemOptions| Cust…

DC-DC开关稳压电路

前面所讲的线性稳压电路具有结构简单、调节方便、输出电压稳定性强、纹波电压小等优点。但是,由于调整管始终工作在放大状态,自身功耗较大,故效率较低,甚至仅为30%~40%。而且,为了解决调整管散热问题,必须安…

Linux-(系统启动、用户管理)

目录 前言 关机&重启命令 基本介绍 注意细节 用户登录和注销 注意: 用户管理 基本介绍 添加用户 指定/修改密码 删除用户 查询用户信息 切换用户 查看当前用户登录用户 用户组 新增组 删除组 查看所有组 修改用户所属组 创建用户时指定用户…

如何在车载中控上进行UI自动化测试

说到车载测试,很多人都很好奇,车载中控是否需要UI自动化测试,从市场反馈来说,在6-7年之前的车载中控测试就已经介入UI自动化测试,那时候还是使用javaUIautomator框架。现在大部分都已经更新为PythonAppium框架进行自动…

Fiddler安卓设备抓包基础

Fiddler安卓设备抓包基础 一、下载二、Fiddler设置三、安卓设备设置四、Fiddler工具页面介绍 一、下载 工具名称:Fiddler 下载地址:官网 二、Fiddler设置 1.打开Fiddler 2.打开Tools > Options > Connections进行如下设置,Fiddler…

【C++ Primer Plus习题】10.7

问题: 解答: main.cpp #include <iostream> #include "plorg.h" using namespace std;int main() {plorg p("Plorga");p.showCI();p.setCI(10);p.showCI();return 0; }plorg.h #pragma once#define SIZE 19 class plorg { private:char m_fillName…

allegro约束管理器的学习

1&#xff09;差分线neck mode的使用 2&#xff09;走线区域规则和间距区域规是不同的 3&#xff09;创建区域规则的步骤 分为三个步骤 1在spacing中创建一个区域规则&#xff1b; 2在region中把区域规则赋予它&#xff1b; 3在pcb中&#xff0c;创建一个constraint region sha…

中国次生林林龄分布数据(2020年)

次生林年龄的全国分布对于了解中国森林生态系统和碳储量至关重要。该数据集采用了一种数据驱动的方法&#xff0c;用于提高植被变化跟踪器和连续变化检测与分类算法的性能&#xff0c;通过使用变化检测算法和密集的陆地卫星时间序列来确定次生林的建立时间。 该数据集主要以tif…

实践reflex:以Personalized Sales个人销售网站为例

reflex 是一个使用纯Python构建全栈web应用的库&#xff0c;但是需要使用node&#xff0c;所以你懂的。 官网&#xff1a;Reflex Web apps in Pure Python 手册&#xff1a;Introduction Pynecone: Pynecone 是一个全栈 Python 框架&#xff0c;可以使用纯 Python 构建高性…

2024级新生数组字符串专题题解

一、题解&#xff1a; 1.A-[NOIP2005]校门外的树_24级新生数组字符串训练题 (nowcoder.com) 这题常见的解法有两种&#xff1a; 第一种是这道题我们可以直接按照题目意思枚举 #include<bits/stdc.h> #define int long long using namespace std;int road[10010];sig…

HarmonyOS开发实战( Beta5.0)DevEco Device Tool开发环境搭建实践

通常在嵌入式开发中&#xff0c;很多开发者习惯于使用Windows进行代码的编辑&#xff0c;比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段&#xff0c;大部分的开发板源码还不支持在Windows环境下进行编译&#xff0c;如Hi3516、Hi3518系列开发板。…

Django+Vue3前后端分离学习(五)(前端登录页面搭建)

1、如果需要使用组合式API&#xff0c;需要安装插件&#xff1a; npm install vite-plugin-vue-setup-extend --save-dev 在vite.config.js里配置&#xff1a; 首先导入: import VueSetupExtend from vite-plugin-vue-setup-extend 添加&#xff1a; 2、创建login.vue 然…