Iceberg从入门到精通系列之一:Iceberg核心概念理解

news2024/12/29 11:07:19

Iceberg从入门到精通系列之一:Iceberg核心概念理解

  • 一、Iceberg核心概念
  • 二、Iceberg表结构
  • 三、数据文件
  • 四、表快照Snapshot
  • 五、清单列表Manifest list
  • 六、表快照、数据文件和清单列表之间的关系
  • 七、Catalog
  • 八、Hive Catalog
  • 九、Hadoop Catalog
  • 十、Hive Catalog和Hadoop Catalog之间的关系
  • 十一、创建数据库和iceberg表
  • 十二、插入数据
  • 十三、查询表的信息

一、Iceberg核心概念

Iceberg是一个分布式列式存储库,它基于Hadoop HDFS和Apache Spark。核心概念包括:

  1. 表(Table):存储数据的逻辑单元。Table由物理上相互独立且互不影响的Tablet组成。

  2. Tablet(分片):Table的逻辑单元,Table可由一个或多个Table构成。Tablet使用数据分片技术存储数据,每个数据分片只能由一个Tablet存储,因而满足不可变性。

  3. Snapshot(快照):代表一个Table在某个时间点的数据状态,由一份或多份Tablet组成。

  4. Manifest(清单):描述Table状态的元数据,包括Table的Schema(模式)、Partition Spec(分区规范)和Current Snapshot ID(当前快照ID)等信息。

  5. Partition(分区):将数据按照指定规则分隔成的逻辑单元,Partition由一个或多个数据块(Block)组成。

  6. Block(块):其中存储的是Partition的数据,每个块都有一个唯一的ID,块的大小可以在表级别进行配置。

二、Iceberg表结构

在这里插入图片描述

  • Iceberg 有文件级别的元数据管理。它基于 snapshot 来做多版本的控制。
  • 每一个 snapshot 对应一组 manifest,每一个 manifest 再对应具体的数据文件。
  • Iceberg 开放的存储格式,有着比较好的 API 和存储规范的定义,方便在后续对它做一些功能上的扩展。

三、数据文件

Iceberg数据文件是指实际存储表格数据的文件,通常以Parquet格式存储。每个数据文件包含了表格的一部分数据,通常是一个分区中的数据。数据文件通常情况下不会被修改,而是通过追加新的数据文件来增加新数据。Iceberg数据文件具有以下特点:

  1. 数据文件是不可变的,一旦创建就不能被修改。
  2. 数据文件以Parquet格式存储,可以很好地支持列式存储和查询。
  3. 数据文件通常会被分配到不同的存储系统或节点上,以实现分布式的数据存储和查询。
  4. 数据文件可以通过添加新文件、删除旧文件等方式实现数据的管理和调优。
  5. 数据文件通常会被组织成目录树的形式,以便快速定位和访问数据。

Iceberg数据文件是Iceberg表格的最基本的组成单元,也是Iceberg表格的核心。数据文件的设计可以使得Iceberg表格具备高效的查询和分析性能,同时具有良好的容错性和扩展性。

  • 数据文件是Apache Iceberg表真实存储数据的文件,一般是在表的数据存储目录的data目录下,如果文件格式选择的是parquet,那么文件是以".parquet"结尾。
  • Iceberg每次更新会产生多个数据文件

四、表快照Snapshot

Iceberg表快照是指表格在某个特定时间点的快照。Iceberg中的表格不允许修改,所有的修改会生成一个新的表快照。每个表快照包含了表格的元数据信息,如架构、分区规则、数据文件等等。因此,表格的每个新的快照都代表了表格的新的状态。

Iceberg表快照是Iceberg表格的重要组成部分,它可以帮助Iceberg表格实现版本控制和数据管理。通过使用表快照,可以轻松地恢复表格到先前的状态,也可以通过比较不同的快照,了解表格的历史变化和数据趋势。此外,表快照还可以实现数据的版本控制和权限管理等功能。

在Iceberg中,生成新的表快照是一件非常高效和简单的事情。当表格状态发生变化时,会自动产生一个新的表快照,并记录下新的元数据信息。因此,在使用Iceberg时,可以放心地对数据进行修改和操作,同时保证数据的正确性和可追溯性。

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

五、清单列表Manifest list

Iceberg清单列表是指Iceberg表格中所有数据文件的列表。每个数据文件都包含了表格的一部分数据,通常是一个分区中的数据。清单列表包含了数据文件的元数据信息,如文件大小、数据量、创建时间、分区信息等等。在Iceberg中,清单列表是非常重要的元数据信息,它可以帮助我们进行数据查询、管理和优化等操作。

