生命周期操作

根据业务需求和数据使用频率,您可以设置表的生命周期,从而实现数据的自动回收。合理设置表的生命周期,可以灵活地管理数据的存储周期,确保数据的及时性和有效性,同时最大限度地节省资源和成本。

生命周期

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;