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将数据分为元数据管理层、数据存储层。
- 元数据层:
- metadata文件为json格式。存储当前版本的元数据信息,所有快照信息。
- manifest list文件,即snapshot文件或清单列表文件,为avro格式。一次commit生成一个快照文件,每行存储一个manifest file的路径、其存储的数据文件的分区范围,增加删除了几个数据文件等信息,在查询时提供过滤信息,加快速度。
- manifest文件,为avro格式。存储多个数据文件的信息列表,每行是一个数据文件的详细描述,包括状态、路径、分区信息、列级别的统计信息(最大最小值、空值数等)、文件大小以及文件里数据行数等。其中列级别的统计信息在扫描表数据时可过滤掉不必要的文件。
- 数据存储层:支持不同的文件格式,包括parquet、orc、avro。