# 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不支持添加或删除会改变相等性的结构字段。
   
 
