什么是 Apache Iceberg?

上次更新时间:05/01/2026

Apache Iceberg 是一种开源表格式,专为存储在数据湖中的大型分析数据集而设计。Iceberg 表将数据作为文件集合进行管理,为现代数据架构提供了更高的可靠性、性能和灵活性。不妨将其视为位于数据湖存储(例如 Cloud Storage)之上的智能层,为您的海量数据集提供类似数据库的功能。Iceberg 并非只是管理文件,而是将表作为数据文件的集合进行管理,从而支持架构演化、时间旅行以及更高效的查询规划等功能。这使数据分析师、数据科学家和工程师能够更轻松、更高效地处理数据湖中的数据,并增加他们的分析工作负载。

什么是事务型数据湖?

事务型数据湖不仅可以大规模存储数据,还支持事务操作,以确保数据的准确性和一致性。Iceberg 表支持这些属性,统称为 ACID。

  • 原子性:保证每个事务都被视为一个单元,要么完全成功,要么完全失败,没有中间状态
  • 一致性:确保所有写入的数据都符合数据湖的定义规则。
  • 隔离性:允许多个事务同时发生,而不会相互干扰
  • 持久性:确保在提交事务后,即使发生系统故障,数据也不会丢失或损坏

Iceberg 表的常见应用场景

Iceberg 表适用于各种现代数据湖和湖仓一体应用场景,包括:

  • 合规性和隐私权:非常适合需要频繁删除数据以执行数据隐私权法的数据湖
  • 记录级更新:支持更新单个记录,而无需重新发布整个数据集,例如因客户退货而发生变化的销售数据
  • 管理不可预测的变化:支持缓慢变化维度 (SCD) 表,例如联系信息可能以未知间隔发生变化的客户记录
  • 时间旅行和审核:维护表快照的历史记录,允许用户查询历史版本以进行趋势分析,或回滚并纠正问题
  • 机器学习:提供一致且具备版本控制的数据集,这对于训练可靠的模型至关重要

谁在使用 Iceberg 表?

各种技术人员都利用 Iceberg 表来高效管理大型数据集:

  • 数据工程师和管理员:使用 Iceberg 表设计和构建可扩缩的可靠存储系统
  • 数据分析师和科学家:使用 Iceberg 表,通过熟悉的 SQL 和可重现的历史快照分析海量数据集

Iceberg 表的主要优势

让熟悉标准 SQL 的用户无需学习新语言即可执行复杂的数据湖操作。

支持对数据结构进行无缝更改(添加、重命名或移除列),而不会中断查询。

支持变更数据捕获 (CDC),允许用户仅处理自上次运行以来发生变化的数据,从而提高效率。

使用元数据来删减不必要的文件,并通过谓词下推等技术来加速查询执行。

兼容 Spark、Flink、Hive 和 Presto 等各种引擎。

Apache Iceberg 表的工作原理

Apache Iceberg 引入了一个元数据层,该层位于数据湖中的实际数据文件之上。与传统的基于文件的系统相比,此元数据以更有条理、更可靠的方式跟踪表的结构和内容。下面是其主要机制的详细说明:

  • 元数据管理:Iceberg 维护元数据文件,这些文件描述了表的架构、分区和数据文件的位置。这些元数据文件通常与数据一起存储在数据湖中。
  • 目录:Iceberg 依赖于目录来跟踪每个表的当前元数据位置。此目录可以是 Hive Metastore 等服务、基于文件系统的实现,或云原生目录服务。
  • 表快照:每次对表进行更改(例如添加数据、删除数据或架构演化)时,Iceberg 都会创建表元数据的新快照。这些快照不可更改,并提供表状态的历史记录。
  • 清单列表和清单文件:每个快照都指向一个清单列表,而清单列表则列出了一个或多个清单文件。清单文件包含有关各个数据文件的元数据,包括其位置、分区值和统计信息(如行数和值范围)。

Apache Iceberg 架构

Apache Iceberg 的架构涉及多个协同工作的关键组件:

  • 数据湖存储:这是底层存储层,例如 Cloud Storage,用于存储实际数据文件(采用 Parquet、ORC 或 Avro 等格式)和 Iceberg 元数据文件。
  • Iceberg REST 目录:此组件负责管理 Iceberg 表的元数据指针。它充当中央注册表,用于跟踪每个表当前的元数据版本。常见的目录实现方式包括:
  • Hive Metastore:一种广泛使用的元数据库,通常与基于 Hadoop 的系统一起使用。
  • 文件系统目录:这是一种简单的实现方式,目录信息直接存储在数据湖文件系统中。
  • 云原生目录服务:由云服务提供商提供的托管式服务,用于存储和管理元数据。
  • Iceberg 元数据:由几层元数据文件组成,用于跟踪表的结构和数据:
  • 表元数据文件:此文件指向当前清单列表,并包含有关表的高级信息,例如其架构和分区规范。
  • 清单文件列表:此文件列出了包含表特定快照中数据文件元数据的清单文件。
  • 清单文件:这些文件包含有关各个数据文件的详细信息,包括其位置、分区值和统计信息。
  • 查询引擎和处理框架:计算引擎直接与 Iceberg 元数据互动,以读取、写入和执行 ACID 事务。Apache Spark 等开源框架使用此元数据来跳过不需要的文件并加快查询执行速度。
  • 计算资源:这是运行查询引擎和处理框架的基础架构(例如虚拟机和容器)。

Apache Iceberg 和数据湖

Apache Iceberg 通过添加可靠且高性能的表格格式,显著增强了数据湖的功能。在不使用 Iceberg 等表格格式的传统数据湖中,数据通常只是一些文件的集合。这可能导致多个挑战:

  • 缺乏架构演化:更改数据结构可能既复杂又容易出错
  • 读取不一致:并发写入操作可能导致查询同时读取旧数据与新数据
  • 查询性能低:如果查询引擎缺乏元数据引导,通常需要扫描大量数据
  • 数据管理难度高:时间旅行和版本控制等功能无法轻松使用

Iceberg 通过在数据湖之上提供结构化层来解决这些限制。它为数据湖引入类似数据库的功能,使其转变为功能更强大、更易管理的数据湖仓一体。通过将表作为包含丰富元数据的文件集合进行管理,Iceberg 可实现以下功能:

  • 可靠且一致的数据访问:ACID 属性可确保数据完整性
  • 高效的查询处理:元数据驱动的数据跳过和过滤功能可加快查询速度
  • 灵活的数据管理:架构演化和时间旅行功能可简化数据维护和分析
  • 互操作性:Iceberg 旨在与数据湖中常用的各种查询引擎和处理框架兼容

利用 Google Cloud 解决业务难题

新客户可获得 $300 赠金,用于抵扣 Google Cloud 的费用。
与 Google Cloud 销售专员联系,详细讨论您的独特挑战。

Google Cloud 和 Apache Iceberg

Google Cloud 提供了一个可靠的环境,可用于利用 Apache Iceberg。多项 Google Cloud 服务可与 Iceberg 顺畅集成,让用户能够构建功能强大且可扩缩的数据湖仓一体解决方案。

更进一步

获享 $300 赠金以及 20 多种提供“始终免费”用量的产品,开始在 Google Cloud 上构建项目。

Google Cloud