生命周期操作

更新时间: 2023-11-29 16:57:23

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;
阿里云首页 云原生大数据计算服务 MaxCompute 相关技术圈