根据业务需求和数据使用频率,您可以设置表的生命周期,从而实现数据的自动回收。合理设置表的生命周期,可以灵活地管理数据的存储周期,确保数据的及时性和有效性,同时最大限度地节省资源和成本。
生命周期
MaxCompute表的生命周期(Lifecycle),指表(分区)数据从最后一次更新的时间算起,在经过指定的时间后没有变动,则此表(分区)将被MaxCompute自动回收,这个指定的时间就是生命周期。生命周期回收为每天定时启动,扫描全量分区。
对于非分区表,当LastModifiedTime超过设定的生命周期时长时,MaxCompute会回收这些数据并删除对应的表。
对于分区表,则根据各分区的LastModifiedTime判断该分区数据是否该被回收,当最后一个分区被回收后,该表不会被删除。
如果您需要在最后一个分区被回收后自动删除该表,可以通过以下两种方式进行设置:
说明当项目级别与表级别的设置发生冲突,会优先使用表级别的设置。
项目级别
--最后一个分区被回收后自动删除该表 setproject odps.table.lifecycle.deletemeta.on.expiration=true; --最后一个分区被回收后默认保留该表 setproject odps.table.lifecycle.deletemeta.on.expiration=false;
表级别
---创建新表:设置最后一个分区被回收后自动删除该表 CREATE TABLE <Table_Name>(id int, name string) partitioned BY (ds string) tblproperties ('lifecycle.deletemeta'='true') lifecycle 1; ---已有表:设置最后一个分区被回收后自动删除该表 ALTER TABLE <table_name> SET tblproperties('lifecycle.deletemeta'='true'); --最后一个分区被回收后默认保留该表 ALTER TABLE <table_name> SET tblproperties('lifecycle.deletemeta'='false');
生命周期操作命令如下。
类型 | 功能 | 角色 | 操作入口 |
您可以在创建表时设置生命周期,也可以对已有的表设置生命周期或修改生命周期时长。 | 具备修改表权限(Alter)的用户 | 本文中的命令您可以在如下工具平台执行: | |
禁止或恢复指定表或分区的生命周期。 |
注意事项
任务调度依赖不会影响表数据生命周期的到期回收。
为分区表设置生命周期时,该生命周期设置将应用于整个表,包括所有的分区,不支持在分区级别单独设置或修改生命周期时长。
数据被回收后,默认在回收站保留一天,超过一天,数据将被永久清理,清理后将无法恢复。
生命周期主要提供定期回收表或分区的功能,每天根据服务的繁忙程度,不定时回收。不能确保表或分区的生命周期到期后,立刻被回收。
在进行数据写入、更新和删除操作时,会更新LastModifiedTime;而修改生命周期时,不会影响LastModifiedTime。
设置生命周期
创建表
命令格式
--创建新表。 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> like <existing_table_name> [lifecycle <days>];
参数说明
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
设置无效。即使生命周期功能被禁止,MaxCompute仍会记录之前设置的生命周期配置,并允许您在需要时进行修改。
使用示例
示例1:禁止表
trans
的生命周期功能。ALTER TABLE trans disable lifecycle;
示例2:禁止表
trans
中时间为20141111分区的生命周期功能。ALTER TABLE trans partition (dt='20141111') disable lifecycle;