Apache Iceberg on AWS - 理解Iceberg表格式

通过Glue ETL Job将Aurora数据导入到Iceberg表后,我们可以在对应的S3桶中看到如下数据目录:

其中,metadata目录存放了Iceberg表的元数据,data存放实际的数据文件。

Metadata数据解析

元数据 JSON 文件

  • 00000-a4fe4565-e128-4f1c-aea6-18471c4e8748.metadata.json
  • 00001-5fc33466-9cd7-4d02-87c9-71e4cc2c1627.metadata.json

这些是 Iceberg 表的元数据文件,以数字序列开头(00000, 00001),表示元数据版本。它们包含表的模式定义、分区信息、快照历史等。序列号越大,表示越新的元数据版本。

让我们来看下具体的metadata内容:

json 复制代码
{
  "format-version" : 2,
  "table-uuid" : "163526bc-3eef-4fb9-b92b-0ccb37a90117",
  "location" : "s3://iceberg-workshop-datalake-7arcfcyrvanr/public_customers",
  "last-sequence-number" : 1,
  "last-updated-ms" : 1752391363612,
  "last-column-id" : 5,
  "current-schema-id" : 0,
  "schemas" : [ {
    "type" : "struct",
    "schema-id" : 0,
    "fields" : [ {
      "id" : 1,
      "name" : "customer_id",
      "required" : false,
      "type" : "int",
      "doc" : ""
    }, {
      "id" : 2,
      "name" : "whisker_name",
      "required" : false,
      "type" : "string",
      "doc" : ""
    }, {
      "id" : 3,
      "name" : "email",
      "required" : false,
      "type" : "string",
      "doc" : ""
    }, {
      "id" : 4,
      "name" : "paw_phone",
      "required" : false,
      "type" : "string",
      "doc" : ""
    }, {
      "id" : 5,
      "name" : "membership_date",
      "required" : false,
      "type" : "timestamp",
      "doc" : ""
    } ]
  } ],
  "default-spec-id" : 0,
  "partition-specs" : [ {
    "spec-id" : 0,
    "fields" : [ ]
  } ],
  "last-partition-id" : 999,
  "default-sort-order-id" : 0,
  "sort-orders" : [ {
    "order-id" : 0,
    "fields" : [ ]
  } ],
  "properties" : {
    "write.parquet.compression-codec" : "zstd"
  },
  "current-snapshot-id" : 5279933414298446801,
  "refs" : {
    "main" : {
      "snapshot-id" : 5279933414298446801,
      "type" : "branch"
    }
  },
  "snapshots" : [ {
    "sequence-number" : 1,
    "snapshot-id" : 5279933414298446801,
    "timestamp-ms" : 1752391363612,
    "summary" : {
      "operation" : "append",
      "spark.app.id" : "spark-application-1752391336970",
      "added-data-files" : "10",
      "added-records" : "10",
      "added-files-size" : "17225",
      "changed-partition-count" : "1",
      "total-records" : "10",
      "total-files-size" : "17225",
      "total-data-files" : "10",
      "total-delete-files" : "0",
      "total-position-deletes" : "0",
      "total-equality-deletes" : "0",
      "engine-version" : "3.5.4-amzn-0",
      "app-id" : "spark-application-1752391336970",
      "engine-name" : "spark",
      "iceberg-version" : "Apache Iceberg 4f0aa51 (commit 4f0aa5157785b36d43eaaeb48d870fdb4a57d768)"
    },
    "manifest-list" : "s3://iceberg-workshop-datalake-7arcfcyrvanr/public_customers/metadata/snap-5279933414298446801-1-73aeaf0e-d9af-42cd-abd5-45e352d1b137.avro",
    "schema-id" : 0
  } ],
  "statistics" : [ ],
  "partition-statistics" : [ ],
  "snapshot-log" : [ {
    "timestamp-ms" : 1752391363612,
    "snapshot-id" : 5279933414298446801
  } ],
  "metadata-log" : [ {
    "timestamp-ms" : 1752390893889,
    "metadata-file" : "s3://iceberg-workshop-datalake-7arcfcyrvanr/public_customers/metadata/00000-a4fe4565-e128-4f1c-aea6-18471c4e8748.metadata.json"
  } ]
}

