更新时间:2026-07-03 GMT+08:00
分享

Iceberg功能介绍

Apache Iceberg是一种面向海量分析数据集的开放表格式,通过高性能表格式为计算引擎添加表功能,使用方式与SQL表完全一致。

Iceberg专为超大规模表而构建,已在实际业务环境中得到应用,单个表可容纳数十PB数据,且即使如此庞大的表也无需分布式SQL引擎即可读取。

Iceberg支持以下功能:

  • 快速扫描规划:读取表或查找文件操作无需分布式SQL引擎即可完成。
  • 高级过滤:通过分区和列级统计信息,利用表元数据对数据文件进行裁剪。
  • Iceberg专为解决最终一致性云对象存储中的正确性问题而设计。兼容所有云存储,在HDFS中通过避免列表操作和重命名来减少NameNode拥塞。
  • 可序列化隔离:表变更具有原子性,部分或未提交的变更对读取者不可见。
  • 多个并发写入器使用乐观并发控制,即使发生写入冲突也会重试以确保兼容的更新操作成功完成。

主要特点

  • 可扩展性:Iceberg可轻松扩展到支持海量的数据表格和庞大的数据集合。
  • 查询性能:Iceberg的元数据管理和查询优化功能可以提高数据查询的性能。
  • 数据版本管理:Iceberg提供了可靠的数据版本管理功能,可以帮助用户对数据进行版本控制和回溯。
  • 易于使用:Iceberg提供了简单易用的API和命令行工具,使得用户可以轻松地创建、管理和查询数据表格。
  • 灵活的分区策略:Iceberg支持灵活的分区策略,可以根据不同的数据集合进行分区管理。
  • 多版本数据支持:Iceberg支持多版本数据,可以帮助用户对数据进行版本管理和回溯。

基本概念

  • 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 File文件,为Avro格式。存储多个数据文件的信息列表,每行是一个数据文件的详细描述,包括状态、路径、分区信息、列级别的统计信息(最大最小值、空值数等)、文件大小以及文件里数据行数等。其中列级别的统计信息在扫描表数据时可过滤掉不必要的文件。
  • 数据存储层:默认为Parquet文件格式。

相关文档