在Iceberg表格中,清单列表是动态的,随着表格数据的变化而变化。当新的数据文件添加到表格中时,清单列表会自动更新,并记录下新的数据文件的元数据信息。同时,清单列表还可以帮助我们进行数据查询和优化。通过查询清单列表的元数据信息,我们可以轻松地了解表格的数据分布、数据量、可用的分区等信息,从而为我们的查询和优化操作提供帮助。

  • manifest list是一个元数据文件,它列出构建表快照Snapshot的清单(Manifest file)。
  • 这个元数据文件中存储的是Manifest file列表,每个Manifest file占据一行。
  • 每行中存储了Manifest file的路径、其存储的数据文件(data files)的分区范围,增加了几个数据文件、删除了i个数据文件等信息,这些信息可以用来在查询时提供过滤,加快速度。
  • Manifest file是以avro格式进行存储的,以".avro"后缀结尾。

总之,清单列表是Iceberg表格中重要的元数据信息之一,它可以帮助我们进行数据管理、查询和优化等操作,同时也是实现Iceberg表格高效和可靠的关键之一。

六、表快照、数据文件和清单列表之间的关系

在Iceberg表格中,表快照、数据文件和清单列表是密切相关的。表快照记录了表格在某个特定时间点的状态和元数据信息,包括架构、分区规则、数据文件等等。数据文件是实际存储表格数据的文件,通常以Parquet格式存储。每个数据文件包含了表格的一部分数据,通常是一个分区中的数据。清单列表是Iceberg表格的所有数据文件的列表,包括数据文件的元数据信息,如大小、数据量、创建时间、分区信息等等。

表格的每个新的快照都代表了表格的新的状态,包括新的元数据信息和数据文件列表。因此,快照与数据文件和清单列表是相互关联的。表快照记录了数据文件和清单列表的版本信息,以及它们的所有元数据信息。同时,清单列表可以帮助我们查询表格的数据文件和元数据信息,从而帮助我们了解表格的状态和数据趋势。数据文件是快照的实际组成部分,代表了表格的数据信息。

在Iceberg表格中,快照、数据文件和清单列表三者之间的关系是密切相关的,它们共同组成了Iceberg表格的基本结构。通过这个结构,我们可以实现数据版本控制、数据管理和查询优化等多种操作,从而提高我们的数据分析和应用效率。

七、Catalog

  • 在Iceberg中,Catalog是管理表和数据的入口。Catalog负责存储表的元数据信息,包括Schema、Partition Spec、Current Snapshot ID等信息。它允许用户通过编程方式或CLI(命令行界面)来创建、删除、修改、查询表等操作。同时,Catalog还提供了对表的版本控制功能,允许用户在不同的快照之间切换,以及查询不同快照中数据的历史版本。
  • Catalog将数据存储在下层的存储介质中,可以支持多种存储介质,目前已经支持了Hadoop HDFS、AWS S3等存储介质。 这种架构能够保证数据的持久性和可靠性,并且能够对接不同的计算引擎,可以提供更好的数据管理和查询能力。

八、Hive Catalog

  • Hive Catalog是在Iceberg中使用Hive元数据存储的一种Catalog实现。
  • 它通过使用Hive的元数据模型、和Iceberg的数据结构相结合的方式,实现了对Iceberg表的管理。
  • 具体来说,Hive Catalog会通过Hive Metastore来存储Iceberg表的元数据,包括表的Schema、Partition信息、快照等内容。同时,它还实现了Iceberg的API(Application Programming Interface),使得用户可以通过使用相同的方法来管理和查询Iceberg表。
  • 使用Hive Catalog可以将Iceberg表的管理与Hadoop生态系统相集成,方便用户进行操作和管理。

九、Hadoop Catalog

  • Hadoop Catalog是在Iceberg中使用Hadoop元数据存储的一种Catalog实现。
  • 它使用Hadoop文件系统(HDFS)来存储Iceberg表的元数据,包括表的Schema、Partition信息、快照等内容。同时,它还实现了Iceberg的API(Application Programming Interface),使得用户可以通过使用相同的方法来管理和查询Iceberg表。
  • 使用Hadoop Catalog可以方便地将Iceberg表与Hadoop生态系统相集成,使用Hadoop相关的工具来操作和管理Iceberg表。

