表是MaxCompute的數據存儲單元。數據倉庫的開發、分析及運維都需要對表數據進行處理。本文以具體示例為您介紹如何創建、刪除和查看表等常用表操作。
表操作常用命令如下。表操作詳情請參見表操作。
類型 | 功能 | 角色 | 操作入口 |
創建非分區表或分區表。 | 具備項目空間創建表權限(CreateTable)的用戶。 | 本文中的命令您可以在如下工具平臺執行: | |
修改表的所有人,即表Owner。 | 項目空間Owner | ||
刪除非分區表或分區表。 | 具備刪除表權限(Drop)的用戶。 | ||
查看MaxCompute內部表、視圖或外部表的信息。 | 具備讀取表元信息權限(Describe)的用戶。 | ||
查看某個分區表具體的分區信息。 | 具備讀取表元信息權限(Describe)的用戶。 | ||
列出項目空間下所有的表、視圖或符合某規則(支持正則表達式)的表、視圖。 | 具備項目空間查看對象列表權限(List)的用戶。 | ||
列出一張表中的所有分區。 | 具備項目空間查看對象列表權限(List)的用戶。 |
關于分區和列的操作詳情請參見分區和列操作。
關于表生命周期的操作詳情請參見生命周期操作。
創建表
創建非分區表、分區表、外部表或聚簇表。
限制條件
分區表的分區層級不能超過6級。例如某張表以日期為分區列,分區層級為
年/月/周/日/時/分
。一張表允許的分區個數支持按照具體的項目配置,默認為6萬個。
更多表的限制條件,請參見SQL使用限制項。
命令格式
--創建新表。 create [external] table [if not exists] <table_name> [primary key (<pk_col_name>, <pk_col_name2>),(<col_name> <data_type> [not null] [default <default_value>] [comment <col_comment>], ...)] [comment <table_comment>] [partitioned by (<col_name> <data_type> [comment <col_comment>], ...)] --用于創建聚簇表時設置表的Shuffle和Sort屬性。 [clustered by | range clustered by (<col_name> [, <col_name>, ...]) [sorted by (<col_name> [asc | desc] [, <col_name> [asc | desc] ...])] into <number_of_buckets> buckets] --僅限外部表。 [stored by StorageHandler] --僅限外部表。 [with serdeproperties (options)] --僅限外部表。 [location <osslocation>] --指定表為Transactional表,后續可以對該表執行更新或刪除表數據操作,但是Transactional表有部分使用限制,請根據需求創建。 [tblproperties("transactional"="true")] --指定表為Delta Table表,結合primary key,后續可以做upsert,增量查詢,time-travel等操作 [tblproperties ("transactional"="true" [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...])] [lifecycle <days>] ; --基于已存在的表創建新表并復制數據,但不復制分區屬性。支持外部表和湖倉一體外部項目中的表。 create table [if not exists] <table_name> [lifecycle <days>] as <select_statement>; --基于已存在的表創建具備相同結構的新表但不復制數據,支持外部表和湖倉一體外部項目中的表。 create table [if not exists] <table_name> like <existing_table_name> [lifecycle <days>];
通用參數
external:可選。表示創建的表為外部表。
if not exists:可選。如果不指定if not exists選項而存在同名表,會報錯。如果指定if not exists,只要存在同名表,即使原表結構與要創建的目標表結構不一致,均返回成功。已存在的同名表的元數據信息不會被改動。
table_name:必填。表名。表名大小寫不敏感,不能有特殊字符,只能包含a~z、A~Z、數字和下劃線(_)。建議以字母開頭,名稱的長度不超過128字節,否則報錯。
primary key(pk):可選。表的主鍵,可以定義一個或多個列作為主鍵,表示這些列的組合在表中必須唯一,語法遵循標準SQL primary key語法,pk列必須設置not null,不允許修改。
col_name:可選。表的列名。列名大小寫不敏感,不能有特殊字符,只能包含a~z、A~Z、數字、下劃線(_)或中文。建議以字母開頭,名稱的長度不超過128字節,否則報錯。
col_comment:可選。列的注釋內容。注釋內容為長度不超過1024字節的有效字符串,否則報錯。
data_type:可選。列的數據類型,包含BIGINT、DOUBLE、BOOLEAN、DATETIME、DECIMAL和STRING等多種數據類型,詳情請參見數據類型版本說明。
not null:可選。禁止該列的值為NULL。更多修改非空屬性信息,請參見修改表的列非空屬性。
default_value:可選。指定列的默認值,當
insert
操作不指定該列時,該列寫入默認值。說明當前默認值不支持函數,例如
getdate()
、now()
等。table_comment:可選。表注釋內容。注釋內容為長度不超過1024字節的有效字符串,否則報錯。
lifecycle:可選。表的生命周期,僅支持正整數。單位:天。
非分區表:自最后一次修改表數據開始計算,經過days天后數據無改動,則您無需干預此表,MaxCompute會自動回收(類似drop table操作)。
分區表:系統根據各分區的LastModifiedTime判斷是否需要回收分區。不同于非分區表,分區表的最后一個分區被回收后,該表不會被刪除。生命周期只能設定到表級別,不支持在分區級別設置生命周期。
分區表參數
partitioned by (<col_name> <data_type> [comment <col_comment>], ...:可選。指定分區表的分區字段。
col_name:表的分區列名。列名大小寫不敏感,不能有特殊字符,只能包含a~z、A~Z、數字、下劃線(_)或中文。建議以字母開頭,名稱的長度不超過128字節,否則報錯。
data_type:分區列的數據類型。MaxCompute 1.0版本僅支持STRING類型。MaxCompute 2.0版本擴充了分區類型,包含TINYINT、SMALLINT、INT、BIGINT、VARCHAR和STRING類型。詳情請參見數據類型版本說明。當使用分區字段對表進行分區時,新增分區、更新分區內數據和讀取分區數據均不需要做全表掃描,提高處理效率。
col_comment:分區列的注釋內容。注釋內容為長度不超過1024字節的有效字符串,否則報錯。
說明分區值不能包含雙字節字符(如中文),必須以字母開頭,包含字母、數字和允許的字符,長度不超過255字節。允許的字符包括空格、冒號(:)、下劃線(_)、美元符號($)、井號(#)、英文句點(.)、感嘆號(!)和at(@),其他字符的行為未定義,例如轉義字符
\t
、\n
和/
。聚簇表參數
clustered by | range clustered by (<col_name> [, <col_name>, ...]) [sorted by (<col_name> [asc | desc] [, <col_name> [asc | desc] ...])] into <number_of_buckets> buckets:可選。用于創建聚簇表時設置表的Shuffle和Sort屬性。
聚簇表分為Hash聚簇表和Range聚簇表兩種。
Hash聚簇表
clustered by:指定Hash Key。MaxCompute將對指定列進行Hash運算,按照Hash值分散到各個Bucket中。為避免數據傾斜和熱點,并取得較好的并行執行效果,
clustered by
列適宜選擇取值范圍大,重復鍵值少的列。此外,為了達到join
優化的目的,也應該考慮選取常用的Join或Aggregation Key,即類似于傳統數據庫中的主鍵。sorted by:指定Bucket內字段的排序方式。建議sorted by和clustered by保持一致,以取得較好的性能。此外,當指定sorted by子句后,MaxCompute將自動生成索引,并且在查詢時利用索引來加快執行。
number_of_buckets:指定哈希桶的數量。該值必須填寫,且由數據量大小決定。此外,MaxCompute默認支持最多1111個Reducer,所以此處最多只支持1111個哈希桶。您可以使用
set odps.stage.reducer.num =<并發數>;
來提升這個限制,但最大不得超過4000,否則會影響性能。選擇哈希桶數目時,請您遵循以下兩個原則:
哈希桶大小適中:建議每個Bucket的大小為500 MB左右。例如,分區大小估計為500 GB,粗略估算Bucket數目應該設為1000,這樣平均每個Bucket大小約為500 MB。對于特別大的表,500 MB的限制可以突破,每個Bucket在2 GB~3 GB左右比較合適。同時,可以結合
set odps.stage.reducer.num =<并發數>;
來突破1111個桶的限制。對于
join
優化場景,去除Shuffle和Sort步驟能顯著提升性能。因此要求兩個表的哈希桶數目成倍數關系,例如256和512。建議哈希桶的數量統一使用2n,例如512、1024、2048或4096,這樣系統可以自動進行哈希桶的分裂和合并,也可以去除Shuffle和Sort的步驟,提升執行效率。
Range聚簇表
range clustered by:指定范圍聚簇列。MaxCompute將對指定列進行分桶運算,按照分桶編號分散到各個Bucket中。
sorted by:指定Bucket內字段的排序方式,使用方法與Hash聚簇表相同。
number_of_buckets:指定哈希桶的數量。Range聚簇表的Bucket桶數沒有Hash聚簇表的2n最佳實踐,在數據量分布合理的情況下,任何桶數都可以。Range聚簇表的Bucket數不是必須的,可以省略,此時系統會根據數據量自動決定最佳的Bucket數目。
當Join或Aggregation的對象是Range聚簇表,且Join Key或Group Key是Range Clustering Key或其前綴時,可以通過控制Flag消除數據的重分布,即Shuffle Remove,提升執行效率。您可以通過
set odps.optimizer.enable.range.partial.repartitioning=true/false;
進行設置,默認關閉。說明聚簇表的優點:
優化Bucket Pruning。
優化Aggregation。
優化存儲。
聚簇表的限制:
不支持
insert into
,只能通過insert overwrite
來添加數據。不支持Tunnel直接Upload到Range聚簇表,因為Tunnel上傳數據是無序的。
不支持備份恢復功能。
外部表參數
stored by StorageHandler:可選。按照外部表數據格式指定StorageHandler。
with serdeproperties (options):可選。外部表的授權、壓縮、字符解析等相關參數。
osslocation:可選。外部表數據OSS存儲位置,詳情請參見創建OSS外部表。
Transaction Table與Delta Table表參數
Transaction Table表參數
tblproperties("transactional"="true"):可選。設置表為Transactional表。后續可以對Transactional表執行
update
、delete
操作實現行級更新或刪除數據。更多信息,請參見更新或刪除數據(UPDATE | DELETE)。Transactional表的使用限制如下:
MaxCompute只允許在創建表時設置Transactional屬性。已創建的表不允許通過
alter table
方式修改Transactional屬性,執行如下語句會報錯:alter table not_txn_tbl set tblproperties("transactional"="true"); --報錯。 FAILED: Catalog Service Failed, ErrorCode: 151, Error Message: Set transactional is not supported
在創建表時,不支持將聚簇表、外部表設置為Transactional表。
不支持MaxCompute內部表、外部表、聚簇表與Transactional表互轉。
不支持自動合并Transactional表文件,需要手動執行合并操作,詳情請參見合并Transactional表文件。
不支持
merge partition
操作。其他系統的作業訪問Transactional表有一些限制,例如Graph不支持讀寫;Spark、PAI只支持讀,不支持寫。
Delta Table表參數
Delta Table是一種可支持近實時讀寫,增量存儲和讀寫,實時更新等能力的表格式,目前只支持主鍵表。
primary key (PK):
創建Delta Table主鍵表時必填,可包含多列,語法遵循標準SQL primary key語法,PK列必須設置not null,不允許修改。 設置后,后續表數據會根據PK列進行去重,Unique約束在單個partition范圍內有效,或非分區表內有效。
tblproperties ("transactional"="true" [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...])]
transactional:創建Delta Table類型表時必填,必須設置為true。表示符合MaxCompute的ACID表的事務特性,采用MVCC事務管理模式,保證快照隔離級別。
write.bucket.num:可選,默認取值為16,取值范圍為(0, 4096]。表示每個partition或者非分區表的分桶數量,也表示數據寫入的并發節點數量。分區表支持修改,新分區默認生效,非分區表不支持修改。該參數用法可參考如下建議:
如果是通過Tunnel導入,代表Tunnel并發節點數,設置結果會影響導入流量,也會受Tunnel最大并發節點數約束。
如果是通過SQL寫入,代表寫入數據的Reducer的并發度,受Reducer最大并發節點數約束。
建議每個Bucket的數據寫入大小為500 MB左右。例如,分區大小估計為500 GB,粗略估算Bucket數目應該設為1000,這樣平均每個Bucket大小約為500 MB。對于特別大的表,500 MB的限制可以突破,每個Bucket在2 GB~3 GB左右比較合適。
acid.data.retain.hours:可選,默認取值為72,取值范圍為[0, 168]。表示TimeTravel可查詢數據歷史狀態的時間范圍(單位為小時)。
取值為0時表示不保留數據歷史狀態,也就是不支持timetravel查詢。
如果數據歷史狀態存在時間超過了此參數設置的值,可被刪除或者Compact。
如果SQL Timetraval查詢的時間早于該參數的值,會直接報錯,比如屬性值為72小時,Timetraval要查詢72小時之前的數據歷史狀態,會直接報錯。
acid.incremental.query.out.of.time.range.enabled:可選,默認false。True表示增量查詢指定的endTimestamp可大于表最大的數據Commit Time,在endTimestamp大于當前時間場景下,用戶多次查詢可能得到不同的結果,因為可能有新的數據插入。支持修改表的此參數取值。
acid.write.precombine.field:可選,可以指定一個列的名稱,且只能指定一個。如果指定了列名,在同一提交的文件處理中,系統會結合主鍵(PK)列對數據進行去重處理,確保數據的唯一性和一致性。
說明當一次性提交的數據量超過128 M時,會導致生成多個文件,該參數對多個文件不適用。
Delta Table其他通用參數的設置要求
lifecycle: 表生命周期必須大于等于timetravel可查詢的生命周期,即
lifecycle >= acid.data.retain.hours / 24
。創建表時會做檢查,不符合會報錯。其他不支持的特性:不支持設置cluster by、external外表、Create Table As。
其他使用限制:
當前不支持除MaxCompute SQL外的其他引擎直接操作Delta Table。
存量普通表不支持修改為Delta Table。
不支持對Delta Table主鍵表的PK列做表結構變更。
基于已有數據/表新建表
通過
create table [if not exists] <table_name> [lifecycle <days>] as <select_statement>;
語句可以再創建一個表,并在建表的同時將數據復制到新表中。但通過該語句創建的表不會復制分區屬性,只會把源表的分區列作為目標表的一般列處理,也不會復制源表的生命周期屬性。
您還可以通過lifecycle參數回收表。同時也支持創建內部表復制外部表的數據。
通過
create table [if not exists] <table_name> like <existing_table_name> [lifecycle <days>];
語句可以再創建一個表,使目標表和源表具有相同的表結構。但通過該語句創建的表不復制數據,也不會復制源表的生命周期屬性。
您還可以通過lifecycle參數回收表。同時也支持創建內部表復制外部表的結構。
使用示例
示例1:創建非分區表test1。
create table test1 (key STRING);
示例2:創建一張分區表sale_detail。
create table if not exists sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE) partitioned by (sale_date STRING, region STRING);
示例3:創建一個新表sale_detail_ctas1,將sale_detail的數據復制到sale_detail_ctas1中,并設置生命周期。
SET odps.sql.allow.fullscan=true; create table sale_detail_ctas1 lifecycle 10 as select * from sale_detail;
您可以通過
desc extended sale_detail_ctas1;
命令查看到表的結構及生命周期等詳細信息。此處
sale_detail
是一張分區表,而通過create table ... as select_statement ...
語句創建的表sale_detail_ctas1
不會復制分區屬性,只會把源表的分區列作為目標表的一般列處理。即sale_detail_ctas1
是一個含有5列的非分區表。示例4:創建一個新表sale_detail_ctas2,在
select
子句中使用常量作為列的值。SET odps.sql.allow.fullscan=true; --指定列的名字。 create table sale_detail_ctas2 as select shop_name, customer_id, total_price, '2013' as sale_date, 'China' as region from sale_detail; --不指定列的名字。 create table sale_detail_ctas3 as select shop_name, customer_id, total_price, '2013', 'China' from sale_detail;
說明如果在
select
子句中使用常量作為列的值,建議您指定列的名字。創建的表sale_detail_ctas3的第四、五列類似于_c4
、_c5
。示例5:創建一個新表sale_detail_like,與sale_detail具有相同的表結構,并設置生命周期。
create table sale_detail_like like sale_detail lifecycle 10;
您可以通過
desc extended sale_detail_like;
命令查看到表的結構及生命周期等詳細信息。sale_detail_like的表結構與sale_detail完全相同。除生命周期屬性外,列名、列注釋以及表注釋等均相同。但sale_detail中的數據不會被復制到sale_detail_like表中。
示例6:創建一個新表mc_oss_extable_orc_like,與外部表mc_oss_extable_orc具有相同的表結構。
create table mc_oss_extable_orc_like like mc_oss_extable_orc;
您可以通過
desc mc_oss_extable_orc_like;
命令查看表結構等詳細信息。+------------------------------------------------------------------------------------+ | Owner: ALIYUN$****@***.aliyunid.com | Project: max_compute_7u************yoq | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2022-08-11 11:10:47 | | LastDDLTime: 2022-08-11 11:10:47 | | LastModifiedTime: 2022-08-11 11:10:47 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | id | string | | | | name | string | | | +------------------------------------------------------------------------------------+
示例7:創建使用新數據類型的表test_newtype。
set odps.sql.type.system.odps2=true; CREATE TABLE test_newtype ( c1 TINYINT ,c2 SMALLINT ,c3 INT ,c4 BIGINT ,c5 FLOAT ,c6 DOUBLE ,c7 DECIMAL ,c8 BINARY ,c9 TIMESTAMP ,c10 ARRAY<MAP<BIGINT,BIGINT>> ,c11 MAP<STRING,ARRAY<BIGINT>> ,c12 STRUCT<s1:STRING,s2:BIGINT> ,c13 VARCHAR(20)) LIFECYCLE 1 ;
示例8:創建Hash聚簇非分區表t1。
create table t1 (a STRING, b STRING, c BIGINT) clustered by (c) sorted by (c) into 1024 buckets;
示例9:創建Hash聚簇分區表t2。
create table t2 (a STRING, b STRING, c BIGINT) partitioned by (dt STRING) clustered by (c) sorted by (c) into 1024 buckets;
示例10:創建Range聚簇非分區表t3。
create table t3 (a STRING, b STRING, c BIGINT) range clustered by (c) sorted by (c) into 1024 buckets;
示例11:創建Range聚簇分區表t4。
create table t4 (a STRING, b STRING, c BIGINT) partitioned by (dt STRING) range clustered by (c) sorted by (c);
示例12:創建Transactional非分區表t5。
create table t5(id bigint) tblproperties("transactional"="true");
示例13:創建Transactional分區表t6。
create table if not exists t6(id bigint) partitioned by(ds string) tblproperties ("transactional"="true");
示例14:創建非分區表test_default,并為字段指定默認值。
create table test_default ( tinyint_name tinyint not NULL default 1Y, smallint_name SMALLINT not NULL DEFAULT 1S, int_name INT not NULL DEFAULT 1, bigint_name BIGINT not NULL DEFAULT 1, binary_name BINARY , float_name FLOAT , double_name DOUBLE not NULL DEFAULT 0.1, decimal_name DECIMAL(2, 1) not NULL DEFAULT 0.0BD, varchar_name VARCHAR(10) , char_name CHAR(2) , string_name STRING not NULL DEFAULT 'N', boolean_name BOOLEAN not NULL DEFAULT TRUE );
示例15:使用
create table [if not exists] <table_name> [lifecycle <days>] as <select_statement>;
語句創建內部表復制外部分區表數據,內部表不包含分區屬性。-- MaxCompute側查詢湖倉一體外部表 select * from hive_external2_1.myhive_0110; -- 結果 a b c 101 1 20230110 102 2 20230110 103 3 20230110 -- 使用create table as創建內部表 create table from_exetbl_as_par as select * from hive_external2_1.myhive_0110_par; -- 查詢新建內部表 select * from from_exetbl_as_par; -- 返回結果,全表數據都有 a b c 101 1 20230110 102 2 20230110 103 3 20230110 -- 查詢新建內部表結構 desc from_exetbl_as_par; -- 返回結果 +------------------------------------------------------------------------------------+ | Owner: ALIYUN$*********** | | Project: ***_*****_*** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-01-10 15:16:33 | | LastDDLTime: 2023-01-10 15:16:33 | | LastModifiedTime: 2023-01-10 15:16:33 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 919 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | | c | string | | | +------------------------------------------------------------------------------------+
示例16:使用
create table [if not exists] <table_name> like <existing_table_name> [lifecycle <days>];
語句創建內部表復制外部分區表結構,內部表包含分區屬性。-- MaxCompute側查詢湖倉一體外部表 select * from hive_external2_1.myhive_0110_par; -- 返回結果 a b c 101 1 20230110 102 2 20230110 103 3 20230110 -- 使用create table like創建內部表 create table from_exetbl_like like hive_external2_1.myhive_0110_par; -- 查詢新建內部表 select * from from_exetbl_like; -- 返回結果,只有表結構出現 a b c -- 查詢內部表結構 desc from_exetbl_like; -- 返回結果 +------------------------------------------------------------------------------------+ | Owner: ALIYUN$************ | | Project: ***_*****_*** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-01-10 15:09:47 | | LastDDLTime: 2023-01-10 15:09:47 | | LastModifiedTime: 2023-01-10 15:09:47 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | c | string | | +------------------------------------------------------------------------------------+
示例17:創建Delta Table表
create table mf_tt (pk bigint not null primary key, val bigint) tblproperties ("transactional"="true");
示例18,創建Delta Table表,設置主要表屬性
create table mf_tt2 (pk bigint not null, pk2 bigint not null, val bigint, val2 bigint, primary key (pk, pk2) ) tblproperties ("transactional"="true", "write.bucket.num" = "64", "acid.data.retain.hours"="120") lifecycle 7;
修改表的所有人
修改表的所有人,即表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用戶已加入到表所在的項目中。
使用示例
將表test1的所有人修改為ALIYUN$xxx@aliyun.com。
alter table test1 changeowner to 'ALIYUN$xxx@aliyun.com';
將表test1的所有人修改為名稱為
ram_test
的RAM用戶。alter table test1 changeowner to 'RAM$13xxxxxxxxxxx:ram_test';
刪除表
刪除非分區表或分區表。
注意事項
請謹慎操作,確認表可以刪除后,再執行刪除操作。如果誤刪了表,當項目開啟了備份恢復功能,且刪除操作未超過項目設置的備份數據保留天數時,則可以恢復表。更多備份恢復信息,請參見備份與恢復。
刪除表之后,MaxCompute項目的存儲量會降低。
命令格式
drop table [if exists] <table_name>;
參數說明
if exists:可選。如果不指定if exists且表不存在,則返回異常。如果指定if exists,無論表是否存在,均返回成功。
table_name:必填。待刪除的表名。
使用示例
--刪除表sale_detail。無論sale_detail表是否存在,均返回成功。 drop table if exists sale_detail;
查看表或視圖信息
查看MaxCompute內部表、視圖、外部表、聚簇表或Transactional表的信息。如果您需要查看表的詳細數據信息,請參見SELECT語法。
命令格式
--查看表或視圖信息。 desc <table_name|view_name> [partition (<pt_spec>)]; --查看外部表、聚簇表或Transactional表信息。也可以查看內部表的擴展信息。 desc extended <table_name>;
參數說明
table_name:必填。待查看表的名稱。
view_name:必填。待查看視圖的名稱。
pt_spec:可選。待查看分區表的指定分區。格式為
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
。extended:如果表為外部表、聚簇表或Transactional表,需要包含此參數。顯示表的擴展信息。也可以查看內部表的擴展信息,例如列的非空屬性。
使用示例
示例1:查看創建的test1表的信息。
desc test1;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$maoXXX@alibaba-inc.com | Project: $project_name | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2020-11-16 17:47:48 | | LastDDLTime: 2020-11-16 17:47:48 | | LastModifiedTime: 2020-11-16 17:47:48 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | key | string | | | +------------------------------------------------------------------------------------+
示例2:查看創建的sale_detail表的信息。
desc sale_detail;
返回結果如下。
+--------------------------------------------------------------------+ | Owner: ALIYUN$maoXXX@alibaba-inc.com | Project: $project_name | | TableComment: | +--------------------------------------------------------------------+ | CreateTime: 2017-06-28 15:05:17 | | LastDDLTime: 2017-06-28 15:05:17 | | LastModifiedTime: 2017-06-28 15:05:17 | +--------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +--------------------------------------------------------------------+ | Native Columns: | +--------------------------------------------------------------------+ | Field | Type | Label | Comment | +--------------------------------------------------------------------+ | shop_name | string | | | | customer_id | string | | | | total_price | double | | | +--------------------------------------------------------------------+ | Partition Columns: | +--------------------------------------------------------------------+ | sale_date | string | | | region | string | | +--------------------------------------------------------------------+
示例3:查看創建的sale_detail_ctas1表的詳細信息。
desc extended sale_detail_ctas1;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$maoXXX@alibaba-inc.com | Project: $project_name | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2021-07-07 15:29:53 | | LastDDLTime: 2021-07-07 15:29:53 | | LastModifiedTime: 2021-07-07 15:29:53 | | Lifecycle: 10 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | shop_name | string | | | true | NULL | | | customer_id | string | | | true | NULL | | | total_price | double | | | true | NULL | | | sale_date | string | | | true | NULL | | | region | string | | | true | NULL | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ | TableID: 98cb8a38733c49eabed4735173818147 | | IsArchived: false | | PhysicalSize: 0 | | FileNum: 0 | | StoredAs: AliOrc | | CompressionStrategy: normal | +------------------------------------------------------------------------------------+
sale_date和region兩個字段僅會作為普通列存在,而不是表的分區。
示例4:查看創建的sale_detail_ctas2表的信息。
desc sale_detail_ctas2;
返回結果如下。
+--------------------------------------------------------------------+ | Owner: ALIYUN$xxxxx@alibaba-inc.com | Project: $project_name | | TableComment: | +--------------------------------------------------------------------+ | CreateTime: 2017-06-28 15:42:17 | | LastDDLTime: 2017-06-28 15:42:17 | | LastModifiedTime: 2017-06-28 15:42:17 | +--------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +--------------------------------------------------------------------+ | Native Columns: | +--------------------------------------------------------------------+ | Field | Type | Label | Comment | +--------------------------------------------------------------------+ | shop_name | string | | | | customer_id | string | | | | total_price | double | | | | sale_date | string | | | | region | string | | | +--------------------------------------------------------------------+
示例5:查看創建的sale_detail_like表的詳細信息。
desc extended sale_detail_like;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$xxxxx@alibaba-inc.com | Project: $project_name | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2021-07-07 15:40:38 | | LastDDLTime: 2021-07-07 15:40:38 | | LastModifiedTime: 2021-07-07 15:40:38 | | Lifecycle: 10 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | shop_name | string | | | true | NULL | | | customer_id | string | | | true | NULL | | | total_price | double | | | true | NULL | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | sale_date | string | | | region | string | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ | TableID: 61782ff7713f426e9d6f91d5deeac99a | | IsArchived: false | | PhysicalSize: 0 | | FileNum: 0 | | StoredAs: AliOrc | | CompressionStrategy: normal | +------------------------------------------------------------------------------------+
除生命周期屬性外,sale_detail_like的其它屬性(字段類型、分區類型等)均與sale_detail完全一致。
說明通過
desc table_name
查看到的Size包含了在回收站的數據Size。如果您需要清空回收站,可以先執行purge table table_name
,然后再執行desc table_name
查看除回收站以外的數據大小。您也可以執行show recyclebin
查看本項目中回收站內的數據明細。示例6:查看創建的test_newtype表的信息。
desc test_newtype;
返回結果如下。
| Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | c1 | tinyint | | | | c2 | smallint | | | | c3 | int | | | | c4 | bigint | | | | c5 | float | | | | c6 | double | | | | c7 | decimal | | | | c8 | binary | | | | c9 | timestamp | | | | c10 | array<map<bigint,bigint>> | | | | c11 | map<string,array<bigint>> | | | | c12 | struct<s1:string,s2:bigint> | | | | c13 | varchar(20) | | | +------------------------------------------------------------------------------------+ OK
示例7:查看創建的Hash聚簇非分區表t1的信息。聚簇屬性將顯示在Extended Info中。
desc extended t1;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$xxxxx@alibaba-inc.com | Project: $project_name | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2020-11-16 18:00:56 | | LastDDLTime: 2020-11-16 18:00:56 | | LastModifiedTime: 2020-11-16 18:00:56 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | a | string | | | true | NULL | | | b | string | | | true | NULL | | | c | bigint | | | true | NULL | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ | TableID: e6b06f705dc34a36a5b72e5af486cab7 | | IsArchived: false | | PhysicalSize: 0 | | FileNum: 0 | | StoredAs: AliOrc | | CompressionStrategy: normal | | ClusterType: hash | | BucketNum: 1024 | | ClusterColumns: [c] | | SortColumns: [c ASC] | +------------------------------------------------------------------------------------+ OK
示例8:查看創建的Hash聚簇分區表t2的信息。聚簇屬性將顯示在Extended Info中。
desc extended t2;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$xxxxx@alibaba-inc.com | Project: $project_name | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2017-12-25 11:18:26 | | LastDDLTime: 2017-12-25 11:18:26 | | LastModifiedTime: 2017-12-25 11:18:26 | | Lifecycle: 2 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | | c | bigint | | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | dt | string | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ | TableID: 91a3395d3ef64b4d9ee1d2852755 | | IsArchived: false | | PhysicalSize: 0 | | FileNum: 0 | | ClusterType: hash | | BucketNum: 1024 | | ClusterColumns: [c] | | SortColumns: [c ASC] | +------------------------------------------------------------------------------------+ OK
示例9:查看Range聚簇非分區表t3的信息。聚簇屬性將顯示在Extended Info中。
desc extended t3;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$xxxxx@alibaba-inc.com | Project: $project_name | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2020-11-16 18:01:05 | | LastDDLTime: 2020-11-16 18:01:05 | | LastModifiedTime: 2020-11-16 18:01:05 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | a | string | | | true | NULL | | | b | string | | | true | NULL | | | c | bigint | | | true | NULL | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ | TableID: 38d170aca2684f4baadbbe1931a6ae1f | | IsArchived: false | | PhysicalSize: 0 | | FileNum: 0 | | StoredAs: AliOrc | | CompressionStrategy: normal | | ClusterType: range | | BucketNum: 1024 | | ClusterColumns: [c] | | SortColumns: [c ASC] | +------------------------------------------------------------------------------------+ OK
示例10:查看Range聚簇分區表t4的信息。聚簇屬性將顯示在Extended Info中。
desc extended t4;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$xxxxx@alibaba-inc.com | Project: $project_name | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2020-11-16 19:17:48 | | LastDDLTime: 2020-11-16 19:17:48 | | LastModifiedTime: 2020-11-16 19:17:48 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | a | string | | | true | NULL | | | b | string | | | true | NULL | | | c | bigint | | | true | NULL | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | dt | string | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ | TableID: 6ebc3432e283449188c861427bcd6ee4 | | IsArchived: false | | PhysicalSize: 0 | | FileNum: 0 | | StoredAs: AliOrc | | CompressionStrategy: normal | | ClusterType: range | | BucketNum: 0 | | ClusterColumns: [c] | | SortColumns: [c ASC] | +------------------------------------------------------------------------------------+ OK
示例11:查看非分區表t5是否為Transactional表。
說明推薦您使用MaxCompute客戶端查看表是否為Transactional表,需要將MaxCompute客戶端升級到0.35.4版本。其他工具可能會存在版本升級未就緒的問題,導致查詢結果不顯示Transactional信息。
desc extended t5;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$xxxxx@aliyun.com | Project: $project_name | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2021-02-18 10:56:27 | | LastDDLTime: 2021-02-18 10:56:27 | | LastModifiedTime: 2021-02-18 10:56:27 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | id | bigint | | | true | NULL | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ ... | Transactional: true | +------------------------------------------------------------------------------------+
示例12:查看分區表t6是否為Transactional表。
說明推薦您使用MaxCompute客戶端查看表是否為Transactional表,需要將MaxCompute客戶端升級到0.35.4版本。其他工具可能會存在版本升級未就緒的問題,導致查詢結果不顯示Transactional信息。
desc extended t6;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$xxxxx@test.aliyunid.com | Project: $project_name | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2021-02-18 15:34:54 | | LastDDLTime: 2021-02-18 15:34:54 | | LastModifiedTime: 2021-02-18 15:34:54 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | id | bigint | | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | ds | string | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ ... | Transactional: true | +------------------------------------------------------------------------------------+
查看分區信息
查看某個分區表具體的分區的信息。
命令格式
desc <table_name> partition (<pt_spec>);
參數說明
table_name:必填。待查看分區信息的分區表名稱。
pt_spec:必填。待查看的分區信息。格式為
partition_col1=col1_value1, partition_col2=col2_value1...
。對于有多級分區的表,必須指明全部的分區值。
使用示例
--查詢分區表sale_detail的分區信息。 desc sale_detail partition (sale_date='201310',region='beijing');
返回結果如下。
+------------------------------------------------------------------------------------+ | PartitionSize: 2109112 | +------------------------------------------------------------------------------------+ | CreateTime: 2015-10-10 08:48:48 | | LastDDLTime: 2015-10-10 08:48:48 | | LastModifiedTime: 2015-10-11 01:33:35 | +------------------------------------------------------------------------------------+ OK
列出項目下的表和視圖
列出項目下所有的表和視圖,或符合某規則的表和視圖。
命令格式
--列出項目下所有的表和視圖。 show tables; --列出項目下表名或視圖名與chart匹配的表。 show tables like '<chart>';
使用示例
--列出項目下表名與sale*匹配的表。*表示任意字段。 show tables like 'sale*';
返回結果如下。
ALIYUN$account_name:sale_detail ...... --ALIYUN是系統提示符,表示您是阿里云主賬號用戶。如果您是阿里云RAM用戶,系統提示符為RAM。
列出所有分區
列出一張表中的所有分區。當表不存在或為非分區表時,返回報錯。
命令格式
show partitions <table_name>;
參數說明
table_name:必填。待查看分區信息的分區表名稱。
使用示例
--列出sale_detail中的所有分區。 show partitions sale_detail;
返回結果如下。
sale_date=201310/region=beijing sale_date=201312/region=shenzhen sale_date=201312/region=xian sale_date=2014/region=shenzhen OK
相關文檔
如果您希望對已有表結構進行修改,例如:添加列、刪除列、更改列數據類型等,請參見分區和列操作。
復制表數據至另一張表中,請參見CLONE TABLE。
更新或刪除Transactional表中的數據,請參見更新或刪除數據(UPDATE | DELETE)。