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

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

ChangeOwner

MaxCompute SQL支持通过changeowner命令修改表的拥有人(表Owner)。

命令格式如下。
alter table table_name changeowner to 'ALIYUN$xxx@aliyun.com';

Drop Table

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

Describe Table

命令格式如下。
DESC <table_name>; --table_name为表名或视图名称。
DESC extended <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等信息。
示例如下。
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     |                                                     |
+------------------------------------------------------------------------------------+
说明
  • 上述示例中的命令在客户端中运行。
  • 如果是非分区的表,将不会显示Partition Columns的相关信息。
  • 如果描述的是一个视图(View),将不显示InternalTable选项,而是VirtualView选项,其值总为YES。Size选项将会被ViewText选项替代,表示View的定义,例如select * from src。关于视图的介绍请参见视图操作

查看分区信息

命令格式如下。
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表示分区列对应的值。