十、Hive Catalog和Hadoop Catalog之间的关系

  • 在Iceberg中,Hive Catalog和Hadoop Catalog的本质区别是它们管理和存储表格数据的方式和元数据信息的组织形式。
  • Iceberg的Hive Catalog是建立在Hadoop之上的数据仓库,专门用于管理和处理大规模数据集。它允许用户定义表格和数据类型,并支持高效的SQL查询。
  • Iceberg的Hadoop Catalog是一个组件,用于管理Hadoop分布式文件系统(HDFS)中的数据。它提供了一个文件系统接口,可以帮助用户使用和管理Hadoop文件系统中的数据,并且可以支持多种数据存储格式和编码方法。
  • 在Iceberg中,Hive Catalog和Hadoop Catalog被用作管理和存储Iceberg表格数据的中央服务。

它们的区别在于:

  • Hive Catalog使用Hive元数据存储库来组织表格数据的元数据信息,而Hadoop Catalog则依赖于Hadoop HDFS来管理数据文件、记录表格分区信息等元数据信息。
  • 因此,Hive Catalog和Hadoop Catalog在Iceberg中的区别在于它们管理和存储表格数据的方式和元数据信息的组织形式,但它们都是用于管理和存储Iceberg表格数据的重要组件。

十一、创建数据库和iceberg表

创建Hive Catalog数据库。使用以下命令创建一个名为“my_db”的数据库,并将Hive Catalog作为元数据存储库。

创建my_db数据库

hive> CREATE DATABASE my_db
  WITH DBPROPERTIES (
    'iceberg.catalog'='hadoop.catalog',
    'iceberg.catalog.hive_db'='my_db'
  );

创建Iceberg表。使用以下命令创建一个名为“my_table”的Iceberg表。
创建了一个包含id和name字段的表,并且定义了以id字段为分区键的分区规则。

CREATE TABLE my_db.my_table (
  id INT,
  name STRING
) 
PARTITIONED BY (id);

十二、插入数据

INSERT INTO my_table
VALUES (1, 'John'),
       (2, 'Mary'),
       (3, 'Peter');

十三、查询表的信息

describe formatted iceberg_test1;

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

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

相关文章

Alamouti,MRC以及beam三种方式的误码率对比MATLAB仿真程序

Alamouti,MRC以及beam三种方式的误码率对比MATLAB仿真程序 完整程序: clc; clear; close all; warning off; addpath(genpath(pwd)); %%%%%%%%%%%%%%%%%%%%%%%%% Initialization %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% N = 10^6; r_n = rand(1,N)>0.5; BPSK = 2*r_n-1; E_n_d…

chatgpt赋能python:Python生成GUI的步骤和工具

Python生成GUI的步骤和工具 Python是一种广泛使用的编程语言,其语法简洁、易学、可读性强等特点深受程序员喜爱。 Python的GUI编程让我们可以为用户提供友好的界面,帮助用户更好地理解和使用程序。Python生成GUI的过程并不复杂,本文将为您介…

代码随想录算法训练营第42天 | 01背包问题理论基础 + 416.分割等和子集

今日任务 目录 01背包问题 二维数组 01背包问题 一维/滚动数组 416.分割等和子集 - Medium 01背包问题 二维数组 理论基础:代码随想录 01 背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品…

课程18:角色权限功能实现

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

chatgpt赋能python:Python生成C++代码-提高生产力的利器

Python 生成 C 代码 - 提高生产力的利器 Python 作为一种高级编程语言,在数据分析、机器学习等领域都有着广泛的应用。但是,Python 被认为速度慢,无法处理一些高性能的任务。此时,C这种低级语言就被用来替代 Python,以…

实战:构建工具-共享库配置实践-2023.6.22(测试成功)

实战:构建工具-共享库配置实践-2023.6.22(测试成功) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 实验环境 gitlab/gitlab-ce:15.0.3-ce.0 jenkins/jenkins:2.346.3-2-lts-jdk11实验软件 链接:https://pan.baidu.com/…

Flutter Dart操作符

常见的操作符大家都知道就不多介绍了,主要来看看Java所没有的。 类型判定操作符 as、 is、 和 is! 操作符是在运行时判定对象 类型的操作符 操作符解释as类型转换is如果对象是指定的类型返回 Trueis!如果对象是指定的类型返回 False as 操作符把对象转换为特定的类…

如何加入开源社

