存储资源-分层存储

MaxCompute分层存储支持标准存储、低频存储和长期存储,默认情况下为标准存储。您可以根据数据的访问频率,将某些表或分区的存储类型设置为低频存储或长期存储,实现数据的冷热分层,以降低数据存储费用。

申请开通使用

  • 目前中国内地公共云区域新增的项目默认可使用分层存储功能,包括华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华北6(乌兰察布)、华南1(深圳)、西南1(成都)、中国香港、日本(东京)、印度尼西亚(雅加达)、马来西亚(吉隆坡)和德国(法兰克福)地域。

  • 存量项目及其他地域(如新加坡),若需要使用此功能,需单击申请开通,在新功能试用申请页面申请开通使用分层存储功能。关于新功能申请介绍详情,请参见新功能试用申请

分层存储类型介绍

存储类型

描述

标准存储

默认存储类型,适用于经常访问数据并对数据进行频繁读写操作的场景。

低频存储

适用于不需要频繁访问的数据,能够有效降低存储费用。

说明
  • 不支持PAI和Hologres直接访问。

  • 如果访问数据量大或访问频次过多,可能会导致费用高于标准存储费用,例如:

    • 一个月全量访问一次低频存储的表或分区产生的费用,将等于标准存储的费用。

    • 六个月全量访问一次长期存储的表或分区产生的费用,将等于标准存储的费用。

长期存储

分层存储计费

存储类型

计费公式

价格

说明

标准存储

日存储费用=日存储量平均值×单价

  • 一般情况下,计费单价如下:

    • 公共云:0.004元/GB/天。

    • 金融云:0.0076元/GB/天。

  • 当项目的实际数据存储量大于0 MB小于等于512 MB时,计费单价如下:

    • 公共云:0.01元/天。

    • 金融云:0.019元/天。

日存储量平均值=采集到的存储量之和÷24

低频存储

  • 日存储费用=日存储量平均值×单价

  • 数据访问费=数据访问量×单价

  • 低频存储计费单价如下:

    • 公共云:0.00266元/GB/天。

    • 金融云:0.00505元/GB/天。

  • 低频存储数据访问费单价如下:

    • 公共云:0.04元/GB。

    • 金融云:0.076元/GB。

  • 日存储量平均值=采集到的存储量之和÷24

  • 当低频存储的表或者分区转成标准存储或者长期存储时,操作会收取当前整张表或者分区的低频存储访问费,但通过分层存储生命周期自动将低频存储转成长期存储时,不收访问费。

  • 当长期存储的表或者分区转成标准存储或者低频存储时,会收取当前整张表或者分区的长期存储访问费。

长期存储

  • 日存储费用=日存储量平均值×单价

  • 数据访问费=数据访问量×单价

  • 长期存储计费单价如下:

    • 公共云:0.0011元/GB/天。

    • 金融云:0.0021元/GB/天。

  • 长期存储数据访问费单价如下:

    • 公共云:0.522元/GB。

    • 金融云:0.9918元/GB。

  • 关于存储计费的详情介绍,请参见存储费用

  • 您可以登录费用与成本,在账单 > 账单详情页面,查看不同存储类型的费用,其中标准存储、低频存储和长期存储对应的计费项名称分别是存储、分层存储-低频和长期存储。具体操作,请参见查看账单详情

注意事项

  • 当前低频存储和长期存储类型的数据不支持PAI和Hologres直接访问。

  • 当表或分区设置为低频存储或长期存储时,请注意访问数据量和频次,如果访问数据量大或访问频次过多,可能会导致费用高于标准存储费用。

    • 一个月全量访问一次低频存储的表或分区产生的费用,将等于标准存储的费用。

    • 六个月全量访问一次长期存储的表或分区产生的费用,将等于标准存储的费用。

设置存储类型

存储类型之间可以相互转换,且修改存储类型不会影响数据访问。image

存储类型转换说明如下:

转换过程

说明

标准存储->低频存储

支持手动和自动方式转换,无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控制台进行设置,具体如下:

    1. 登录MaxCompute控制台,在左上角选择地域。

    2. 在左侧导航栏选择工作区>项目管理,单击目标项目操作列的管理

    3. 参数配置页签的生命周期配置区域,配置最近访问配置策略最近修改配置策略参数。image

      • 最近访问配置策略:对应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}}');