文档首页/ MapReduce服务 MRS/ 组件操作指南(LTS版)/ 使用Iceberg(MRS 3.6.0.1及之后版本)/ 基于Spark使用Iceberg/ Iceberg DDL语法说明/ ALTER TABLE
更新时间:2026-06-11 GMT+08:00
ALTER TABLE
在Spark中,Iceberg完全支持ALTER TABLE相关操作。
前提条件
需已存在Iceberg表,例如,执行以下命令创建表:
CREATE TABLE prod.db.sample ( id int, name string, gender string, salary int, comb int, col0 int, col1 bigint, col2 float, col3 double, col4 decimal(10,4), col5 string, col6 date, col7 timestamp, col8 boolean, par date ) USING iceberg PARTITIONED BY (par) TBLPROPERTIES( 'write.format.default'='parquet' );
ALTER TABLE SET/UNSET TBLPROPERTIES
设置与移除表属性(ALTER TABLE ... SET/UNSET TBLPROPERTIES):
- 设置表属性:
ALTER TABLE prod.db.sample SET TBLPROPERTIES ('read.split.target-size'='268435456');SET TBLPROPERTIES命令也可用于设置表的注释(描述信息):
ALTER TABLE prod.db.sample SET TBLPROPERTIES ( 'comment' = 'A table comment.');
- 移除表属性,可使用UNSET命令:
ALTER TABLE prod.db.sample UNSET TBLPROPERTIES ('read.split.target-size');
ALTER TABLE ADD/RENAME/DROP COLUMN
- 新增列
- 可使用ALTER TABLE语句的ADD COLUMNS子句向Iceberg表添加列,且不允许通过添加列的方式修改映射(map)的 “键(key)” 列,仅能更新映射的值(value)。示例如下:
- 向“prod.db.sample”表中添加struct类型的“point”列:
ALTER TABLE prod.db.sample ADD COLUMN point struct<x: double, y: double>;
- 向“prod.db.sample”表中添加double类型的“point.z”列:
ALTER TABLE prod.db.sample ADD COLUMN point.z double;
- 向“prod.db.sample”表中添加array类型的“points”列:
ALTER TABLE prod.db.sample ADD COLUMN points array<struct<x: double, y: double>>;
- 向“prod.db.sample”表中添加struct类型的“point”列:
- 也可通过添加FIRST或AFTER子句,在表中的任意位置添加列,示例如下:
- 示例一:
ALTER TABLE prod.db.sample ADD COLUMN new_column bigint AFTER {表中已有字段名(例如id,data等)}; - 示例二:
ALTER TABLE prod.db.sample ADD COLUMN new_column bigint FIRST;
- 示例一:
- 可使用ALTER TABLE语句的ADD COLUMNS子句向Iceberg表添加列,且不允许通过添加列的方式修改映射(map)的 “键(key)” 列,仅能更新映射的值(value)。示例如下:
- 重命名列(ALTER TABLE ... RENAME COLUMN)
Iceberg允许对任意字段进行重命名。如果需要重命名字段,可使用RENAME COLUMN子句:
ALTER TABLE prod.db.sample RENAME COLUMN data TO payload;
- 可使用ALTER TABLE ... DROP COLUMN语句删除列:
ALTER TABLE prod.db.sample DROP COLUMN id;
- 新增、删除和重命名嵌套字段
ALTER TABLE ALTER COLUMN
- 调整顶层列与嵌套结构体字段的顺序
Iceberg允许使用FIRST和AFTER子句调整顶层列或结构体中的列顺序:
ALTER TABLE prod.db.sample ALTER COLUMN point FIRST;
- 拓宽int、float、decimal字段的类型(ALTER TABLE ... ALTER COLUMN)
ALTER COLUMN用于拓宽字段类型,将字段设为可选项、设置注释以及调整字段顺序。
Iceberg允许在类型更新安全的前提下修改列类型,安全的列类型更新包括:
- int到bigint
- float到double
- decimal (P,S)到decimal (P2,S),其中P2 > P,即精度可提高,小数位数不可变更。
CREATE TABLE prod.db.sample (id bigint, data string, measurement float) USING iceberg;
例如,执行以下命令将“measurement”列的类型变更为“double”:
ALTER TABLE prod.db.sample ALTER COLUMN measurement TYPE double;
也可使用ALTER COLUMN更新列注释:ALTER TABLE prod.db.sample ALTER COLUMN measurement COMMENT 'unit is kilobytes per second';
- 非空列(required column)改为可空列(optional column)
ALTER TABLE prod.db.sample ALTER COLUMN id DROP NOT NULL;
- 通过启用SQL扩展,还可支持分区演进与表写入顺序设置功能。
ALTER TABLE RENAME TO
重命名表(ALTER TABLE ... RENAME TO):
ALTER TABLE prod.db.sample RENAME TO prod.db.new_name;
父主题: Iceberg DDL语法说明