# Iceberg表Schema演进介绍
Iceberg支持表原地演进，不需要新建表和重写数据，通过修改元数据就可以完成表演进。
#### Schema演进介绍
Iceberg支持以下Schema演进：
- 添加：向表或嵌套结构中添加新列。
- 删除：从表或嵌套结构中移除现有列。
- 重命名：重命名现有列或嵌套结构中的字段。
- 更新：扩大列、结构字段、Map键、Map值或列表元素的类型。需注意，Map键不支持添加或删除会改变相等性的结构字段。
- 重新排序：更改列或嵌套结构中字段的顺序。
Iceberg的模式更新是元数据更改，因此执行更新不需要重写任何数据文件。具体的操作SQL请参考[Spark DDL](https://iceberg.apache.org/docs/1.7.0/spark-ddl/)。
#### 数据类型支持的演进范围
- 基本数据类型支持的演进范围如[表1]所示。示例请参见[ALTER TABLE ALTER COLUMN](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_300823.html#mrs_01_300823__zh-cn_topic_0000002527158282_section1296319281318)。
   表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]）。
   
 