开源社成立于 2014 年,是由志愿贡献于开源事业的个人成员,依 “贡献、共识、共治” 原则所组成,始终维持厂商中立、公益、非营利的特点,是最早以 “开源治理、国际接轨、社区发展、项目孵化” 为使命的开源社区联合体。开源社积极…

chatgpt赋能python:Python生成GUID:让你的代码变得更加唯一

Python生成GUID:让你的代码变得更加唯一 在现代软件开发领域中,一个核心的问题是如何确保代码生成的ID是唯一的。通过Python语言生成全球唯一标识符(GUID)是一个非常流行的方法,而且是非常容易实现的。 什么是Python…

FutureTask源码

介绍 在创建线程的方式中,我们可以直接继承Thread和实现Callable接口来创建线程,但是这两种创建线程的方式不能返回执行的结果。于是从JDK1.5开始提供了Callable接口和Future接口,这两种创建线程的方式可以在执行完任务之后返回执行结果。 …

Java8 LocalDateTime获取当前周是本年第几周weekOfYear,用WeekFields

Java8 LocalDateTime获取当前周是本年第几周weekOfYear, 可用WeekFields LocalDateTime 没有直接获得 weekOfYear 的方法 LocalDateTime 有一个 get(TemporalField field) 方法, 返回 int public int get(TemporalField field) {if (field instanceof ChronoField chronoFiel…

读发布!设计与部署稳定的分布式系统(第2版)笔记09_一窝蜂和容量

1. 停电事故后电力恢复的方式 1.1. 停电后常见的情形是,送电几秒钟后又再次断电 1.2. 数百万台空调和冰箱的用电需求,使刚刚恢复的电力供应发生过载 1.3. 当电力供应不足时,增加的电流很快就到达满负荷,导致过载,触…

chatgpt赋能python:Python中的点形状:了解点与其表现形式

Python中的点形状:了解点与其表现形式 在Python编程中,点是一种十分重要的形状,它不仅可以用来表示数据结构中的节点,还可以用来绘制图形。本篇文章将介绍Python中点形状的表现形式和相关知识点。 点的表现形式 在Python中&…

跨 OT 部门管理来自新兴技术的网络风险挑战

本文首发微信公众号网络研究院,关注获取更多。 随着 AI 和自动化工具被引入企业,解决这些新技术(包括 OT 环境中的生成 AI)带来的网络风险需要一种综合方法。 这些新兴技术进步可以在 OT(运营技术)基础设…

【夜深人静写数据结构与算法 | 第八篇】哈希算法与哈希表

目录 前言: 哈希: 哈希表: 哈希表组成: 哈希表实例: 哈希函数: TIPS: 总结 前言: 如果此时我要你默写一个有一百位的数字,你要如何做才能保证不会漏写呢&#xf…

Jenkins安装手册

Jenkins安装手册 一、前期准备工作 因为我是在Windows系统上连接Linux服务器以及需要把在Windows系统下载的安装包上传到Linux系统,所以需要用到两个工具---putty 和FileZilla。 Putty是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端,但是…

IDEA新UI速览,成了VS Code的样子?

IntelliJ IDEA 2023.1 现已发布。此版本包括对新 UI 的改进,根据从用户那里收到的反馈进行了彻底改造。此外还实现了性能增强,从而在打开项目时更快地导入 Maven 和更早地使用 IDE 功能。由于采用了 background commit checks,新版本提供了简…

【首发】随身wifi编译/使用ffmpeg方法,包含openwrt和debian

目录 1.硬件改造 2.软件改造 3.下一步计划 背景是23年4月入了随身wifi的坑后,发现除了硬件上的改造,软件的可玩性也很大,网上可以找到不少打印机,直播推流,甚至家庭智能硬件的改造教程。笔者是因为改造遥控小车&…

【前端】Element-UI和Element-Plus的区别

文章目录 对移动端支持区别框架区别开发中使用的区别el-tableel-dialogel-buttonel-date-pickerel-iconechartsIcon图标库变化了组件的插槽slot使用变化了新增组件 来源 对移动端支持区别 Element-UI对应Element2:基本不支持手机版 Element-Plus对应Element3&…

chatgpt赋能python:Python生成A到Z的SEO

Python 生成A到Z的SEO Python 是一种简单易学、功能强大的编程语言,它不仅可用于数据分析、机器学习等领域,还可以用于 SEO 工作中的自动化。在 SEO 中,我们常需要生成不同字母序列来作为页面的标题标签(Title Tag)&a…