概述

最近更新时间: 2026-03-13 09:03:00

简介

Apache Iceberg 是一种用于大型分析数据集的开放表格式,是实现数据湖架构的核心基础之一,支持 ACID 事务、时间旅行、模式演变、分区演变等功能。Iceberg 使用一种与 SQL 表类似的高性能表格式将表添加到计算引擎(包括 Spark、Trino、PrestoDB、Flink、Hive 和 Impala)。Iceberg 可以帮助消费者在使用数据湖时获得更好的性能和灵活性,简化数据架构,并可以更快地向消费者提供数据,同时降低计算和存储成本。

架构

Apache Iceberg 的架构如下图所示。

Apache Iceberg 对元数据进行了分层,这是 Iceberg 能提供高速的读取、写入和查询的关键。Iceberg 通过元数据层实现智能修剪,它首先可以有效地跟踪并判断清除哪些文件和目录,然后扫描文件统计信息以确定是否需要读取该文件以进行特定查询。Iceberg 的架构自上而下可分为三个层次:catalog层元数据层数据层

  1. catalog层
    catalog 层主要用于跟踪当前元数据文件的引用/指针。这通常是一些可以提供事务保证的存储,如关系数据库(PostgreSQL 等)或元存储(Hive、Project Nessie等)。
  2. 元数据层(Metadata Layer
    Iceberg 使用三层元数据文件,涵盖三个不同的范围。
    清单文件(Manifest files)——快照的子集。这些文件跟踪该子集中数据层中的各个文件以及元数据,以便进一步的修剪等工作。
    清单列表(Manifest lists)——定义表的快照并列出组成该快照的所有清单文件以及这些清单文件上的元数据以供修剪。
    元数据文件(Metadata files)——定义表并跟踪清单列表、当前和以前的快照、模式和分区方案。
  3. 数据层(Data Layer
    数据层是Iceberg的最底层,主要用于保存表中的实际数据,由两种类型的文件组成:
    数据文件(Data files)——以 Parquet、ORC 或 Avro 等文件格式存储的数据文件。
    删除文件(Delete files)——跟踪数据文件中仍存在但应被视为已删除的记录。