MaxCompute階層式存放區支援標準儲存、低頻儲存和長期儲存,預設情況下為標準儲存。您可以根據資料的訪問頻率,將某些表或分區的儲存類型設定為低頻儲存或長期儲存,實現資料的冷熱分層,以降低資料存放區費用。
申請開通使用
階層式存放區類型介紹
儲存類型 | 描述 |
標準儲存 | 預設儲存類型,適用於經常訪問資料並對資料進行頻繁讀寫操作的情境。 |
低頻儲存 | 適用於不需要頻繁訪問的資料,能夠有效降低儲存費用。 說明
|
長期儲存 |
階層式存放區計費
儲存類型 | 計費公式 | 價格 | 說明 |
標準儲存 | 日儲存費用=日儲存量平均值×單價 | 專案的實際資料存放區量在1 GB以內(包含1 GB)免費,超過1 GB的部分,計費單價為:0.0006 USD/GB/天。 | 日儲存量平均值=採集到的儲存量之和÷24 |
低頻儲存 |
|
|
|
長期儲存 |
|
|
注意事項
當前低頻儲存和長期儲存類型的資料不支援PAI和Hologres直接存取。
當表或分區設定為低頻儲存或長期儲存時,請注意訪問資料量和頻次,如果訪問資料量大或訪問頻次過多,可能會導致費用高於標準儲存費用。
一個月全量訪問一次低頻儲存的表或分區產生的費用,將等於標準儲存的費用。
六個月全量訪問一次長期儲存的表或分區產生的費用,將等於標準儲存的費用。
設定儲存類型
儲存類型之間可以相互轉換,且修改儲存類型不會影響資料訪問。
儲存類型轉換說明如下:
轉換過程 | 說明 |
標準儲存->低頻儲存 | 支援手動和自動方式轉換,無I/O訪問費,同時不更新表/分區的“資料最後更新時間”和“資料最後訪問時間”。 |
標準儲存->長期儲存 | |
低頻儲存->長期儲存 | 支援手動和自動方式轉換,手動切換有I/O訪問費,自動切換沒有,同時不更新表/分區的“資料最後更新時間”和“資料最後訪問時間”。 |
低頻儲存->標準儲存 | 僅支援手動轉換,有I/O訪問費,同時更新表/分區的“資料最後更新時間”和“資料最後訪問時間”。 |
長期儲存->低頻儲存 | |
長期儲存->標準儲存 |
手動自訂設定
對於非分區表或分區,直接手動自訂設定為低頻儲存或長期儲存類型,設定後立即生效。
命令格式
ALTER TABLE <TABLE_NAME> [PARTITION(<PARTITION_SPEC>)]
SET <TBLPROPERTIES|PARTITIONPROPERTIES>("storagetier"="standard|lowfrequency|longterm");
參數說明
TABLE_NAME:必填,待修改的表或者分區儲存類型的表名稱。
PARTITION_SPEC:當修改分區儲存類型時必填。
TBLPROPERTIES|PARTITIONPROPERTIES:修改表或分區的儲存類型,取值說明:
TBLPROPERTIES:修改表的儲存類型。
PARTITIONPROPERTIES:修改分區的儲存類型。
storagetier:必填,階層式存放區類型,取值說明:
standard:標準儲存,只收取儲存費用。
lowfrequency:低頻儲存,會收取儲存費用和低頻儲存資料訪問費用。
longterm:長期儲存,會收取儲存費用和長期儲存資料訪問費用。
僅支援對分區表中的分區設定階層式存放區,不支援對分區表設定階層式存放區。
使用樣本
樣本1:設定非分區表的儲存類型為低頻儲存。
ALTER TABLE tablename SET TBLPROPERTIES("storagetier"="lowfrequency");
查看錶屬性,可以通過
StorageTier
欄位確認當前的儲存類型。--查看錶屬性 DESC extended tablename; ---返回結果如下 +-------------------------------------------------------------------+ | Owner: ALIYUN$mofan_****@test.aliyunid.com | | Project: mf_mc_**** | | TableComment: | +-------------------------------------------------------------------+ | CreateTime: 2021-11-18 15:14:00 | | LastDDLTime: 2023-09-11 14:34:55 | | LastModifiedTime: 2023-09-13 15:02:28 | | LastAccessTime: 2023-09-14 10:50:57 | +-------------------------------------------------------------------+ | InternalTable: YES | Size: 1923683131 | +-------------------------------------------------------------------+ | Native Columns: | +-------------------------------------------------------------------+ | Field| Type| Label |ExtendedLabel| Nullable| DefaultValue|Comment | +-------------------------------------------------------------------+ | empno | bigint | | | true | NULL | | | ename | string | | | true | NULL | | | job | string | | | true | NULL | | | mgr | bigint | | | true | NULL | | | hiredate | datetime | | | true | NULL | | | sal | bigint | | | true | NULL | | | comm | bigint | | | true | NULL | | | deptno | bigint | | | true | NULL | | +-------------------------------------------------------------------+ | Extended Info: | +-------------------------------------------------------------------+ | TableID: 8e0cc78c81ab4ad7af30bff7a8e**** | | IsArchived: false | | PhysicalSize: 5771049393 | | FileNum: 3 | | StoredAs: AliOrc | | CompressionStrategy: normal | | odps.timemachine.retention.days: 1 | | ColdStorageStatus: N/A | | encryption_enable: false | | StorageTier: lowfrequency | | StorageTierLastModifiedTime: 2023-09-11 14:34:55 | +-------------------------------------------------------------------+
樣本2:設定分區表bank_data_pt相應分區的儲存類型為低頻儲存。
ALTER TABLE bank_data_pt PARTITION (credit='yes') SET PARTITIONPROPERTIES ("storagetier" = 'lowfrequency');
查看分區屬性,可以通過
StorageTier
欄位確認當前的儲存類型。--查看分區屬性 DESC extended bank_data_pt PARTITION(credit='yes'); --返回結果 +------------------------------------------------------------------------------------+ | PartitionSize: 0 | +------------------------------------------------------------------------------------+ | CreateTime: 2024-05-10 10:28:16 | | LastDDLTime: 2024-05-10 10:31:01 | | LastModifiedTime: 2024-05-10 10:28:16 | +------------------------------------------------------------------------------------+ | IsExstore: false | | IsArchived: false | | PhysicalSize: 0 | | FileNum: 0 | | ColdStorageStatus: N/A | | StorageTier: LowFrequency | | StorageTierLastModifiedTime: 2024-05-10 10:31:01 | +------------------------------------------------------------------------------------+
通過生命週期規則自動化佈建
對專案或分區表定義階層式存放區生命週期規則,基於該規則引發階層式存放區類型自動轉換。即:
專案設定後,專案內所有非分區表和分區滿足規則,表和分區會自動轉換為對應的儲存類型。
分區表設定後,該表下所有分區滿足規則,分區會自動轉換為對應的儲存類型。
使用說明
不支援對分區以及非分區表單獨配置階層式存放區生命週期規則。
分區表的階層式存放區生命週期規則優先順序高於專案設定的階層式存放區生命週期規則。
當表或分區的生命週期同時滿足長期儲存(longterm)規則和低頻儲存(lowfrequency)規則時,會被優先轉換為longterm。
當表或分區的生命週期先滿足lowfrequency規則時,會被轉換為lowfrequency,之後再滿足longterm規則時,會再次被轉換為longterm,此時從lowfrequency變成longterm不會產生lowfrequency的訪問費用,計費詳情請參見階層式存放區計費。
平台每天定時進行兩次規則掃描設定,因此可能出現表或分區滿足條件後無法立即進行設定,會存在一定的延遲。
命令格式
專案層級設定生命週期規則
setproject odps.table.lifecycle.config=<lifecycle_config_json_string>;
除此之外您也可通過MaxCompute控制台進行設定,具體如下:
登入MaxCompute控制台,在左上方選擇地區。
在左側導覽列選擇工作區>專案管理,單擊目標專案操作列的管理。
在參數配置頁簽的生命週期配置地區,配置最近訪問配置策略和最近修改配置策略參數。
最近訪問配置策略:對應
DaysAfterLastAccessGreaterThan
參數。最近修改配置策略:對應
DaysAfterLastModificationGreaterThan
參數。
分區表設定生命週期規則
分區表建表時設定:
CREATE [EXTERNAL] TABLE [if NOT EXISTS] <table_name> [PRIMARY key (<pk_col_name>, <pk_col_name2>),(<col_name> <data_type> [NOT NULL] [DEFAULT <default_value>] [comment <col_comment>], ...)] partitioned BY (<col_name> <data_type> [comment <col_comment>], ...) tblproperties ('lifecycle_config' = '<lifecycle_config_json_string>') ;
分區表修改設定:
ALTER TABLE <TABLE_NAME> SET TBLPROPERTIES ('lifecycle_config' = '<lifecycle_config_json_string>');
參數說明
主要參數說明如下,其餘參數資訊請參見通用參數。
lifecycle_config_json_string:
當專案層級設定生命週期規則時,定義如下。
{ "TierToLowFrequency": { "DaysAfterLastModificationGreaterThan": <days>, //距離最後修改時間超過xx天 "DaysAfterLastAccessGreaterThan": <days>, //距離最後訪問時間超過xx天 }, "TierToLongterm": { "DaysAfterLastModificationGreaterThan": <days>, "DaysAfterLastTierModificationGreaterThan": <days> } //每個條件為可選條件,多個條件為or的關係 }
當分區表設定生命週期規則時,定義如下。
{ \"TierToLowFrequency\": { \"DaysAfterLastModificationGreaterThan\": <days>, //距離最後修改時間超過xx天 \"DaysAfterLastAccessGreaterThan\": <days>, //距離最後訪問時間超過xx天 }, \"TierToLongterm\": { \"DaysAfterLastModificationGreaterThan\": <days>, \"DaysAfterLastTierModificationGreaterThan\": <days> } //每個條件為可選條件,多個條件為or的關係 }
TierToLowFrequency:低頻儲存標識。
TierToLongterm:長期儲存標識。
DaysAfterLastModificationGreaterThan:定義距離資料最後修改時間超過多少天后自動化佈建,對應表或分區的LastModifiedTime。
DaysAfterLastAccessGreaterThan:定義距離資料最後訪問時間超過多少天后自動化佈建,若表或分區的LastAccessTime為空白,則:
對於2023年10月01日前建立的表或分區,預設按照UTC+0時區的
2023.10.01 00:00:00
時間計算。對於2023年10月01日後建立的表或分區,若資料沒被訪問過,按照CreateTime時間計算。
使用樣本
樣本1:專案層級設定生命週期規則。
setproject odps.table.lifecycle.config={"TierToLongterm":{"DaysAfterLastModificationGreaterThan":180},"TierToLowFrequency":{"DaysAfterLastModificationGreaterThan":120}};
樣本2:取消專案層級生命週期配置。
setproject odps.table.lifecycle.config=;
樣本3:分區表設定生命週期規則。
--分區表建表時設定 CREATE TABLE lifecycle_part_t (key string) partitioned BY (ds STRING) tblproperties ('lifecycle_config' = '{\"TierToLowFrequency\": {\"DaysAfterLastModificationGreaterThan\": 2,\"DaysAfterLastAccessGreaterThan\": 2},\"TierToLongterm\": {\"DaysAfterLastModificationGreaterThan\": 4,\"DaysAfterLastTierModificationGreaterThan\": 7}}') ; --分區表修改設定 ALTER TABLE lifecycle_part_t SET tblproperties ('lifecycle_config'='{\"TierToLowFrequency\": {\"DaysAfterLastModificationGreaterThan\": 90,\"DaysAfterLastAccessGreaterThan\": 30},\"TierToLongterm\": {\"DaysAfterLastModificationGreaterThan\": 180,\"DaysAfterLastTierModificationGreaterThan\": 7}}');