MaxCompute提供了表数据生命周期管理功能,方便您释放存储空间,简化回收数据的流程。
生命周期
您可以在创建表时,通过lifecycle
关键字指定生命周期。
在MaxCompute中,每当表的数据被修改后,表的
LastModifiedTime
将会被更新。MaxCompute会根据每张表的LastModifiedTime
以及生命周期的设置来判断是否要回收此表:
- 如果表是非分区表,自最后一次数据被修改开始计算,经过
days
天后数据仍未被改动,则此表无需您干预,MaxCompute会自动回收,类似drop table
操作。 - 如果表是分区表,则根据各分区的
LastModifiedTime
判断该分区是否该被回收。分区表的最后一个分区被回收后,该表不会被删除。如果需要最后一个分区被回收后,该表也自动删除,可以通过以下两种方式设置:- 项目属性:
setproject odps.table.lifecycle.deletemeta.on.expiration=true;
。 - 表属性:
tblproperties('lifecycle.deletemeta'='true');
。
说明 如果表属性与项目属性设置有冲突,优先使用表属性。- 示例1。
- 项目级别设置自动删除表。
setproject odps.table.lifecycle.deletemeta.on.expiration=true;
- 项目级别关闭自动删除表。
setproject odps.table.lifecycle.deletemeta.on.expiration=false;
- 项目级别设置自动删除表。
- 示例2。
- 表级别设置自动删除表。
create table mf_delete_meta2(id int, name string) partitioned by (ds string) tblproperties ('lifecycle.deletemeta'='true') lifecycle 1;
- 表级别设置关闭自动删除表。
alter table mf_delete_meta2 set tblproperties('lifecycle.deletemeta'='false');
- 表级别设置自动删除表。
- 项目属性:
使用限制
- 生命周期只能在表级别设置,不能在分区级别设置。分区表设置生命周期后,生命周期也会在分区级别生效。
- 非分区表不支持取消生命周期,只能修改生命周期。
- 分区表不可以取消某个具体分区的生命周期,只能修改表级别的生命周期。
创建表的生命周期
在创建表时指定表的生命周期。
- 命令格式
--创建新表。 create [external] table [if not exists] <table_name> [(<col_name> <data_type> [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>] lifecycle <days>; --基于已存在的表创建新表。 create table [if not exists] <table_name> [as <select_statement> | like <existing_table_name>];
- 参数说明
- table_name:必填。需要设置生命周期的表名。
- days:必填。修改后的生命周期时间,只能为正整数,单位为天。
说明 创建表的详细参数说明请参见创建表。
- 使用示例
--新建test_lifecycle表,生命周期为100天。 create table test_lifecycle (key string) lifecycle 100;
修改表的生命周期
修改已存在的分区表或非分区表的生命周期。
- 命令格式
alter table <table_name> set lifecycle <days>;
- 参数说明
- table_name:必填。需要修改生命周期的表名。
- days:必填。修改后的生命周期时间,只能为正整数,单位为天。
- 使用示例
--修改test_lifecycle表,将生命周期设为50天。 alter table test_lifecycle set lifecycle 50;
禁止或恢复生命周期
禁止或恢复指定表或分区的生命周期。
- 命令格式
alter table <table_name> [<pt_spec>] {enable|disable} lifecycle;
- 参数说明
- table_name:必填。待禁止或恢复生命周期的表的名称。
- pt_spec:可选。待禁止或恢复生命周期的表的分区信息。格式为
partition_col1=col1_value1, partition_col2=col2_value1...
。对于有多级分区的表,必须指明全部的分区值。 - enable:恢复表或指定分区的生命周期功能。
- 表及其分区重新参与生命周期回收,默认使用当前表及分区上的生命周期配置。
- 开启表生命周期前可以修改表及分区的生命周期配置,防止开启表生命周期后因使用之前的配置导致数据被误回收。
- disable:禁止表或指定分区的生命周期功能。
- 禁止表本身及其所有分区被生命周期回收,优先级高于恢复表分区生命周期。即当使用
table disable lifecycle
时,pt_spec enable lifecycle
设置无效。 - 禁止表的生命周期功能后,表的生命周期配置及其分区的enable和disable标记会被保留。
- 禁止表的生命周期功能后,仍然可以修改表及分区的生命周期配置。
- 禁止表本身及其所有分区被生命周期回收,优先级高于恢复表分区生命周期。即当使用
- 使用示例
- 示例1:禁止表trans的生命周期功能。
alter table trans disable lifecycle;
- 示例2:禁止表trans中时间为20141111分区的生命周期功能。
alter table trans partition (dt='20141111') disable lifecycle;
- 示例1:禁止表trans的生命周期功能。