MaxCompute表的生命週期(Lifecycle),指表(分區)資料從最後一次更新的時間算起,在經過指定的時間後沒有變動,則此表(分區)將被MaxCompute自動回收。這個指定的時間就是生命週期。通過設定生命週期可以實現自動資料清理或資料保留,降低儲存成本。
基本定義與作用
單位與取值:生命週期以“天”為單位,取值為正整數。
功能:提供定期自動回收表或分區的功能。
回收規則
計時起點:生命週期的計算從表或分區的最後一次資料修改時間(
LastModifiedTime)開始。觸發條件:
LastModifiedTime需要超過生命週期指定的時間才會回收。即(目前時間 - LastModifiedTime) > 生命週期天數時,表或分區才會被納入回收範圍。執行機制:
回收操作由系統每天定時啟動,掃描全量表和分區。實際回收時間取決於服務的繁忙程度,不保證在到期後立刻執行。資料生命週期達到刪除時間點後,資料會在24小時內被刪除。
樣本:
假設某個分區表生命週期為1天,該分區資料最後一次被修改的時間是
2026年02月17日15時。如果在2026年02月18日15時之前掃描此表(不到一天),則不會回收表分區。如果2026年02月19日掃描時發現表分區LastModifiedTime超過生命週期指定的時間,則上述分區會被回收。
不同表類型的適用規則
非分區表
生命週期作用於整張表。
建立表時即可指定生命週期,如果沒有為表指定生命週期,則表(分區)不會根據生命週期規則被MaxCompute自動回收。
如果表資料在生命週期內沒有被修改,經過指定天數後整張表將會被MaxCompute自動回收(類似DROP TABLE操作)。
刪除表後,表的所有屬性資訊全部會被刪除,包括生命週期。建立同名表後,表的生命週期以新設定的屬性為準。
分區表
生命週期作用於每個獨立的分區。但是只能在表層級設定生命週期,不能在分區層級設定生命週期。為分區表指定的生命週期適用於該表的所有分區。
建立表時即可指定生命週期,如果沒有為表指定生命週期,則分區不會根據生命週期規則被MaxCompute自動回收。
在生命週期內未被修改的分區會被單獨回收。
不同於非分區表,分區表的最後一個分區被回收後,該表不會被刪除。
刪除表後,表的所有屬性資訊全部會被刪除,包括生命週期。建立同名表後,表的生命週期以新設定的屬性為準。
審計與監控
執行主體:
執行生命週期回收資料操作的使用者是阿里雲服務帳號:
maxcompute.aliyuncs.com。操作記錄:
可以在Action Trail服務中擷取相關操作記錄,詳情請參見事件查詢快速入門。例如,可看到類似“表
bettergithubanalytics.test_lifecycle依據生命週期被MaxCompute自動回收”的記錄。非分區表自動回收
表
bettergithubanalytics.test_lifecycle依據生命週期被MaxCompute自動回收,可看到如下記錄。在Action Trail(ActionTrail)事件詳情頁面中,事件解讀提示阿里雲服務(maxcompute.aliyuncs.com)調用了MaxCompute的 DropTable 介面。基本資料中事件名稱為 DropTable,使用者名稱為 maxcompute.aliyuncs.com(表明該操作由系統服務自動發起),事件時間為 2022 年 12 月 11 日 11:21:11。相關資源套件含兩條記錄:
表(ACS::MaxCompute::Table):
test_lifecycle專案空間(ACS::MaxCompute::Project):
bettergithubanalytics
{ "eventType": "TableEvent", "referencedResources": { // 事件影響的資源清單 "ACS::MaxCompute::Table": [ "test_lifecycle" ], "ACS::MaxCompute::Project": [ "bettergithubanalytics" ] }, "userIdentity": { // 要求者的身份資訊 "accountId": "xxx", // 阿里雲主帳號 ID "type": "system", // 阿里雲服務 "userName": "maxcompute.aliyuncs.com" }, "serviceName": "MaxCompute", // 事件相關的雲端服務名稱 "additionalEventData": { "TableName": "test_lifecycle", "ProjectName": "bettergithubanalytics", "OperationText": "RECYCLE_TABLE" }, "requestId": "3b85e8ed-6c4a-4680-b386-4afd90dd6972", "eventTime": "2022-12-11T03:21:11Z", // 事件的發生時間 (UTC 格式) "isGlobal": false, "acsRegion": "cn-beijing", // 阿里雲地區 "eventName": "DropTable" // 事件名稱 }分區表自動回收分區
表
bettergithubanalytics.sale_detail的分區sale_date=2013/region=china依據生命週期被MaxCompute自動回收,可看到如下記錄。在Action Trail(ActionTrail)事件詳情頁面,事件解讀顯示阿里雲服務調用了MaxCompute的 ChangeTable 介面。基本資料中,事件名稱為 ChangeTable,事件來源為MaxCompute,使用者名稱為
maxcompute.aliyuncs.com。相關資源地區列出兩條關聯資源:資源類型表(ACS::MaxCompute::Table),資源名稱
sale_detail資源類型專案空間(ACS::MaxCompute::Project),資源名稱
bettergithubanalytics
以下 JSON 樣本展示了系統服務(
type: system)執行RECYCLE_PARTITION操作的事件詳情,其中userIdentity.type為system表示該操作由阿里雲服務自動觸發:{ "referencedResources": { "ACS::MaxCompute::Table": [ "sale_detail" ], "ACS::MaxCompute::Project": [ "bettergithubanalytics" ] }, "userIdentity": { "accountId": "xxx", "type": "system", "userName": "maxcompute.aliyuncs.com" }, "serviceName": "MaxCompute", "additionalEventData": { "TableName": "sale_detail", "Partition": "sale_date=2013/region=china", "ProjectName": "bettergithubanalytics", "OperationText": "RECYCLE_PARTITION" }, "requestId": "884d49e0-7343-422e-899a-599628229617", "eventTime": "2022-12-11T03:21:11Z", "isGlobal": false, "acsRegion": "cn-beijing", "eventName": "ChangeTable" }
相關文檔
關於建表時如何指定、修改表生命週期、修改表
LastModifiedTime等操作,請參見表操作。更多關於生命週期的操作,例如對已有表或建立表設定生命週期、禁止或恢複生命週期操作,請參見生命週期操作。
表分區的回收操作記錄也支援使用DataWorks的資料地圖功能查看,詳情請參見資料地圖概述。其顯示操作人帳號為MaxCompute系統帳號
odps_user@aliyun.com,即名稱為maxcompute.aliyuncs.com的阿里雲服務。資料變更記錄表格展示分區操作的變更詳情,包含以下欄位:
變更描述:例如
刪除分區:sale_date=2013/region=china變更類型:例如刪除分區
粒度:例如 PARTITION
時間:操作執行的時間
操作人:執行操作的使用者帳號,例如
odps_user@aliyun.com