
# Iceberg简介
Iceberg是一个面向海量数据分析的开放表格式，是元数据和数据文件的一种组织方式，处于计算引擎和存储系统之间，旨在提供一种可扩展且可靠的方式来管理海量的数据表格。Iceberg的设计目标是提供一个可扩展、高性能、易于使用的表格管理解决方案，以满足现代分布式数据处理的需要。
本特性仅25.3.0及以上版本支持。
#### 主要特点
- **可扩展性**：Iceberg可轻松扩展到支持海量的数据表格和庞大的数据集合。
- **查询性能**：Iceberg的元数据管理和查询优化功能可以提高数据查询的性能。
- **数据版本管理**：Iceberg提供了可靠的数据版本管理功能，可以帮助用户对数据进行版本控制和回溯。
- **易于使用**：Iceberg提供了简单易用的API和命令行工具，使得用户可以轻松地创建、管理和查询数据表格。
- **灵活的分区策略**：Iceberg支持灵活的分区策略，可以根据不同的数据集合进行分区管理。
- **多版本数据支持**：Iceberg支持多版本数据，可以帮助用户对数据进行版本管理和回溯。
- **多种数据格式支持**：Iceberg支持多种数据格式，包括Parquet、ORC、Avro等。
 
#### 基本概念
- Table（表格）：Iceberg的最基本的概念是Table，它是一个数据表格的抽象表示。Table包含了表格的元数据信息、数据存储位置、分区策略等信息。
- Partition（分区）：Partition是将Table中的数据按照指定的规则划分为多个子集的过程。Partition可以基于数据的某些特征进行划分，例如按照时间、地理位置、产品类型等进行分区。
- Metadata（元数据）：Iceberg的元数据是指描述Table中的数据结构、分区策略、数据版本等信息的数据。元数据存储在持久化的存储介质中，例如HDFS、S3等。
- Snapshot（快照）：Snapshot是指Table在某个时间点上的数据视图，它包含了Table当前版本的数据和元数据信息。
- Manifest（清单）：Manifest是指Table中数据文件的清单列表，它包含了每个数据文件的元数据信息（例如文件路径、大小、分区信息等）。
 
#### 文件组织方式
如下图所示，Iceberg将数据分为元数据管理层、数据存储层。
![](https://support.huaweicloud.com/devg-fabric/figure/zh-cn_image_0000002482790681.png "点击放大")
- 元数据层：
  - metadata文件为json格式。存储当前版本的元数据信息，所有快照信息。
  
  - manifest list文件，即snapshot文件或清单列表文件，为avro格式。一次commit生成一个快照文件，每行存储一个manifest file的路径、其存储的数据文件的分区范围，增加删除了几个数据文件等信息，在查询时提供过滤信息，加快速度。
  
  - manifest文件，为avro格式。存储多个数据文件的信息列表，每行是一个数据文件的详细描述，包括状态、路径、分区信息、列级别的统计信息（最大最小值、空值数等）、文件大小以及文件里数据行数等。其中列级别的统计信息在扫描表数据时可过滤掉不必要的文件。
   

- 数据存储层：支持不同的文件格式，包括parquet、orc、avro。
 
