您如果想对表进行操作,既可以通过客户端使用常用命令进行操作,也可以通过大数据开发套件中可视化的数据表管理方便地对表进行收藏、申请权限、查看分区信息等操作,详情请参见
表详情页介绍。
本文将为您介绍如何通过客户端使用常用命令进行表操作。
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
行为说明如下:
创建一张表。
注意:
表名与列名均对大小写不敏感。
表名,列名中不能有特殊字符,只能用英文的 a-z,A-Z 及数字和下划线‘_’,且以字母开头,名称的长度不超过 128 字节,否则报错。
注释内容是长度不超过 1024 字节的有效字符串,否则报错。
对于该命令更详细的介绍请参见 创建表(CREATE TABLE)。
[LIFECYCLE days] days 参数为生命周期时间,只接受正整数。单位:天。
非分区表:自最后一次数据被修改开始计算,经过 days 天后数据仍未被改动,则此表无需您干预,将会被 MaxCompute 自动回收(类似 drop table 操作)。
分区表:根据各分区的 LastDataModifiedTime 判断该分区是否该被回收。不同于非分区表,分区表的最后一个分区被回收后,该表不会被删除。生命周期只能设定到表级别,不能在分区级设置生命周期。
示例如下:
- CREATE TABLE IF NOT EXISTS sale_detail(
- shop_name STRING,
- customer_id STRING,
- total_price DOUBLE)
- PARTITIONED BY (sale_date STRING,region STRING); --如果没有同名表存在,创建一张分区表 sale_detail 。
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:表名或视图名称
行为说明如下:
返回指定表的信息,具体返回包括以下信息:
Owner(表的属主)。
Project:表所属的项目空间。
CreateTime:创建时间。
LastDDLTime:最后一次 DDL 操作时间。
LastModifiedTime:表中的数据最后一次被改动的时间。
InternalTable:表示被描述的对象是表,总是显示 YES。
Size:表数据所占存储容量压缩后的大小,压缩比一般为 5 倍,单位 Byte。
Native Columns:非分区列的信息,包括:列名,类型,备注。
Partition Columns:分区列信息,包括:分区名,类型,备注。
示例如下:
- 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 * fromsrc。关于视图的介绍请参见 创建视图。
查看分区信息
命令格式如下:
- 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;
行为说明如下:
列出当前项目空间下所有的表。
示例如下:
- odps@ project_name>show tables;
- ALIYUN$odps_user@aliyun.com:table_name
- ......
注意:
上述示例中的命令在客户端中运行。
ALIYUN 是系统提示符,表示您是阿里云用户。
odps_user@aliyun.com 是用户名,表示该表的创建者。
table_name 是表名。
Show Partitions
命令格式如下:
- SHOW PARTITIONS <table_name>; --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_col1 和 partition_col2 表示该表的分区列。
col1_value1,col2_value1,col1_value2,col2_value2 表示分区列对应的值。