全部产品
Search
文档中心

云原生大数据计算服务 MaxCompute:修改表

更新时间:Nov 28, 2024

本文为您介绍表修改的相关操作命令。

表修改命令如下。

类型

功能

角色

操作入口

修改表的所有人

修改表的所有人,即表Owner。

项目Owner

本文中的命令您可以在如下工具平台执行:

修改表的注释

修改表的注释内容。

具备修改表权限(Alter)的用户。

修改表的最后更新时间

修改表的LastModifiedTime为当前时间。

修改表的聚簇属性

增加或去除表的聚簇属性。

重命名表

重命名表的名称。

清空非分区表里的数据

清空指定的非分区表中的数据。

清空列数据

清空普通表的列。

修改表的所有人

修改表的所有人,即表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;

关于清空列数据的使用限制和示例详情请参见清空列数据

相关文档