更新时间:2025-12-10 GMT+08:00
分享

Iceberg表Schema演进介绍

Iceberg支持原地表演进,不需要新建表和重写数据,通过修改元数据就可以完成表演进。

Schema演进介绍

Iceberg支持以下Schema演进:

  • 添加:向表或嵌套结构中添加新列。
  • 删除:从表或嵌套结构中移除现有列。
  • 重命名:重命名现有列或嵌套结构中的字段。
  • 更新:扩大列、结构字段、Map键、Map值或列表元素的类型。需注意,Map键不支持添加或删除会改变相等性的结构字段。
  • 重新排序:更改列或嵌套结构中字段的顺序。

Iceberg的模式更新是元数据更改,因此执行更新不需要重写任何数据文件。具体的操作SQL请参考Spark DDL

数据类型支持的演进范围

  • 基本数据类型支持的演进范围如表1所示。
    表1 基本数据类型支持的演进范围

    原始类型

    v1、v2有效类型提升

    v3+有效类型提升

    注意事项

    unknown

    -

    任何类型 (any type)

    -

    int

    long

    long

    -

    date

    -

    timestamp、timestamp_ns

    不允许提升到timestamptz或 timestamptz_ns。超出提升类型范围的值会导致任务运行失败。

    float

    double

    double

    -

    decimal(P, S)

    decimal(P', S)(P' > P)

    decimal(P', S)(P' > P)

    仅扩大精度。

  • struct类型支持的演进范围如下:
    • 删除struct中的字段。
    • struct添加新字段。
    • 重命名struct中的字段。
    • 重新排序struct中的字段。
    • 演进struct中的字段(参考表1)。

相关文档