# 如何处理Schema演进后的数据兼容性
Paimon通过字段ID（Field ID）机制实现Schema演进后的数据兼容。每个字段在创建时被分配唯一的整数ID，该ID会被持久化到数据文件的Schema中。即使列名或列类型发生变化，通过字段ID仍可正确读取历史数据文件。
#### 注意事项
- 字段ID唯一性：每个字段的ID在表的生命周期内唯一，删除字段后其ID不会被重用，确保历史数据文件可正确解析。
- 类型变更限制：仅支持从低精度类型升级到高精度类型（如INT到BIGINT、FLOAT到DOUBLE），不支持不兼容的类型转换（如STRING到INT）。
- 非Paimon写入的文件：对于通过其他引擎（如Hive、Spark原生）写入的数据文件，文件Schema中不包含字段ID，读取时会以列名进行映射。如果Schema演进后存在列名复用，可能导致类型不匹配或读取到旧数据。
- 嵌套类型演进：对于struct、list、map等嵌套类型，其内部字段的演进同样遵循字段ID机制，确保嵌套结构的历史数据兼容性。
 
#### 建议
- 避免频繁修改表结构，每次Schema演进都会增加元数据复杂度。
- 删除列时建议使用软删除（将列标记为不使用而非物理删除），保留字段ID以支持历史数据回溯。
- 对于需要回填数据的列，建议通过Compaction操作在新写入的文件中填充新列的值，避免全表重写。
 
