本文为您介绍表修改的相关操作命令。
表修改命令如下。
类型 | 功能 | 角色 | 操作入口 |
修改表的所有人,即表Owner。 | 项目Owner | 本文中的命令您可以在如下工具平台执行: | |
修改表的注释内容。 | 具备修改表权限(Alter)的用户。 | ||
修改表的 | |||
增加或去除表的聚簇属性。 | |||
重命名表的名称。 | |||
清空指定的非分区表中的数据。 | |||
清空普通表的列。 |
修改表的所有人
修改表的所有人,即表Owner。
仅项目所有者(Project Owner)或具备Super_Administrator角色的用户可执行修改表Owner的命令。
命令格式
ALTER TABLE <table_name> CHANGEOWNER TO <new_owner>;
参数说明
table_name:必填。待修改Owner的表名。
new_owner:必填。修改后的Owner账号。如果要修改Owner为RAM用户,格式为:
RAM$<UID>:<ram_name>
,其中UID为阿里云账号的账号ID,ram_name为RAM用户显示名称。说明修改表Owner为RAM用户,需确保RAM用户已加入到表所在的项目中。
使用示例
本文示例数据sale_detail表的创建,详情请参见创建sale_detail表。
将表sale_detail的所有人修改为ALIYUN$xxx@aliyun.com。
ALTER TABLE sale_detail CHANGEOWNER TO 'ALIYUN$xxx@aliyun.com';
将表sale_detail的所有人修改为名称为
ram_test
的RAM用户。ALTER TABLE sale_detail CHANGEOWNER TO 'RAM$13xxxxxxxxxxx:ram_test';
修改表的注释
修改表的注释内容。
命令格式
ALTER TABLE <table_name> SET COMMENT '<new_comment>';
参数说明
table_name:必填。待修改注释的表的名称。
new_comment:必填。修改后的注释名称。
使用示例
ALTER TABLE sale_detail SET COMMENT 'new comment for table sale_detail';
您可以通过MaxCompute的DESC <table_name>
命令查看表中comment
的修改结果。
+------------------------------------------------------------------------------------+
| Owner: ALIYUN$sant****.aliyunid.com |
| Project: ani**** |
| Schema: default |
| TableComment: new comment for table sale_detail |
+------------------------------------------------------------------------------------+
修改表的最后更新时间
MaxCompute SQL提供TOUCH
操作用来修改表的LastModifiedTime
,可将表的LastModifiedTime
修改为当前时间。此操作会改变表的LastModifiedTime
的值,MaxCompute会认为表的数据有变动,生命周期的计算会重新开始。
命令格式
ALTER TABLE <table_name> TOUCH;
参数说明
table_name:必填。待修改表的修改时间的表名称。
使用示例
ALTER TABLE sale_detail TOUCH;
修改表的聚簇属性
对于分区表,MaxCompute支持通过ALTER TABLE
语句增加或者去除聚簇属性。
命令格式
增加表的Hash聚簇属性的语法格式如下。
ALTER TABLE <table_name> [CLUSTERED BY (<col_name> [, <col_name>, ...]) [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> BUCKETS];
去除表的Hash聚簇属性的语法格式如下。
ALTER TABLE <table_name> NOT CLUSTERED;
增加表的Range聚簇属性,Bucket数不是必需的,可以省略,此时系统会根据数据量自动决定最佳的Bucket数目。语法格式如下。
ALTER TABLE <table_name> [RANGE CLUSTERED BY (<col_name> [, <col_name>, ...]) [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> BUCKETS];
去除表或分区的Range聚簇属性的语法格式如下。
ALTER TABLE <table_name> NOT CLUSTERED; ALTER TABLE <table_name> <pt_spec> NOT CLUSTERED;
说明通过
ALTER TABLE
改变聚簇属性,只对分区表有效,非分区表一旦建立聚簇属性就无法改变。ALTER TABLE
语句适用于存量表,在增加了新的聚簇属性后,新的分区将按设置的聚簇属性存储。ALTER TABLE
只会影响分区表的新建分区(包括INSERT OVERWRITE
生成的),新分区将按新的聚簇属性存储,老数据分区的聚簇属性和存储保持不变。即在一张曾经做过聚簇属性设置的表上,关闭了聚簇属性,再增加聚簇设置,可以在新分区设置不同于之前的聚簇列、排序列及分桶数。由于
ALTER TABLE
只影响新分区,所以该语句不可以再指定分区。
参数说明
详情请参见创建和删除表。
重命名表
重命名表的名称。仅修改表的名字,不改动表中的数据。
命令格式
ALTER TABLE <table_name> RENAME TO <new_table_name>;
参数说明
table_name:必填。待修改名称的表。
new_table_name:必填。修改后的表名称。如果已存在与new_table_name同名的表,会返回报错。
使用示例
ALTER TABLE sale_detail RENAME TO sale_detail_rename;
清空非分区表里的数据
将指定的非分区表中的数据清空。如果您需要清空分区表中单个或多个分区的数据,请参见清空分区数据。
命令格式
TRUNCATE TABLE <table_name>;
参数说明
table_name:必填。待清空数据的非分区表的名称。
清空列数据
使用clear column
命令清空普通表的列,将不再使用的列数据从磁盘删除并置NULL,从而达到降低存储成本的目的。
命令格式
ALTER TABLE <table_name> [partition ( <pt_spec>[, <pt_spec>....] )]
CLEAR COLUMN column1[, column2, column3, ...]
[without touch];
参数说明
table_name:将要执行清空列数据的表名称。
column1 , column2...
:将要被清空数据的列名称。partition:指定分区,若未指定,则表示操作所有分区。
pt_spec:分区描述,格式为
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
。without touch:表示不更新
LastDataModifiedTime
;若未指定,则会更新LastDataModifiedTime
。
使用示例
-- 向sale_detail表增加分区
ALTER TABLE sale_detail ADD PARTITION (sale_date='2023', region='china') PARTITION (sale_date='2024', region='shanghai');
-- 向分区表中插入数据
INSERT INTO sale_detail PARTITION (sale_date='2023', region='china') VALUES ('s1','c1',100.1),('s2','c2',100.2),('s3','c3',100.3);
INSERT INTO sale_detail PARTITION (sale_date='2024', region='shanghai') VALUES ('null','c5',null),('s6','c6',100.4),('s7','c7',100.5);
-- 清空shop_name列
ALTER TABLE sale_detail partition(sale_date='2023', region='china') CLEAR COLUMN shop_name;
关于清空列数据的使用限制和示例详情请参见清空列数据。
相关文档
如果您希望对已有表结构进行修改,例如:添加列、删除列、更改列数据类型等,请参见分区和列操作。
更新或删除Transactional表中的数据,请参见更新或删除数据(UPDATE | DELETE)。