ALTER COLUMN

最近更新时间:2026-05-20 14:11:22

我的收藏

描述

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_col
VALUES (1, 'Alice', 95.5, 'Y'), (2, 'Bob', 88.0, 'N');

数据类型提升:INT > BIGINT

ALTER TABLE tci_alter_col
ALTER COLUMN id TYPE BIGINT;

数据类型提升:FLOAT > DOUBLE

ALTER TABLE tci_alter_col
ALTER COLUMN score TYPE DOUBLE;

修改列注释

ALTER TABLE tci_alter_col
ALTER COLUMN name COMMENT '用户姓名';

DROP NOT NULL

ALTER TABLE tci_alter_col
ALTER COLUMN id DROP NOT NULL;

FIRST 调整顺序

ALTER TABLE tci_alter_col
ALTER COLUMN active FIRST;

验证最终结构

DESCRIBE tci_alter_col;
SELECT * FROM tci_alter_col;