更新时间:2026-10-09 GMT+08:00
分享

Paimon表Schema演进介绍

Paimon支持原地表演进,不需要新建表和重写数据,通过修改元数据就可以完成表演进。Schema演进是元数据级别的更改,执行更新不需要重写任何数据文件。

Schema演进介绍

Paimon支持以下Schema演进:

  • 添加列:向表中添加新列,新列会被分配唯一的字段ID。
  • 删除列:从表中移除现有列,字段ID不会被重用。
  • 重命名列:更改现有列的名称,字段ID保持不变。
  • 修改列顺序:调整列在表中的位置。
  • 类型变更:支持从低精度类型升级到高精度类型,如INT到BIGINT、FLOAT到DOUBLE。

    Paimon通过字段ID(Field ID)来实现Schema演进后的数据兼容。每个字段在创建时被分配唯一的整数ID,该ID会被写入数据文件的Schema中。读取数据文件时,通过字段ID将元数据的列与文件中的列映射起来,即使列名或类型发生变化,历史数据文件仍可正确读取。

数据类型支持的演进范围

  • 基本数据类型支持的演进范围如下:
    • INT可升级为BIGINT。
    • FLOAT可升级为DOUBLE。
    • DECIMAL(P, S)可升级为DECIMAL(P', S)(P' > P),仅扩大精度。
  • struct类型支持的演进范围如下:
    • 删除struct中的字段。
    • struct添加新字段。
    • 重命名struct中的字段。
    • 重新排序struct中的字段。
    • 演进struct中的字段类型(参考基本数据类型支持的演进范围)。
  • list类型支持的演进范围如下:
    • list添加新元素字段(仅当元素为struct类型时)。
    • 删除list中的元素字段(仅当元素为struct类型时)。
    • 重命名list中的元素字段(仅当元素为struct类型时)。
    • 演进list中的元素类型(参考基本数据类型支持的演进范围)。
  • map类型支持的演进范围如下:
    • map添加新value字段(仅当value为struct类型时)。
    • 删除map中的value字段(仅当value为struct类型时)。
    • 重命名map中的value字段(仅当value为struct类型时)。
    • 演进map中的key或value类型(参考基本数据类型支持的演进范围)。需注意,map key不支持添加或删除会改变相等性的结构字段。

相关文档