描述
ALTER TABLE ... ALTER COLUMN 语句用于修改列的类型、注释、空值约束以及位置排序。支持安全类型提升(widen types)、添加注释、调整列顺序等操作。语法
-- 修改类型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;