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');
生命周期操作命令如下。
类型 功能 角色 操作入口
创建表的生命周期 在创建表时指定表的生命周期。 具备修改表权限(Alter)的用户 本文中的命令您可以在如下工具平台执行:
修改表的生命周期 修改已存在的分区表或非分区表的生命周期。
禁止或恢复生命周期 禁止或恢复指定表或分区的生命周期。

使用限制

  • 生命周期只能在表级别设置,不能在分区级别设置。分区表设置生命周期后,生命周期也会在分区级别生效。
  • 非分区表不支持取消生命周期,只能修改生命周期。
  • 分区表不可以取消某个具体分区的生命周期,只能修改表级别的生命周期。

创建表的生命周期

在创建表时指定表的生命周期。

  • 命令格式
    --创建新表。
     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设置无效。
      • 禁止表的生命周期功能后,表的生命周期配置及其分区的enabledisable标记会被保留。
      • 禁止表的生命周期功能后,仍然可以修改表及分区的生命周期配置。
  • 使用示例
    • 示例1:禁止表trans的生命周期功能。
      alter table trans disable lifecycle;
    • 示例2:禁止表trans中时间为20141111分区的生命周期功能。
      alter table trans partition (dt='20141111') disable lifecycle;