一、语法
— 修改类型ALTER TABLE table_name ALTER COLUMN col_name TYPE new_type;– 修改注释ALTER TABLE table_name ALTER COLUMN col_name COMMENT 'new comment';– 修改类型 + 注释ALTER TABLE table_name ALTER COLUMN col_name TYPE new_type COMMENT 'comment';– 取消 NOT NULL 约束ALTER TABLE table_name ALTER COLUMN col_name DROP NOT NULL;– 调整列顺序:移到第一列ALTER TABLE table_name ALTER COLUMN col_name FIRST;– 调整列顺序:移到某列之后ALTER TABLE table_name ALTER COLUMN col_name AFTER other_col;
二、安全类型提升规则
以下类型变更被视为安全的:
| 源类型 | 目标类型 |
| int | bigint |
| float | double |
| decimal(P, S) | decimal(P2, S) 其中 P2 > P |
三、注意事项
·不支持使用 SET NOT NULL 将可为空的列改为非空列(Iceberg 无法确认是否已有 NULL 值)。
·ALTER COLUMN 不能用于更新 STRUCT 类型本身(需用 ADD/DROP COLUMN 来增减 STRUCT 字段)。
四、创建基础表及数据
DROP TABLE IF EXISTS tci_alter_col;CREATE TABLE tci_alter_col ( id INT NOT NULL, name STRING, score FLOAT, active STRING) USING tci;INSERT INTO tci_alter_colVALUES (1, 'Alice', 95.5, 'Y'), (2, 'Bob', 88.0, 'N');
五、数据类型提升:INT > BIGINT
ALTER TABLE tci_alter_colALTER COLUMN id TYPE BIGINT;
六、数据类型提升:FLOAT > DOUBLE
ALTER TABLE tci_alter_colALTER COLUMN score TYPE DOUBLE;
七、修改列注释
ALTER TABLE tci_alter_colALTER COLUMN name COMMENT '用户姓名';
八、DROP NOT NULL
ALTER TABLE tci_alter_colALTER COLUMN id DROP NOT NULL;
九、FIRST 调整顺序
ALTER TABLE tci_alter_colALTER COLUMN active FIRST;
十、验证最终结构
DESCRIBE tci_alter_col;SELECT * FROM tci_alter_col;