本文为您介绍使用MaxCompute客户端的常用命令进行表的创建、删除、查看信息等操作。

您可以通过客户端使用常用命令对表进行操作,也可以通过DataWorks中可视化的数据表管理模块对表进行收藏、申请权限、查看分区信息等操作,DataWorks的操作详情请参见表详情页面

Create Table

命令格式
CREATE TABLE [IF NOT EXISTS] table_name
 [(col_name data_type [COMMENT col_comment], ...)]
 [COMMENT table_comment]
 [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
 [LIFECYCLE days]
 [AS select_statement]
 CREATE TABLE [IF NOT EXISTS] table_name
 LIKE existing_table_name
功能说明
  • 创建表。表可以为分区表或者非分区表。
  • 在创建表时,如果不指定IF NOT EXISTS选项而存在同名表,则返回出错;如果指定此选项,则无论是否存在同名表,即使原表结构与要创建的目标表结构不一致,均返回成功。已存在的同名表的元信息不会被改动。
参数说明
  • table_name

    创建表的表名。表名大小写不敏感,不能有特殊字符,只能用英文的a-z、A-Z、数字和下划线(_),且以字母开头,名称的长度不超过128字节,否则报错。

  • col_name

    创建表的列名。列名大小写不敏感,不能有特殊字符,只能用英文的a-z、A-Z、数字和下划线(_),且以字母开头,名称的长度不超过128字节,否则报错。

  • col_comment

    列注释内容。注释内容是长度不超过1024字节的有效字符串,否则报错。

  • table_comment

    表注释内容。注释内容是长度不超过1024字节的有效字符串,否则报错。

  • data_type

    列的数据类型。包括BIGINT、DOUBLE、BOOLEAN、DATETIME、DECIMAL和STRING等多种数据类型。更多信息请参见数据类型

  • PARTITIONED BY
    指定表的分区字段。MaxCompute 1.0版仅支持STRING类型。MaxCompute 2.0版对分区类型的支持进行了扩充,支持TINYINT、SMALLINT、INT、BIGINT、VARCHAR和STRING分区类型。当利用分区字段对表进行分区时,新增分区、更新分区内数据和读取分区数据均不需要做全表扫描,提高处理效率。
    说明
    • 分区值不能包含双字节字符(如中文),必须是以英文字母A-Z开头。A-Z开始后可跟字母数字,名称的长度不超过128字节。允许的字符包括空格、冒号(:)、下划线(_)、美元符($)、井号(#)、点(.)、感叹号(!)和(@),其他字符的行为未定义,例如(\t)、(\n)、(/)等 。
    • 目前,在表中建的分区层次不能超过6级。一个表允许的分区个数支持按照具体的Project配置,默认60,000个。
  • LIFECYCLE
    指明此表的生命周期,仅支持正整数。单位:天。
    • 对于非分区表:自最后一次数据被修改开始计算,经过days天后数据仍未被改动,则此表无需您干预,将会被MaxCompute自动回收(类似drop table操作)。
    • 对于分区表:根据各分区的LastDataModifiedTime判断该分区是否该被回收。不同于非分区表,分区表的最后一个分区被回收后,该表不会被删除。生命周期只能设定到表级别,不能在分区级设置生命周期。
    说明 CREATE TABLE LIKE语句不会复制源表的生命周期属性。
示例
--如果没有同名表存在,创建一张分区表sale_deail。
CREATE TABLE IF NOT EXISTS sale_detail(
 shop_name     STRING,
 customer_id   STRING,
 total_price   DOUBLE)
PARTITIONED BY (sale_date STRING,region STRING); 
--创建非分区表test1。 
create table test1 (key string);
--创建分区表test2。
create table test2 (key bigint) partitioned by (pt string, ds string);
--创建带有生命周期的表test3。
create table test3 (key boolean) partitioned by (pt string, ds string) lifecycle 100;
-- 除生命周期属性外,test4的其他属性(字段类型、分区类型等)均与test3完全一致。 
create table test4 like test3;
-- 这个操作会创建test5,但分区生命周期信息不会被拷贝到目标表中。此操作仅会将test2的数据复制到test5中(如果test2有数据,此示例中test2为空表,后续章节会介绍数据导入)。
create table test5 as select * from test2;
说明

ChangeOwner

命令格式
ALTER TABLE table_name CHANGEOWNER to new_owner;

功能说明:修改表的拥有人(表Owner)

示例
--将表test1的表用有人修改为ALIYUN$xxx@aliyun.com。
ALTER TABLE test1 CHANGEOWNER to 'ALIYUN$xxx@aliyun.com';

Drop Table

命令格式
DROP TABLE [IF EXISTS] table_name; 
功能说明
  • 删除一张表。
  • 如果不指定IF EXISTS选项而表不存在,则返回异常;如果指定此选项,无论表是否存在,均返回成功。
示例
--删除表sale_detail。如果表存在,返回成功。
DROP TABLE sale_detail; 
--删除表sale_detail。无论sale_detail表是否存在,均返回成功。
DROP TABLE IF EXISTS sale_detail; 

查看表信息

命令格式
  • 查看表或者视图信息。
    DESC <table_name>; 
    其中,table_name为表或者视图名称。
  • 查看外部表信息。
    DESC extended <table_name>; 
    其中,table_name为外部表名称。
功能说明:返回指定表的信息。具体返回的信息如下:
  • Owner:表的属主。
  • Project:表所属的项目空间。
  • CreateTime:创建时间。
  • LastDDLTime:最后一次DDL操作时间。
  • LastModifiedTime:表中的数据最后一次被改动的时间。
  • InternalTable:表示被描述的对象是表,总是显示YES。
  • Size:表数据所占压缩后的存储容量大小,压缩比一般为5倍,单位Byte。
    说明 执行desc table_name查看到的Size包含了在回收站的数据Size。如果您需要清空回收站,可以先执行purge table table_name;,再执行desc table_name查看除回收站以外的数据大小。 您也可以执行show recyclebin;查看本项目中回收站内的数据明细。
  • Native Columns:非分区列的信息,包括列名、类型和备注。
  • Partition Columns:分区列信息,包括分区名、类型和备注。
  • Extended Info:外部表StorageHandler 、Location等信息。
说明
  • 如果是非分区的表,将不会显示Partition Columns的相关信息。
  • 如果描述的是一个视图(View),将不显示InternalTable选项,而是VirtualView选项,其值总为YES。Size选项将会被ViewText选项替代,表示View的定义,例如select * from src。关于视图的介绍请参见视图操作
示例
--查询分区表sale_detail的信息。
odps@ project_name>DESC sale_detail; 
+------------------------------------------------------------------------------------+
| Owner: ALIYUN$odpsuser@aliyun.com | Project: test_project                          |
| TableComment:                                                                      |
+------------------------------------------------------------------------------------+
| CreateTime:               2014-01-01 17:32:13                                      |
| LastDDLTime:              2014-01-01 17:57:38                                      |
| LastModifiedTime:         1970-01-01 08:00:00                                      |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 0                                                  |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Comment                                             |
+------------------------------------------------------------------------------------+
| shop_name       | string     |                                                     |
| customer_id     | string     |                                                     |
| total_price     | double     |                                                     |
+------------------------------------------------------------------------------------+
| Partition Columns:                                                                 |
+------------------------------------------------------------------------------------+
| sale_date       | string     |                                                     |
| region          | string     |                                                     |
+------------------------------------------------------------------------------------+

查看分区信息

命令格式
desc table_name partition(pt_spec);

功能说明:查看某个分区表具体的分区信息。

示例
odps@ project_name>desc meta.m_security_users partition (ds='20151010');
+------------------------------------------------------------------------------------+
| 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和Show Tables like

命令格式
SHOW TABLES;
SHOW TABLES like 'chart';
功能说明
  • SHOW TABLES:列出当前项目空间下所有的表。
  • SHOW TABLES like 'chart':列出当前项目空间下表名与'chart'匹配上的表,支持正则表达式。
示例
odps@ project_name>show tables;
odps@ project_name>show tables like 'ods_brand*';
ALIYUN$odps_user@aliyun.com:table_name
......
其中,
  • ALIYUN是系统提示符,表示您是阿里云用户。
  • odps_user@aliyun.com是用户名,表示该表的创建者。
  • table_name是表名。

Show Partitions

命令格式
SHOW PARTITIONS table_name; 

功能说明:列出一张表中的所有分区,表不存在或非分区表时报错。

示例
odps@ project_name>SHOW PARTITIONS table_name;
partition_col1=col1_value1/partition_col2=col2_value1
partition_col1=col1_value2/partition_col2=col2_value2
......
其中,
  • partition_col1partition_col2表示该表的分区列。
  • col1_value1col2_value1col1_value2col2_value2表示分区列对应的值。