MaxCompute表操作相关命令

一、创建表

1.1 建表语法格式

--创建新表。
 create [external] table [if not exists] <table_name>
 [primary key (<pk_col_name>, <pk_col_name2>),(<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>] 

--指定表为Transactional1.0表,后续可以对该表执行更新或删除表数据操作,但是Transactional表有部分使用限制,请根据需求创建。
 [tblproperties("transactional"="true")]

--指定表为Transactional2.0表,后续可以做upsert,增量查询,time-travel等操作
 [tblproperties ("transactional"="true" [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...])] [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>];

1.2 建表函数

external:可选。表示创建的表为外部表。
if not exists:可选。如果不指定if not exists选项而存在同名表,会报错。如果指定if not exists,只要存在同名表,即使原表结构与要创建的目标表结构不一致,均返回成功。已存在的同名表的元数据信息不会被改动。
table_name:必填。表名。表名大小写不敏感,不能有特殊字符,只能包含a~z、A~Z、数字和下划线(_)。建议以字母开头,名称的长度不超过128字节,否则报错。
col_name:可选。表的列名。列名大小写不敏感,不能有特殊字符,只能包含a~z、A~Z、数字、下划线(_)或中文。建议以字母开头,名称的长度不超过128字节,否则报错。
col_comment:可选。列的注释内容。注释内容为长度不超过1024字节的有效字符串,否则报错。
data_type:可选。列的数据类型,包含BIGINTDOUBLEBOOLEANDATETIMEDECIMAL和STRING等多种数据类型,详情请参见数据类型版本说明。
not null:可选。禁止该列的值为NULL。更多修改非空属性信息,请参见修改表的列非空属性。
default_value:可选。指定列的默认值,当insert操作不指定该列时,该列写入默认值。
table_comment:可选。表注释内容。注释内容为长度不超过1024字节的有效字符串,否则报错。
lifecycle:可选。表的生命周期,仅支持正整数。单位:天。
非分区表:自最后一次修改表数据开始计算,经过days天后数据无改动,则您无需干预此表,MaxCompute会自动回收(类似drop table操作)。
分区表:系统根据各分区的LastModifiedTime判断是否需要回收分区。不同于非分区表,分区表的最后一个分区被回收后,该表不会被删除。生命周期只能设定到表级别,不支持在分区级别设置生命周期。

1.3 分区表参数

partitioned by (<col_name> <data_type> [comment <col_comment>], ...:可选。指定分区表的分区字段。
col_name:表的分区列名。列名大小写不敏感,不能有特殊字符,只能包含a~z、A~Z、数字、下划线(_)或中文。建议以字母开头,名称的长度不超过128字节,否则报错。
data_type:分区列的数据类型。MaxCompute 1.0版本仅支持STRING类型。MaxCompute 2.0版本扩充了分区类型,包含TINYINTSMALLINTINTBIGINTVARCHAR和STRING类型。详情请参见数据类型版本说明。当使用分区字段对表进行分区时,新增分区、更新分区内数据和读取分区数据均不需要做全表扫描,提高处理效率。
col_comment:分区列的注释内容。注释内容为长度不超过1024字节的有效字符串,否则报错

1.4 常用的分区操作命令

1.4.1 添加分区----为已经存在的分区表新增分区

alter table <table_name> add [if not exists] partition <pt_spec> [partition <pt_spec> partition <pt_spec>...];
-- table_name 必填 待新增分区的分区表名称
-- if not exists:可选。如果未指定if not exists而同名的分区已存在,会执行失败并返回报错。
-- pt_spec:必填。新增的分区,格式为(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)。partition_col是分区字段,partition_col_value是分区值。分区字段不区分大小写,分区值区分大小写。
-- 示例,给test_table 表添加20230101的分区
alter table test_table add if not exists partition (ds='20230101');

1.4.2 删除分区----为已存在的分区表删除分区。

--一次删除一个分区。
alter table <table_name> drop [if exists] partition <pt_spec>;
--一次删除多个分区。
alter table <table_name> drop [if exists] partition <pt_spec>,partition <pt_spec>[,partition <pt_spec>....];
--批量删除分区。
alter table test_table drop if exists partition(ds < '20230101');
alter table test_table drop if exists partition(ds >= '20230101');
alter table test_table drop if exists partition(ds LIKE '2023%');
alter table test_table drop if exists partition(ds IN ('20230101','20230102','20230103'));
alter table test_table drop if exists partition(ds BETWEEN '20230101' AND '20230201');
alter table test_table drop if exists partition(substr(ds, 1, 4) = '2023');
alter table test_table drop if exists partition(ds < '20230101' OR ds >= '20230201');
alter table test_table drop if exists partition(ds > '20230101' AND ds <= '20230201');
alter table test_table drop if exists partition(NOT ds > '20230101');
--支持多个分区过滤表达式,表达式之间是OR的关系。
alter table test_table drop if exists partition(ds < '20230101'), partition(ds >= '20230201');

1.4.3 清空分区表

-- 未指定筛选条件
truncate table <table_name> partition <pt_spec>[, partition <pt_spec>....];
-- 指定筛选条件
truncate table <table_name> partition <partition_filtercondition>;

1.4.4 清空非分区表

--清空非分区表,表类型必须为非分区表, 否则报错
truncate table mf_tt2; 

二、创建视图

2.1 语法格式

create [or replace] view [if not exists] <view_name>
    [(<col_name> [comment <col_comment>], ...)]
    [comment <view_comment>]
    as <select_statement>;
   --参数说明 
   --or replace:可选。更新视图需要携带该字段。
   --if not exists:可选。如果没有指定if not exists,在视图已经存在时用create view会导致异常。这种情况可以用create or replace view重建视图,重建后视图本身的权限保持不变。
   --view_name:必填。待创建或更新的视图的名称。
   --col_name:必填。待创建视图包含的列名称。
   --col_comment:可选,待创建视图的列的注释。
   --view_comment:可选。待创建视图的注释。
   --select_statement:必填。select查询语句,是视图的数据来源,您必须有视图所引用表的读权限。视图只能包含一个有效的select语句。
   -- 删除视图
   drop view [if exists] <view_name>;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值