In terms of tiered storage, MaxCompute supports three storage tiers: standard storage, infrequent access (IA) storage, and long-term storage. By default, data is stored at the standard storage tier. You can specify IA storage or long-term storage as the storage tier for a specific table or partition based on the data access frequency. This way, cold and hot data are separately stored, and data storage costs are reduced.
Apply for the use of the feature
New projects can use the storage tiers feature by default, including the China (Hong Kong), Japan (Tokyo), Indonesia (Jakarta), Malaysia (Kuala Lumpur), and Germany (Frankfurt) regions.
If you want to use the tiered storage feature for existing projects and other regions, such as Singapore, click the link to apply for the use of the feature. For more information, see Apply for trial use of new features.
Storage tiers
Storage type | Description |
Standard storage | The default storage type, which is suitable for scenarios where data is frequently accessed and read and write operations are frequently performed on the data. |
IA storage | IA storage and long-term storage are suitable for data that is infrequently accessed. IA storage and long-term storage can significantly reduce storage costs. Note
|
Long-term storage |
Tiered storage pricing
Storage type | Billing formula | Price | Description |
Standard storage | Daily storage fees = Average daily storage volume × Unit price | If the actual storage volume of a project is 1 GB or less than 1 GB, the data storage is free of charge. If the actual storage volume exceeds 1 GB, you are charged for the extra data volume based on the unit price 0.0006 USD/GB/day. | Average daily storage volume = Sum of the collected storage volume/24 |
Infrequent access (IA) storage |
|
|
|
Long-term storage |
|
|
For more information about storage pricing, see Storage pricing.
You can log on to the Expenses and Costs console and choose Bills > Bill Details in the left-side navigation pane. On the Bill Details page, view the fees that are incurred for data storage and access at different storage tiers. The billable items that correspond to the standard storage tier, IA storage tier, and long-term storage tier are Storage, Tiered Storage-IA, and Tiered Storage-Long-term. For more information, see View billing details.
Precautions
PAI and Hologres cannot directly access data at the IA or long-term storage tier.
If the storage tier of a table or partition is set to IA or long-term storage, take note of the amount of data and the data access frequency. If a large amount of data is accessed or data access is frequent, the fees incurred may be higher than the storage fees of the data at the standard storage tier.
If you access all data in a table or partition at the IA storage tier once in a month, the sum of the data access fees and storage fees are the same as the storage fees of the data at the standard storage tier.
If you access all data in a table or partition at the long-term storage tier once in six months, the sum of the data access fees and storage fees are the same as the storage fees of the data at the standard storage tier.
Specify a storage type
Storage type can be mutually converted. The conversion does not negatively affect data access performance.
The following table shows the type conversion of storage:
Conversion process | Description |
Standard storage -> IA storage | Supports both manual and automatic conversion, with no I/O access fees. The fields of the table or the partition, such as 'last data update time' and 'last data access time,' are not updated. |
Standard storage -> Long-term storage | |
IA storage -> Long-term storage | Supports both manual and automatic conversion, manual conversion incurs I/O access fees, whereas automatic conversion does not. The fields of the table or the partition, such as 'last data update time' and 'last data access time,' are not updated. |
IA storage -> Standard storage | Only supports manual conversion, which incurs I/O access fees. The fields of the table or the partition, such as 'last data update time' and 'last data access time,' are updated. |
Long-term storage -> IA storage | |
Long-term storage -> Standard storage |
Manual configuration
For non-partitioned tables or partitions, you can manually specify the IA or long-term storage tier. The setting takes effect immediately after manual configuration.
Syntax
ALTER TABLE <TABLE_NAME> [PARTITION(<PARTITION_SPEC>)]
SET <TBLPROPERTIES|PARTITIONPROPERTIES>("storagetier"="standard|lowfrequency|longterm");
Parameter description
TABLE_NAME: the name of a table. This parameter is required regardless of whether you want to specify a storage tier for a table or a partition.
PARTITION_SPEC: required when you want to specify a storage tier for a partition.
TBLPROPERTIES|PARTITIONPROPERTIES: the properties of a table or partition for which you want to specify a storage tier.
TBLPROPERTIES: the properties of a table.
PARTITIONPROPERTIES: the properties of a partition.
storagetier: required. The storage tier. Valid values:
standard: standard storage. You are charged only storage fees.
lowfrequency: IA storage. You are charged storage fees and the fees incurred for access to data at the IA storage tier.
longterm: long-term storage. You are charged storage fees and the fees incurred for access to data at the long-term storage tier.
For partitioned tables, storage tiers can be specified only at the partition level and cannot be specified at the table level.
Examples
Example 1: Specify IA storage as the storage tier for a non-partitioned table.
ALTER TABLE tablename SET TBLPROPERTIES("storagetier"="lowfrequency");
View the
StorageTier
field in table properties to check the current storage tier.-- View table properties. DESC extended tablename; -- The following result is returned: +-------------------------------------------------------------------+ | 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 | +-------------------------------------------------------------------+
Example 2: Specify IA storage as the storage tier for a partition in a partitioned table named bank_data_pt.
ALTER TABLE bank_data_pt PARTITION (credit='yes') SET PARTITIONPROPERTIES ("storagetier" = 'lowfrequency');
View the
StorageTier
field in partition properties to check the current storage tier.-- View partition properties. DESC extended bank_data_pt PARTITION(credit='yes'); -- The following result is returned: +------------------------------------------------------------------------------------+ | 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 | +------------------------------------------------------------------------------------+
Automatic configuration based on lifecycle rules
For projects or partitioned tables, you can define rules for the lifecycles of storage tiers. The system can trigger automatic conversion among storage tiers based on the lifecycle rules.
After you define storage tier lifecycle rules for a project, if all the non-partitioned tables or partitions in the project meet the rules, the system automatically performs storage tier conversion for the non-partitioned tables or partitions.
After you define storage tier lifecycle rules for a partitioned table, if all the partitions in the table meet the rules, the system automatically performs storage tier conversion for the partitions.
Usage notes
You cannot separately configure storage tier lifecycle rules for each partition or non-partitioned table.
The storage tier lifecycle rules for a partitioned table have a higher priority than the storage tier lifecycle rules for a project to which the partitioned table belongs.
If the lifecycle of a table or partition meets the rules for both the long-term and IA storage tiers, the storage tier of the table or partition is preferentially converted into long-term storage.
If the lifecycle of a table or partition meets the rule for IA storage, the storage tier of the table or partition is converted into IA storage. After that, if the lifecycle of the table or partition meets the rule for long-term storage, the storage tier of the table or partition is converted into long-term storage. For the conversion from IA storage to long-term storage, fees are incurred for access to data at the IA storage tier. For pricing details, see Tiered storage pricing in this topic.
The platform regularly scans the rules twice a day. Therefore, the conversion may not be immediately performed after the rules are met.
Syntax
Configure lifecycle rules at the project level
setproject odps.table.lifecycle.config=<lifecycle_config_json_string>;
You can also configure through the MaxCompute console:
Log on to the MaxCompute console. In the top navigation bar, select a region.
In the left-side navigation pane, choose Workspace > Projects, find the project you want to manage and click Manage in the Actions column.
In the Lifecycle Configuration section of the Parameter Configuration tab, configure the parameters for the Last Access Configuration Policy and the Last Modified Configuration Policy.
Last access configuration policy: corresponds to the
DaysAfterLastAccessGreaterThan
parameter.Last modified configuration policy: corresponds to the
DaysAfterLastModificationGreaterThan
parameter.
Configure lifecycle rules at the partitioned table level
Configure rules during table creation
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>') ;
Configure rules by modifying table settings
ALTER TABLE <TABLE_NAME> SET TBLPROPERTIES ('lifecycle_config' = '<lifecycle_config_json_string>');
Parameter description
This section describes the main parameters. For more information about other parameters, see "Parameters" in Table operations.
lifecycle_config_json_string:
The following code shows the definition of a lifecycle rule at the project level.
{ "TierToLowFrequency": { "DaysAfterLastModificationGreaterThan": <days>, // xx days after the last modification time "DaysAfterLastAccessGreaterThan": <days>, // xx days after the last access time }, "TierToLongterm": { "DaysAfterLastModificationGreaterThan": <days>, "DaysAfterLastAccessGreaterThan": <days> } // Each condition is optional, and multiple conditions have the OR relationship. }
The following code shows the definition of a lifecycle rule at the partitioned table level.
{ \"TierToLowFrequency\": { \"DaysAfterLastModificationGreaterThan\": <days>, // xx days after the last modification time \"DaysAfterLastAccessGreaterThan\": <days>, // xx days after the last access time }, \"TierToLongterm\": { \"DaysAfterLastModificationGreaterThan\": <days>, \"DaysAfterLastAccessGreaterThan\": <days> } // Each condition is optional, and multiple conditions have the OR relationship. }
TierToLowFrequency: the IA storage tier.
TierToLongterm: the long-term storage tier.
DaysAfterLastModificationGreaterThan: Automatic conversion is triggered N days after the last modification time. N is specified by this parameter. This parameter corresponds to LastModifiedTime of the table or partition.
DaysAfterLastAccessGreaterThan: Automatic conversion is triggered N days after the last access time. N is specified by this parameter. If LastAccessTime is left empty for the table or partition, the following principles are applied:
For tables or partitions that you created before October 1, 2023,
2023.10.01 00:00:00
in UTC+0 is considered as the last access time.For tables or partitions that you created on or after October 1, 2023, if no data is accessed, the table or partition creation time is considered as the last access time.
Examples
Example 1: Configure storage tier lifecycle rules at the project level.
setproject odps.table.lifecycle.config={"TierToLongterm":{"DaysAfterLastModificationGreaterThan":180},"TierToLowFrequency":{"DaysAfterLastModificationGreaterThan":120}};
Example 2: Remove the configurations of storage tier lifecycle rules at the project level.
setproject odps.table.lifecycle.config=;
Example 3: Configure storage tier lifecycle rules at the partitioned table level.
-- Configure rules during partitioned table creation. CREATE TABLE lifecycle_part_t (key string) partitioned BY (ds STRING) tblproperties ('lifecycle_config' = '{\"TierToLowFrequency\": {\"DaysAfterLastModificationGreaterThan\": 2,\"DaysAfterLastAccessGreaterThan\": 2},\"TierToLongterm\": {\"DaysAfterLastModificationGreaterThan\": 4,\"DaysAfterLastTierModificationGreaterThan\": 7}}') ; -- Configure rules by modifying table settings. ALTER TABLE lifecycle_part_t SET tblproperties ('lifecycle_config'='{\"TierToLowFrequency\": {\"DaysAfterLastModificationGreaterThan\": 90,\"DaysAfterLastAccessGreaterThan\": 30},\"TierToLongterm\": {\"DaysAfterLastModificationGreaterThan\": 180,\"DaysAfterLastTierModificationGreaterThan\": 7}}');