本文从数据分区、表生命周期和定期删除表3个方面为您介绍如何优化存储成本。

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

合理设置数据分区

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

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

设置合理的表生命周期

您可以根据数据本身的使用情况,在创建表时对表设置生命周期,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的表,即没有存储的表。