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- 前缀的是快照相关的文件,记录表在特定时间点的状态
相关推荐
A小弈同学2 小时前
新规则,新游戏:AI时代下的战略重构与商业实践
大数据·人工智能·重构·降本增效·电子合同
字节跳动数据平台3 小时前
一客一策:Data Agent 如何重构大模型时代的智能营销?
大数据·agent
用户Taobaoapi20144 小时前
京东图片搜索相似商品API开发指南
大数据·数据挖掘·数据分析
镭眸5 小时前
因泰立科技:用激光雷达重塑智能工厂物流生态
大数据·人工智能·科技
IT研究室7 小时前
大数据毕业设计选题推荐-基于大数据的贵州茅台股票数据分析系统-Spark-Hadoop-Bigdata
大数据·hadoop·spark·毕业设计·源码·数据可视化·bigdata
Lx3528 小时前
Hadoop异常处理机制:优雅处理失败任务
大数据·hadoop
小嵌同学8 小时前
Linux:malloc背后的实现细节
大数据·linux·数据库
IT毕设梦工厂9 小时前
大数据毕业设计选题推荐-基于大数据的国家基站整点数据分析系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·spark·毕业设计·源码·数据可视化
江瀚视野9 小时前
苹果要在抖音上卖iPhone了?苹果看上了抖音什么?
大数据
微三云-轩9 小时前
区块链系统:解决549 亿元积分商城是否违法的问题
大数据·小程序·重构·区块链·生活