首页/数据/数仓建模速查/Iceberg 元数据三层结构
湖仓与引擎63 条

Iceberg 元数据三层结构

元数据分三层:metadata 文件(表结构、快照列表)、manifest list(快照对应的清单列表)、manifest 文件(数据文件与分区统计);查询计划靠统计裁剪文件。

数仓建模速查数据更新于 2026-10-13

Iceberg 元数据的三层结构

Iceberg 表不用目录树表达分区,而是用三层元数据描述数据文件:metadata 文件记录表结构与快照列表,manifest list 记录某个快照包含哪些清单,manifest 文件记录数据文件及其分区统计。查询规划时先读这一串元数据,靠统计信息排除不可能命中的文件,再决定真正读哪些。

基本信息

第一层metadata 文件:表结构、快照列表、当前快照指针
第二层manifest list:一个快照对应的清单列表
第三层manifest:数据文件路径与分区、列级统计
收益文件级裁剪,避免扫描全表
代价小文件越多,元数据解析越慢

典型使用场景

  • 排查数据问题:直接查 files 元数据表,确认某天分区到底有哪些文件
  • 时间旅行:按快照读取历史版本的数据,用于复现与比对
  • 定位小文件:按文件大小分布判断是否需要合并
  • 评估分区健康度:按分区统计文件数与平均大小
  • 审计变更:按快照列表追溯每次写入的时间与操作

查看快照与文件

查看快照与文件
-- 快照列表:每次提交产生一个快照
SELECT snapshot_id, committed_at, operation
FROM demo.db.trade_order.snapshots
ORDER BY committed_at DESC LIMIT 5;

-- 文件级明细:查看某天分区的数据文件
SELECT file_path, file_size_in_bytes, record_count
FROM demo.db.trade_order.files
WHERE partition.dt = DATE '2026-10-12';

三层元数据读法

层级内容异常表现
metadata表结构、快照、当前指针指针指向错误快照会看到旧数据
manifest list快照包含的清单清单过多时规划耗时上升
manifest文件路径与分区统计统计缺失导致裁剪失效
files 元数据表文件级明细视图小文件密集时行数巨大

什么时候需要合并

判断是否该做文件合并,看三个信号:单位分区的文件数量明显高于写入批次数,单个文件大小远低于目标值,以及查询规划阶段耗时占比上升。频繁的小批写入是主要原因,尤其是流式落表。合并动作按分区调度即可,不必整表重写。

元数据表(snapshots、files、manifests 这些)是排查问题的第一手材料:与其猜数据在哪,不如直接查文件清单,能省掉大量摸索时间。
频繁小批量写入会产生海量小文件,manifest 随之膨胀,规划查询逐步变慢;等到查询明显卡顿才开始治理,清理窗口会非常紧张。

易错点

  • 小批写入不治理,小文件与 manifest 同步膨胀,查询规划越来越慢
  • 手工移动或删除底层数据文件,快照指向失效,表直接读不出来
  • 忽略快照与孤立文件的保留策略,元数据体积无限增长
  • 只关注数据文件大小、不看分区文件数量,合并后仍然存在规划瓶颈

数据来源与参考

  • Apache Iceberg 官方文档:Table Spec
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