全部產品
Search
文件中心

MaxCompute:生命週期操作

更新時間:Jun 19, 2024

根據業務需求和資料使用頻率,您可以設定表的生命週期,從而實現資料的自動回收。合理設定表的生命週期,可以靈活地管理資料的儲存周期,確保資料的及時性和有效性,同時最大限度地節省資源和成本。

生命週期

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;