MaxComputeSQL DDL语句-表操作
表是MaxCompute的数据存储单元。数据仓库的开发、分析及运维都需要对表数据进行处理。
创建表
创建非分区表、分区表、外部表或聚簇表。
-
命令格式
--创建新表。 create [external] table [if not exists] <table_name> [(<col_name> <data_type> [not null] [default <default_value>] [comment <col_comment>], ...)] [comment <table_comment>] [partitioned by (<col_name> <data_type> [comment <col_comment>], ...)] --用于创建聚簇表时设置表的Shuffle和Sort属性。 [clustered by | range clustered by (<col_name> [, <col_name>, ...]) [sorted by (<col_name> [asc | desc] [, <col_name> [asc | desc] ...])] into <number_of_buckets> buckets] --仅限外部表。 [stored by StorageHandler] --仅限外部表。 [with serdeproperties (options)] --仅限外部表。 [location <osslocation>] --指定表为Transactional表,后续可以对该表执行更新或删除表数据操作,但是Transactional表有部分使用限制,请根据需求创建。 [tblproperties("transactional"="true")] [lifecycle <days>]; --基于已存在的表创建新表并复制数据,但不复制分区属性。 create table [if not exists] <table_name> [lifecycle <days>] as <select_statement>; --基于已存在的表创建具备相同结构的新表但不复制数据。 create table [if not exists] <table_name> like <existing_table_name> [lifecycle <days>];
-
参数说明
-
external:可选。表示创建的表为外部表。
-
if not exists:可选。如果不指定if not exists选项而存在同名表,会报错。如果指定if not exists,无论是否存在同名表,即使原表结构与要创建的目标表结构不一致,均返回成功。已存在的同名表的元数据信息不会被改动。
-
table_name:必填。表名。表名大小写不敏感,不能有特殊字符,只能包含az、AZ、数字和下划线(_)。建议以字母开头,名称的长度不超过128字节,否则报错。
-
col_name:可选。表的列名。列名大小写不敏感,不能有特殊字符,只能包含az、AZ、数字和下划线(_)。建议以字母开头,名称的长度不超过128字节,否则报错。
-
col_comment:可选。列的注释内容。注释内容为长度不超过1024字节的有效字符串,否则报错。
-
data_type:可选。列的数据类型,包含BIGINT、DOUBLE、BOOLEAN、DATETIME、DECIMAL和STRING等多种数据类型。
-
not null:可选。禁止该列的值为NULL。
-
default_value:可选。指定列的默认值,当
insert
操作不指定该列时,该列写入默认值。 -
table_comment:可选。表注释内容。注释内容为长度不超过1024字节的有效字符串,否则报错。
-
partitioned by (<col_name> <data_type> [comment <col_comment>], …:可选。指定分区表的分区字段。
- col_name:表的分区列名。列名大小写不敏感,不能有特殊字符,只能包含az、AZ、数字和下划线(_)。建议以字母开头,名称的长度不超过128字节,否则报错。
- data_type:分区列的数据类型,包含BIGINT、DOUBLE、BOOLEAN、DATETIME、DECIMAL和STRING等多种数据类型。MaxCompute 1.0版本仅支持STRING类型。MaxCompute 2.0版本扩充了分区类型,包含TINYINT、SMALLINT、INT、BIGINT、VARCHAR和STRING类型。当使用分区字段对表进行分区时,新增分区、更新分区内数据和读取分区数据均不需要做全表扫描,提高处理效率。
-