什么是 Apache Iceberg?了解 Iceberg 表

Jeffrey Erickson | 资深撰稿人 | 2025 年 11 月 17 日

Iceberg 表由 Netflix 工程师创建,当时该流媒体服务的实时分析工作已超出其基于 Apache Hive 的数据仓库的处理极限。他们的解决方案是什么?开发一种位于批量数据存储层上方的表格式。他们将这种格式命名为 Iceberg 表,并发现这个新系统确实为处理海量、频繁更新的数据存储提供了一个可扩展性和可预测性更强的平台。

发现 Iceberg 技术解决了大型、复杂数据湖仓一体用户普遍面临的问题后,该公司于 2018 年将该技术开源并捐赠给 Apache 软件基金会。Iceberg 迅速收获了热情的用户群体,并于 2020 年成为 Apache 顶级项目。如今它已被开发人员社区广泛采用,并受到 Oracle Autonomous AI Database 等超大规模云数据管理系统的支持。以下是关于 Iceberg 功能和使用方式的概览。

什么是 Apache Iceberg?

Apache Iceberg 是一种开源表格式,旨在简化海量数据湖和数据湖仓一体的管理,同时提高查询性能。

Iceberg 表不同于 Postgres、MySQL 或 Oracle 等数据库中的传统关系表。关系表将元数据和数据都存储在数据处理所在的数据库中,非常适合结构化应用程序数据。此外,还可以强制实施数据库中表之间的严格关系。而 Iceberg 表则将数据和元数据都存储在某种形式的文件系统存储层中,例如本地文件系统、Amazon S3、Google Cloud Storage 或 Oracle Object Storage。数据与元数据的存储及计算分离后,数据处理便与数据本身解耦,最终用户可灵活选择适合其特定需求的处理引擎。

Iceberg 表结合了数据湖的可扩展性和灵活性与传统数据仓库的可靠性和性能,为数据分析提供支持,因而成为数据湖仓一体中的流行格式。例如,它们支持对海量非结构化数据执行实时分析和批量处理工作负载,同时提供符合 ACID 标准的事务。ACID 事务为数据库事务提供原子性、一致性、隔离性和持久性,从而确保数据完整性,是关系数据库和数据仓库的基础。Iceberg 表将这种完整性扩展到了数据湖仓一体事务中。

同时,Iceberg 表还十分灵活,支持为不同的工作负载指定不同的数据类型。对于批量分析,Iceberg 支持 Parquet 或 ORC 等列格式,以及 Avro 等基于行的格式。例如,要在 Iceberg 中使用 Parquet 文件,您需要创建一个 Iceberg 表,并使用 Iceberg 提供的工具将其配置为使用 Parquet 作为数据文件格式。Iceberg 表还支持高效查询功能,如数据分区和剪枝,这减少了每次查询需要扫描的数据量。

Iceberg 表格式的另一个优势是其先进的数据版本控制功能,例如快照和时间旅行。通过时间旅行,对表的每次更改都以新快照形式记录,用户可查询表在历史任意时间点的数据。此功能对审计、调试和合规用途非常实用,当然也可用于必要时回滚更改。

什么是 Iceberg 表?

Iceberg 表是一种专为数据湖中的大规模分析设计的开源表格式。Iceberg 表具备自描述特性,即包含有关自身模式与数据的元数据,从而简化查询和管理。

关键要点

  • Apache Iceberg 是一种开源表格式,旨在简化大数据工作负载的管理工作并提高查询性能。
  • Iceberg 表包含有关自身模式与数据的元数据,可与处理数据分析的计算资源分开存储。
  • Iceberg 表可以被不同的数据处理引擎同时访问和更新。
  • 强大的版本控制功能和对时间旅行的支持,意味着您可以查询数据在过去任意时间点的状态。
  • Iceberg 支持 ACID 事务,为数据湖仓一体管理提供了高水平的数据完整性和一致性。

Apache Iceberg 详解

Iceberg 表是一种开源表格式,由 Apache 基金会管理,专为数据湖仓一体中的大规模数据分析设计。Apache Iceberg 表解决了在多个用户或进程同时写入同一数据集的场景下,管理和查询大型数据集的挑战。

为实现这一目标,Iceberg 表提供了若干关键架构功能和管理优势。首先,Iceberg 表具备自描述特性,即包含有关自身模式与数据的元数据。它们驻留在云存储层中,例如 Amazon S3、Oracle Object Storage、Google Cloud Storage 或 Hadoop Distributed File System (HDFS),而不是数据库或其他查询引擎的一部分。这带来了许多优势。例如,由于它们与处理查询所需的计算能力分开保存,因此 Iceberg 表可以与您偏好的数据处理引擎配合使用,例如 Apache Spark 和 Flink、Trino,以及 Oracle Autonomous AI Database 或其他企业数据管理系统。

