閱讀920 返回首頁    go windows


創建刪除表__快速開始_大數據計算服務-阿裏雲

當用戶被添加到項目空間並被賦予建表等權限後,就可以操作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及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 。您如果查看test2的表信息,pt,ds兩個字段僅會作為普通列存在,而不是表的分區。

刪除表

  1. DROP TABLE [IF EXISTS] table_name;

示例,刪除test2表:

  1. drop table test2;

更多介紹請參考 刪除表(DROP TABLE)

創建分區

當創建一張分區表之後,為了往該表裏麵導入不同分區數據,我們需要創建分區。命令如下:

  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');

最後更新:2016-05-11 11:01:36

  上一篇:go 角色創建及授權__快速開始_大數據計算服務-阿裏雲
  下一篇:go 導入導出數據__快速開始_大數據計算服務-阿裏雲