开发者社区> 问答> 正文

MaxCompute快速入门:创建/查看/删除表



当您被添加到项目空间并被赋予建表等权限后,就可以操作 MaxCompute 了。由于在 MaxCompute 中的操作对象(输入、输出)都是表,所以在处理数据之前,首先要创建表、分区。
创建/删除表的方式有两种,如下所示:


本文将为您介绍如何通过客户端常用命令进行创建表、查看表和删除表的操作。

创建表


建表语句如下所示:  
  1. CREATE TABLE [IF NOT EXISTS] table_name
  2. [(col_name data_type [COMMENT col_comment], ...)]
  3. [COMMENT table_comment]
  4. [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  5. [LIFECYCLE days]
  6. [AS select_statement]
  7. CREATE TABLE [IF NOT EXISTS] table_name
  8. LIKE existing_table_name

建表语句说明:  

  • 表名与列名均对大小写不敏感。

  • 在创建表时,如果不指定 if not exists 选项而存在同名表,则返回出错;若指定此选项,则无论是否存在同名表,即使原表结构与要创建的目标表结构不一致,均返回成功。已存在的同名表的元信息不会被改动。

  • 数据类型:包括 Bigint,Double,Boolean,Datetime,Decimal,String 等多种数据类型。  

  • 表名,列名中不能有特殊字符,只能用英文的 a-z,A-Z 及数字和下划线 _,且以字母开头,名称的长度不超过 128 字节。

  • Partitioned by:指定表的分区字段,目前仅支持 String类型,其他类型行为未定义。分区值不可以有双字节字符(如中文),必须是以英文字母 a-z,A-Z 开始后可跟字母数字,名称的长度不超过 128字节。允许的字符包括:空格 ‘‘,冒号’:’,下划线’_’,美元符’$’,井号’#’,点’.’,感叹号’!’和’@’,出现其他字符行为未定义。例如:”\t”,”\n”,”/”等。当利用分区字段对表进行分区时,新增分区、更新分区内数据和读取分区数据均不需要做全表扫描,可以提高处理效率。

  • 注释内容是长度不超过 1024 字节的有效字符串。  

  • lifecycle 指明此表的生命周期,单位:天。create table like 语句不会复制源表的生命周期属性。

  • 目前,在表中建的分区层次不能超过 6 级。一个表允许的分区个数支持按照具体的 project 配置,默认 60,000个。

    注意:  
    创建表的详细介绍请参见 创建表

  • 添加分区请参见 添加及删除分区

  • 生命周期的修改请参见 修改表的生命周期属性

创建表示例如下:
  1. create table test1 (key string); -- 创建非分区表,表名 test1,字段名 key,数据类型 string。  
  2. create table test2 (key bigint) partitioned by (pt string, ds string); --创建分区表  
  3. create table test3 (key boolean) partitioned by (pt string, ds string) lifecycle 100; -- 创建带有生命周期的表  
  4. create table test4 like test3; -- 除生命周期属性外,test3 的其他属性(字段类型,分区类型等)均与 test4 完全一致  
  5. create table test5 as select * from test2;
  6.   -- 这个操作会创建 test5,但分区,生命周期信息不会被拷贝到目标表中。
  7.   -- 此操作仅会将 test2 的数据复制到 test5 中(如果 test2 有数据的话,此示例中 test2 为空表,后续章节会介绍数据导入)。

创建表的场景如下:
假设需要创建一张用户表 user,包括如下信息:

  • user_id bigint 类型:用户标识,唯一标识一个用户。

  • gender bigint 类型:性别(0,未知;1,男;2,女)。

  • age bigint:用户年龄。

按照 region(区域)和 dt(日期)进行分区,生命周期为 365 天。  
建表语句如下所示:
  1. CREATE TABLE user (  
  2. user_id BIGINT, gender BIGINT COMMENT '0 unknow,1 male, 2 Female', age BIGINT)  
  3. PARTITIONED BY (region string, dt string) LIFECYCLE 365;


查看表信息


当创建表成功之后,您可以通过如下命令查看表的信息:  
  1. desc <table_name>;

例如,查看上述示例中表 test3 信息:  
  1. desc test3;

结果显示如下:  
  1. odps@ $odps_project>desc test3;
  2. +------------------------------------------------------------------------------------+
  3. | Owner: ALIYUN$maojing.mj@alibaba-inc.com | Project: $odps_project
  4. | TableComment:                                                                      |
  5. +------------------------------------------------------------------------------------+
  6. | CreateTime:               2015-09-18 12:26:57                                      |
  7. | LastDDLTime:              2015-09-18 12:26:57                                      |
  8. | LastModifiedTime:         2015-09-18 12:26:57                                      |
  9. | Lifecycle:                100                                                      |
  10. +------------------------------------------------------------------------------------+
  11. | InternalTable: YES      | Size: 0                                                  |
  12. +------------------------------------------------------------------------------------+
  13. | Native Columns:                                                                    |
  14. +------------------------------------------------------------------------------------+
  15. | Field           | Type       | Label | Comment                                     |
  16. +------------------------------------------------------------------------------------+
  17. | key             | boolean    |       |                                             |
  18. +------------------------------------------------------------------------------------+
  19. | Partition Columns:                                                                 |
  20. +------------------------------------------------------------------------------------+
  21. | pt              | string     |                                                     |
  22. | ds              | string     |                                                     |
  23. +------------------------------------------------------------------------------------+

查看 test4 信息:  
  1. desc test4;

显示结果如下:  
  1. odps@ $odps_project>desc test4;
  2. +------------------------------------------------------------------------------------+
  3. | Owner: ALIYUN$maojing.mj@alibaba-inc.com | Project: $odps_project
  4. | TableComment:                                                                      |
  5. +------------------------------------------------------------------------------------+
  6. | CreateTime:               2015-09-18 12:27:09                                      |
  7. | LastDDLTime:              2015-09-18 12:27:09                                      |
  8. | LastModifiedTime:         2015-09-18 12:27:09                                      |
  9. +------------------------------------------------------------------------------------+
  10. | InternalTable: YES      | Size: 0                                                  |
  11. +------------------------------------------------------------------------------------+
  12. | Native Columns:                                                                    |
  13. +------------------------------------------------------------------------------------+
  14. | Field           | Type       | Label | Comment                                     |
  15. +------------------------------------------------------------------------------------+
  16. | key             | boolean    |       |                                             |
  17. +------------------------------------------------------------------------------------+
  18. | Partition Columns:                                                                 |
  19. +------------------------------------------------------------------------------------+
  20. | pt              | string     |                                                     |
  21. | ds              | string     |                                                     |
  22. +------------------------------------------------------------------------------------+

您会发现,除生命周期属性外,test3 的其他属性(字段类型,分区类型等)均与 test4 完全一致。查看表信息的更多介绍请参考 Describe Table。  
您如果查看 test5 的表信息,pt,ds 两个字段仅会作为普通列存在,而不是表的分区 。

删除表

  1. DROP TABLE [IF EXISTS] table_name;

示例,删除 test2 表:
  1. drop table test2;

更多详情请参见 删除表。  

创建分区


当创建一张分区表之后,为了往该表里面导入不同分区数据,您需要创建分区。命令如下:  
  1.     alter table table_name add [if not exists] partition partition_spec
  2.     partition_spec:
  3.         : (partition_col1 = partition_col_value1, partition_col2 = partiton_col_value2, ...)

比如上面的例子,给用户表 user 添加区域为 hangzhou,日期为 20150923 的分区,句子显示如下:  
  1. Alter table user add if not exists partition(region='hangzhou',dt='20150923');


删除分区


命令如下:  
  1.   alter table table_name drop [if exists] partition_spec;
  2.     partition_spec:
  3.         : (partition_col1 = partition_col_value1, partition_col2 = partiton_col_value2, ...)

比如删除区域为 hangzhou,日期为 20150923 的分区,语句如下:  
  1. Alter table user drop if exists partition(region='hangzhou',dt='20150923');

展开
收起
行者武松 2017-10-23 15:16:13 9501 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
大数据AI一体化的解读 立即下载
极氪大数据 Serverless 应用实践 立即下载
大数据&AI实战派 第2期 立即下载