Iceberg 表为管理和查询大型复杂数据湖仓一体提供了一系列实用的功能,如数据版本控制和 ACID 事务。此外,Iceberg 的模式演进能力使组织能够随时间推移调整其数据模式,而无需进行复杂且耗时的表重写。强大的数据版本控制功能包括时间旅行能力,这有助于维护清晰可追溯的数据变更历史,并支持用户查询数据在任意历史时间点的状态。

Iceberg 表在数据格式和处理引擎方面提供了灵活性,因此工程师可以为每个工作负载(如批量分析或事务处理)选择最适合的数据存储格式。

Iceberg 表架构中的数据安全,由 Apache 基金会的原生功能,以及云存储供应商和访问、查询 Iceberg 表的数据管理系统所提供的功能共同保障。最终成果将融合数据加密、访问控制、数据脱敏等数据治理功能,以及用于从故障或攻击中恢复的复制与同步能力。

Apache Iceberg 如何运作?

Apache Iceberg 是一种开放表格式,旨在帮助高效管理和查询 PB 级数据集。它的开发初衷是解决数据湖现有文件格式的局限性,这些格式未提供在表层面管理数据的方法。

与传统表不同,Iceberg 表专为应对频繁更新、删除和模式演进的大数据集的复杂性设计。事实证明,无论是进行批处理、实时流处理还是交互式查询,Iceberg 都是一种稳健且高效的数据管理方式。以下是获得这些优势的方法:

  • 开放表格式:Iceberg 表驻留在数据存储层中,并包含跟踪表状态的元数据,包括数据文件的位置和状态。
  • 元数据管理:表的元数据存储在您选择的元数据目录中,例如适用于 Hadoop 环境的 Hive Metastore,或另一个目录,如适用于典型云存储的 AWS Glue。这些工具为表定义、模式和其他元数据提供了集中化、结构化的存储库,而目录则提供稳健的元数据管理,并可与各种数据处理引擎轻松集成。
  • 强大的版本控制:此元数据支持版本化,这意味着对表的每次更改(如添加或删除数据)都会生成新版本的元数据,从而支持跟踪表的历史记录并可按需回滚到之前的状态。此过程中的一个关键特性是 Iceberg 对 ACID 事务的支持。这意味着插入、更新和删除等操作具备原子性和一致性,可确保即使在多个操作并发执行的情况下,表仍保持有效状态。Iceberg 通过快照模型实现这一点,每个快照都代表表在特定时间点的视图,且视图一致。例如,当您执行写操作时,Iceberg 会创建一个包含此更改的新快照,而之前的快照在新快照提交之前保持不变。这些快照支持时间旅行功能,让您能够查询过去任意时间点的数据。这对于调试、合规操作和其他用例非常实用。
  • 模式演进:Iceberg 还支持模式演进,您可以添加、删除或修改表中的列,而无需重写整个数据集,这对于模式经常随时间变化的大数据环境是必不可少的。更改模式时,Iceberg 会更新元数据以反映变化,而数据文件仅在必要时修改,从而最大限度地降低模式变更开销。
  • 文件格式选择:Iceberg 表将数据存储在文件中,通常采用 Parquet、ORC 或 Avro 等格式,这些格式已针对您的用例优化了存储和查询效率。
  • 处理框架选择:Iceberg 可与广泛的数据处理框架和引擎集成,例如开源的 Apache Spark、Apache Flink 和 Trino,或企业数据平台,如 Oracle Autonomous AI Database。这种集成使您可以像查询原生表一样查询 Iceberg 表,在发挥 Iceberg 性能和可扩展性优势的同时,保留现有数据处理管道的灵活性与强大功能。

使用 Apache Iceberg 的优势

Apache Iceberg 的诸多优势使其成为希望高效、可靠地管理和处理大型数据集的组织的理想选择。

  • ACID 事务:对于需要高数据完整性或实时分析的应用,Apache Iceberg 支持 ACID 事务,可确保数据操作是可靠且一致的。
  • 时间旅行与版本控制:对于审计和调试等常见流程,Iceberg 支持维护表的多个版本记录。这样可以实现时间旅行查询,查看数据在任意历史时间点的状态。
  • 与数据处理引擎集成:Iceberg 可以与主流数据处理引擎(如 Apache Spark、Apache Flink 和 Trino)配合使用,并且可以轻松地由企业数据管理引擎(如 Oracle Autonomous AI Database)来管理。这有助于打破数据管理提供商之间的壁垒,并使您能够在数据管道中利用最优秀的数据查询和处理工具。
  • 模式演进:Iceberg 表将模式变更存储在元数据文件中,因此您可以随时间推移修改数据模式的结构,而不会中断现有数据或查询。此功能支持添加、删除或重命名列,甚至更改数据类型,同时保持数据完整性和一致性。现有查询将直接使用它们创建时处于活跃状态的模式。
  • 不断发展的生态系统:Iceberg 可与广泛的数据处理框架和引擎集成,包括 Spark、Flink 和 Trino,以及 BigQuery、Amazon Redshift、Snowflake 和 Oracle AI Database 等云端数据仓库,这使其成为适合现代数据架构的通用选择。

