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- 前缀的是快照相关的文件,记录表在特定时间点的状态
相关推荐
云朵大王4 小时前
SQL 视图与事务知识点详解及练习题
java·大数据·数据库
萤火虫儿飞飞6 小时前
从基础加热到智能生态跨越:艾芬达用创新重构行业价值边界!
大数据·人工智能·重构
seanmeng20226 小时前
Apache Iceberg on AWS - 通过Firehose流式导入数据到Iceberg表
大数据
运器1238 小时前
【一起来学AI大模型】PyTorch DataLoader 实战指南
大数据·人工智能·pytorch·python·深度学习·ai·ai编程
mit6.8249 小时前
[es自动化更新] Updatecli编排配置.yaml | dockerfilePath值文件.yml
大数据·elasticsearch·搜索引擎·自动化
Jinkxs9 小时前
Elasticsearch 简介
大数据·elasticsearch·搜索引擎
亮学长11 小时前
lodash不支持 Tree Shaking 而 lodash-es可以
大数据·前端·elasticsearch
risc12345611 小时前
Elasticsearch 线程池
java·大数据·elasticsearch
树谷-胡老师11 小时前
1965–2022年中国大陆高分辨率分部门用水数据集,包含:灌溉用水、工业制造用水、生活用水和火电冷却
大数据·数据库·arcgis