
# Iceberg表Schema演进介绍
Iceberg支持原地表演进，不需要新建表和重写数据，通过修改元数据就可以完成表演进。
#### Schema演进介绍
Iceberg支持以下Schema演进：
- 添加：向表或嵌套结构中添加新列。
- 删除：从表或嵌套结构中移除现有列。
- 重命名：重命名现有列或嵌套结构中的字段。
- 更新：扩大列、结构字段、Map键、Map值或列表元素的类型。需注意，Map键不支持添加或删除会改变相等性的结构字段。
- 重新排序：更改列或嵌套结构中字段的顺序。
Iceberg的模式更新是元数据更改，因此执行更新不需要重写任何数据文件。
#### 数据类型支持的演进范围
- 基本数据类型支持的演进范围如[表1]所示。
   表1基本数据类型支持的演进范围 
  | 原始类型          | v1、v2有效类型提升             | 注意事项                                                  |
  |:---|:---|:---|
  | unknown       | -                       | -                                                     |
  | int           | long                    | -                                                     |
  | date          | -                       | 不允许提升到timestamptz或timestamptz_ns。超出提升类型范围的值会导致任务运行失败。 |
  | float         | double                  | -                                                     |
  | decimal(P, S) | decimal(P', S)（P' \> P） | 仅扩大精度。                                                |
     
  
- struct类型支持的演进范围如下：
  - 删除struct中的字段。
  
  - struct添加新字段。
  
  - 重命名struct中的字段。
  
  - 重新排序struct中的字段。
  
  - 演进struct中的字段（参考[表1]）。
   
 
