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