本文介绍如何优化存储成本。

对于存储而言,有三个主要的关键点:
  • 合理地进行数据分区。
  • 设置合理的表生命周期。
  • 定期地删除废表。

合理设置数据分区

MaxCompute将分区列的每个值作为一个分区(目录)。用户可以指定多级分区,即将表的多个字段作为表的分区,分区之间正如多级目录的关系。在使用数据时如果指定了需要访问的分区名称,则只会读取相应的分区,避免全表扫描,提高处理效率,降低费用。
  • 假如最小统计周期为天,建议采用日期作为分区字段。每天将数据覆盖迁移到指定分区,再读取指定分区的数据进行下游统计。
  • 假如最小统计周期为小时,建议采用日期+小时作为分区字段。每小时将数据覆盖迁移到指定分区,再读取指定分区的数据进行下游统计。若小时调度的统计任务也按天分区,数据每小时追加,则每小时将多读取大量的无用数据,增加流入数据量,增加了不必要的费用。

您可以根据实际的业务情况选择分区字段,除了日期和时间,也可以使用其他的枚举值个数相对固定的字段,例如渠道、国家省份地市。或者使用时间和其他字段共同作为分区字段。一般而言,推荐使用二级分区,因为最大的单表最多只支持6万个分区。

设置合理的表生命周期

MaxCompute中存储资源是非常宝贵的。可以根据数据本身的使用情况,在创建表时对表设置生命周期,MaxCompute会及时删除超过生命周期的数据,达到节省存储空间的目的。

例如,创建一张生命周期为100天的表。如果这张表或者分区的最后修改时间超过了100天将会被删掉。
CREATE TABLE test3 (key boolean) PARTITIONED BY (pt string, ds string) LIFECYCLE 100;

生命周期是以分区为最小单位的,所以一个分区表,如果部分分区达到了生命周期的阀值,那么这些分区会被直接删掉,未达到生命周期阀值的分区不受影响。

已经创建的表可以通过如下命令修改生命周期。更多信息请参见生命周期操作
ALTER TABLE table_name SET lifecycle days;

删除废表

定期地删除访问跨度大(即长期不会访问)的废表,做好资产的管理和表的管理。需要定期进行清理,因为这些表的意义并不大,会极大的浪费存储资源,例如:
  • 3个月内没有被访问的表。
  • 一张表是非分区表,同时最近1个月内没有被访问。
  • 存储为0KB的表,即没有存储的表。