Apache Iceberg 用例

Apache Iceberg 是一种适用于大数据工作负载的高性能表格式,支持一系列数据类型和多种查询引擎以及 ACID 事务。以下是 Apache Iceberg 的五个常见用例。

  • 数据湖管理:Iceberg 最初旨在帮助管理大型数据湖,为 智能数据湖 中 PB 级非结构化数据提供结构化且高效的存储、查询和管理方式。
  • 实时分析:Iceberg 可在实时分析管道中使用,以确保数据能够一致、可靠地用于分析。它对 ACID 事务和快照的支持有助于维护数据完整性和一致性,即使在数据频繁更新的情况下也是如此。
  • 数据版本控制与审计:Iceberg 的版本控制功能支持跟踪数据随时间的变更。这对于审计尤为实用,因为您可以轻松恢复到数据的历史版本或分析变更记录。
  • ETL 工作流:在提取、转换、加载 (ETL) 工作流中,Iceberg 可作为数据转换和加载流程的一个稳健且可扩展的目标平台。它处理海量数据的能力和对高效数据操作的支持,使其成为数据工程管道中的高价值工具。
  • 机器学习与数据科学:在需要以一致且高效的方式访问和处理数据的机器学习和数据科学任务中,Iceberg 表提供对数据的快速访问,并支持模型训练和验证的迭代特性。

谁在使用 Apache Iceberg?

Iceberg 表由 Netflix 工程师创建,旨在提升流媒体分析和其实时推荐引擎的速度和灵活性,并且它在这类用例中表现出色。Iceberg 现为由 Apache 基金会运营的开源项目,仍被 Netflix 及越来越多的组织使用,包括以下:

  • Snowflake:Snowflake 是 Apache Iceberg 的早期用户,利用它实现了数据的通用开放格式存储,并支持多种平台访问,从而增强了数据湖仓一体架构。
  • Oracle:Oracle 使用 Apache Iceberg 来优化其云数据仓库解决方案中的数据存储和查询。Oracle 还优化了其 Autonomous AI Database 查询引擎,以在各种云存储上读取和更新 Iceberg 表。
  • Apple:Apple 正越来越多地使用 Apache Iceberg 表,通过它来高效管理和查询其大型数据集。该公司频繁为 Apache Iceberg 项目做出贡献。
  • Airbnb:Airbnb 使用 Apache Iceberg 来提高公司数据仓库架构的性能。
  • Lyft:Lyft(现隶属于 DoorDash)使用 Apache Iceberg 来管理其数据湖,以及在其物流和配送运营中维护数据一致性。
  • Salesforce:Salesforce 利用 Apache Iceberg 来增强其数据湖和数据仓库服务,特别是因为其庞大而多样的客户群需要与广泛的数据处理框架和服务实现互操作性。

借助 Apache Iceberg 和 Autonomous AI Database 优化性能

Oracle Autonomous AI Database 支持 Apache Iceberg 表。如果您的数据集已在其他云上以 Iceberg 格式存储,Oracle Autonomous AI Database 可轻松读取它们,从而减少数据复制,提高运营灵活性。现在您可以充分利用 Iceberg 表来管理大型复杂数据集并优化查询性能,同时通过 Oracle 数据管理平台享受跨平台数据可访问性,您可以使用您偏好的大语言模型 (LLM) 构建可扩展的 AI 驱动型应用程序,并在云中或您的数据中心中部署。

Apache Iceberg 已经永久性地改变了数据管理格局。它诞生于 Netflix 等公司正艰难应对海量数据集和混合数据类型管理的时期。随着这些情况变得越来越普遍,Iceberg 表已成为现代数据生态系统的主流组成部分。随着更多企业希望简化其数据管道并从大数据分析中获取洞察,预计这一趋势将会持续。

您的数据基础设施是否已为支持相似性搜索和其他 AI 计划做好准备?我们的电子书为您规划了构建坚实数据基石的路径,助您为 AI 应用的成功部署奠定基础。

Apache Iceberg 常见问题解答

Apache Iceberg 比 Delta Lake 更好吗?

Delta Lake 和 Apache Iceberg 都不能被视为普遍更优的选择。两者都是用于管理数据集以进行分析的表格式。区分两者的一个简单方式是:Delta Lake 在 Spark 生态系统中表现最优,而 Iceberg 提供更广泛的兼容性,并与一系列数据管理引擎都能良好配合。

Apache Iceberg 的用途是什么?

Apache Iceberg 用于简化超大规模、复杂、多平台数据集的管理与查询,将其整合到单个统一数据层中,以进行分析处理。

注:为免疑义,本网页所用以下术语专指以下含义:

  1. 除Oracle隐私政策外,本网站中提及的“Oracle”专指Oracle境外公司而非甲骨文中国。
  2. 相关Cloud或云术语均指代Oracle境外公司提供的云技术或其解决方案。