修改外部表(ALTER EXTERNAL TABLE)
通过
ALTER TABLE
ALTER TABLE
命令可以对外部表进行元数据修改,包括重命名、设置注释、增减列和修改属性。
支持的操作
| 操作 | 外部表 | 普通表 |
|---|
| 重命名(RENAME) | 支持 | 支持 |
| 修改注释(SET COMMENT) | 支持 | 支持 |
| 增加列(ADD COLUMN) | 支持 | 支持 |
| 删除列(DROP COLUMN) | 支持 | 支持 |
| 修改属性(SET PROPERTIES) | 支持 | 支持 |
| 修改存储路径(SET LOCATION) | 不支持 | — |
| 刷新元数据(REFRESH METADATA) | 不支持 | — |
| 修改分桶/排序键 | 不支持 | 不支持 |
语法
重命名表
ALTER TABLE [schema.]table_name RENAME TO new_table_name;
修改表注释
ALTER TABLE [schema.]table_name SET COMMENT 'comment_text';
增加列
ALTER TABLE [schema.]table_name ADD COLUMN col_name data_type [COMMENT 'comment'];
删除列
ALTER TABLE [schema.]table_name DROP COLUMN col_name;
修改表属性
ALTER TABLE [schema.]table_name SET PROPERTIES('key' = 'value' [, 'key2' = 'value2' ...]);
参数说明
| 参数 | 必填 | 说明 |
|---|
schema
schema | 否 | 表所在 Schema,不指定则使用当前 Schema |
table_name
table_name | 是 | 要修改的外部表名称 |
new_table_name
new_table_name | RENAME 时必填 | 新表名,不需要加 Schema 前缀 |
col_name
col_name | ADD/DROP COLUMN 时必填 | 列名 |
data_type
data_type | ADD COLUMN 时必填 | 列的数据类型 |
key
key / value
value | SET PROPERTIES 时必填 | 表属性的键值对,目前为保留参数 |
使用示例
- 将外部表
ext_orders
ext_orders
重命名为 ext_orders_v2
ext_orders_v2
:
ALTER TABLE doc_test.ext_orders RENAME TO ext_orders_v2;
- 为外部表添加注释,并通过
DESC EXTENDED
DESC EXTENDED
验证:
ALTER TABLE doc_test.ext_orders_v2 SET COMMENT 'External orders table from OSS';
DESC EXTENDED doc_test.ext_orders_v2;
+------------------------------+--------------------------------------------+---------+
| column_name | data_type | comment |
+------------------------------+--------------------------------------------+---------+
| order_id | int | |
| customer_id | int | |
| amount | decimal(10,2) | |
| | | |
| # detailed table information | | |
| schema | doc_test | |
| name | ext_orders_v2 | |
| comment | External orders table from OSS | |
| external | true | |
| format | PARQUET | |
| location | "oss://czlakehouse/doc_test/orders/" | |
| connection | quick_start.oss_sh_conn_ak | |
+------------------------------+--------------------------------------------+---------+
- 为外部表增加一列:
ALTER TABLE doc_test.ext_orders_v2 ADD COLUMN region STRING COMMENT '订单所属区域';
- 删除外部表的某一列:
ALTER TABLE doc_test.ext_orders_v2 DROP COLUMN region;
- 修改外部表的属性:
ALTER TABLE doc_test.ext_orders_v2 SET PROPERTIES('owner' = 'data_team');
注意事项
- 外部表的
ALTER TABLE
ALTER TABLE
操作只修改 Lakehouse 内的元数据,不会影响底层存储(OSS/S3/COS)中的实际数据文件。
- 外部表不支持
SET LOCATION
SET LOCATION
(修改存储路径)和 REFRESH METADATA
REFRESH METADATA
(刷新元数据)操作,执行时会报语法错误。
ADD COLUMN
ADD COLUMN
/ DROP COLUMN
DROP COLUMN
修改的是 Lakehouse 侧对外部表的 Schema 定义,底层文件的实际结构不受影响。若底层文件格式(如 Parquet)中没有对应列,查询该列将返回 NULL。
RENAME TO
RENAME TO
后的新表名不需要加 Schema 前缀,表仍保留在原 Schema 下。
- 对于 Delta/Iceberg 等格式的外部表,Schema 演化建议通过原生格式的 Schema Evolution 机制处理,而非 Lakehouse 侧的
ALTER TABLE
ALTER TABLE
。