DataWorks中MaxCompute的常用操作命令

揍坦克的小老虎發表於2020-11-16

原文連結:https://blog.csdn.net/yitian_z/article/details/90729172
案例:本文主要描述阿里雲資料處理平臺DataWorks中MaxCompute的常用操作命令
一、表操作
(1)刪除表:

DROP TABLE [IF EXISTS] table_name;
1、如果不指定if exists選項而表不存在,則返回異常。若指定此選項,無論表是否存在,皆返回成功。
2、刪除外部表時,OSS上的資料不會被刪除。

(2)重新命名錶:

ALTER TABLE table_name RENAME TO new_table_name;
1、rename操作僅修改表的名字,不改動表中的資料。
2、如果已存在與new_table_name同名表,則報錯。
3、如果table_name不存在,則報錯。
4、若修改生產環境的表名,需要在舊錶名前加生產環境專案名如:data_dw.table_name

(3)修改表owner:

alter table table_name changeowner to 'ALIYUN$xxx@aliyun.com';

(4)修改表的註釋:

ALTER TABLE table_name SET COMMENT 'tbl comment';
1、table_name必須是已存在的表。
2、comment最長1024位元組。

(5) 修改表的Hash Clustering屬性:

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]

(6)去除表的hash clustering屬性:

ALTER TABLE table_name NOT CLUSTERED;
1、alter table改變聚集屬性,只對於分割槽表有效,非分割槽表一旦聚集屬性建立就無法改變。
1、由於alter table隻影響新分割槽,所以該語句不可以再指定PARTITIONALTER TABLE語句適用於存量表,在增加了新的聚集屬性之後,新的分割槽將做hash cluster儲存。

(7)清空非分割槽表裡的資料:

TRUNCATE TABLE table_name;
1、將指定的非分割槽表中的資料清空,該命令不支援分割槽表。對於分割槽表,可以用ALTER TABLE table_name DROP PARTITION的方式將分割槽裡的資料清除。

二、分割槽和列操作
(1)新增分割槽操作:

ALTER TABLE TABLE_NAME ADD [IF NOT EXISTS] PARTITION partition_spec
partition_spec:(partition_col1 = partition_col_value1, partition_col2 = partiton_col_value2, ...);
說明
1、分割槽名必須小寫。
2、僅支援新增分割槽,不支援新增分割槽欄位。
3、如果未指定if not exists而同名的分割槽已存在,則返回報錯。
4、目前MaxCompute單表支援的分割槽數量上限為6萬。
5、對於多級分割槽的表,如果想新增新的分割槽,必須指明全部的分割槽值。
示例
alter table sale_detail add if not exists partition (sale_date='201312', region='hangzhou');
-- 成功新增分割槽,用來儲存2013年12月杭州地區的銷售記錄。
alter table sale_detail add if not exists partition (sale_date='201312', region='shanghai');
-- 成功新增分割槽,用來儲存2013年12月上海地區的銷售記錄。
alter table sale_detail add if not exists partition(sale_date='20111011');
-- 僅指定一個分割槽sale_date,出錯返回
alter table sale_detail add if not exists partition(region='shanghai');
-- 僅指定一個分割槽region,出錯返回

(2)刪除分割槽操作:

ALTER TABLE TABLE_NAME DROP [IF EXISTS] PARTITION partition_spec;
partition_spec:(partition_col1 = partition_col_value1, partition_col2 = partiton_col_value2, ...)
示例
alter table sale_detail drop if exists partition(sale_date='201312',region='hangzhou'); 
-- 成功刪除2013年12月杭州分割槽的銷售記錄。

(3)新增列操作:

ALTER TABLE table_name ADD COLUMNS (col_name1 type1,col_name2 type2...);
ALTER TABLE table_name ADD COLUMNS (col_name1 type1 comment 'XXX',col_name2 type2 comment 'XXX');
說明 新增的新列不支援指定順序,預設在最後一列。

(4)修改列名稱:

ALTER TABLE table_name CHANGE COLUMN old_col_name RENAME TO new_col_name;
若修改生產環境的列名,需要在表名前加生產環境專案名如:data_dw.table_name

(5) 修改列、分割槽註釋:

ALTER TABLE table_name CHANGE COLUMN col_name COMMENT comment_string;

(6)修改分割槽值:

ALTER TABLE table_name PARTITION (partition_col1 = partition_col_value1, partition_col2 = partiton_col_value2, ...) 
RENAME TO PARTITION (partition_col1 = partition_col_newvalue1, partition_col2 = partiton_col_newvalue2, ...);
1、MaxCompute SQL支援通過rename操作更改對應表的分割槽值。
2、不支援修改分割槽列列名,只能修改分割槽列對應的值。
3、修改多級分割槽的一個或者多個分割槽值,多級分割槽的每一級的分割槽值都必須寫上。

相關文章