基本信息

  • 格式版本format-version: 2(使用的是 Iceberg v2 格式)
  • 表 UUID163526bc-3eef-4fb9-b92b-0ccb37a90117(表的唯一标识符)
  • 位置s3://iceberg-workshop-datalake-7arcfcyrvanr/public_customers(表数据存储的 S3 路径)
  • 最后序列号1(最后操作的序列号)
  • 最后更新时间1752391363612(毫秒时间戳,对应 2025 年 7 月 13 日)

表结构定义

  • 当前 Schema ID0
  • 最后列 ID5(表中定义的最大列 ID)
  • 表结构 :包含 5 个字段
    • customer_id(整数类型)
    • whisker_name(字符串类型)
    • email(字符串类型)
    • paw_phone(字符串类型)
    • membership_date(时间戳类型)
    • 所有字段都是可空的(required: false

分区和排序信息

  • 分区规范 :使用默认分区规范 ID 0,没有定义分区字段(fields: []
  • 排序规范 :使用默认排序规范 ID 0,没有定义排序字段(fields: []

表属性

  • 使用 zstd 压缩算法存储 Parquet 文件:"write.parquet.compression-codec" : "zstd"

快照信息

  • 当前快照 ID5279933414298446801
  • 分支引用main 分支指向当前快照
  • 快照详情
    • 序列号:1
    • 创建时间:1752391363612(2025 年 7 月 13 日)
    • 操作类型:append(数据追加操作)
    • 添加了 10 个数据文件,包含 10 条记录
    • 数据文件总大小:17225 字节
    • 使用的是 Spark 3.5.4 引擎
    • 清单列表文件:s3://iceberg-workshop-datalake-7arcfcyrvanr/public_customers/metadata/snap-5279933414298446801-1-73aeaf0e-d9af-42cd-abd5-45e352d1b137.avro 日志信息
  • 快照日志:记录了快照 ID 和创建时间
  • 元数据日志:记录了元数据文件的历史,包含一个条目指向初始元数据文件

Avro 数据文件

  • 73aeaf0e-d9af-42cd-abd5-45e352d1b137-m0.avro
  • snap-5279935414298446801-1-73aeaf0e-d9af-42cd-abd5-45e352d1b137.avro

这些是 Avro 格式的文件:

  • 带有 -m0.avro 后缀的通常是清单文件(manifest file),包含数据文件的列表和元数据
  • 带有 snap- 前缀的是快照相关的文件,记录表在特定时间点的状态
相关推荐
王小王-1237 小时前
基于Hadoop的全国农产品批发价格数据分析与可视化与价格预测研究
大数据·hive·hadoop·flume·hadoop农产品价格分析·农产品批发价格·农产品价格预测
请提交用户昵称8 小时前
Spark运行架构
大数据·架构·spark
阿Paul果奶ooo10 小时前
Flink概述
大数据·flink
CDA数据分析师干货分享11 小时前
【CDA 新一级】学习笔记第1篇:数据分析的时代背景
大数据·笔记·学习·数据分析·cda证书·cda数据分析师
软件开发小陈11 小时前
“我店模式”:零售转型中的场景化突围
大数据
计算机毕业设计木哥12 小时前
基于大数据spark的医用消耗选品采集数据可视化分析系统【Hadoop、spark、python】
大数据·hadoop·python·信息可视化·spark·课程设计
xiao-xiang13 小时前
elasticsearch mapping和template解析(自动分词)!
大数据·elasticsearch·搜索引擎
sleetdream14 小时前
Flink DataStream 按分钟或日期统计数据量
大数据·flink
人大博士的交易之路15 小时前
今日行情明日机会——20250813
大数据·数据挖掘·数据分析·缠中说禅·涨停回马枪
Elastic 中国社区官方博客15 小时前
超越相似名称:Elasticsearch semantic text 如何在简洁、高效、集成方面超越 OpenSearch semantic 字段
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索