聚簇优化推荐

MaxCompute支持分析表近期的读写特征,并生成相应的聚簇建议,从而提升作业性能并降低CU消耗。可根据聚簇后的预估收益和推荐详情决定是否应用系统推荐的聚簇建议。

适用范围

  • 支持地域:华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)和西南1(成都)。

  • 聚簇优化推荐不支持三层模型项目。

  • 聚簇优化统计旨在尽可能覆盖所有作业的运行历史记录,但不包括多个Fuxi Job作业,因此会存在极少数作业未被纳入的情况。

  • 聚簇表优化作业,请参见Hash Clustering

查看聚簇优化建议

可以查看当前地域所有项目或指定项目下的推荐表,在进行聚簇后的预估收益及推荐详情,以辅助决策是否采纳聚簇推荐建议。操作步骤如下:

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

  2. 在左侧导航栏,选择智能优化 > 数据排布优化

  3. 聚簇优化页签,选择预估收益,筛选参数查看是否有推荐聚簇的表。

    参数

    说明

    项目名称

    在下拉列表中选择MaxCompute项目名称。不选时默认所有项目

    表名称

    输入表名称,支持模糊搜索。多个表名以半角逗号,分隔。

    建议生成日期

    建议生成的日期,默认选择前一天。

    • 预估收益指标

      指标

      说明

      预估可受益作业数/天

      将推荐表转换为聚簇表后,预估每天可以受益的作业数量。

      预估可节省Shuffle量消耗/天

      将推荐表转换为聚簇表后,预估每天能够节省的Shuffle量。

      Shuffle量的节省可以有效减少作业消耗的CU时。通常情况下,Shuffle量每节省1TB,可每日节省2~4CU消耗。

    • 优化建议列表

      参考列表中相关参数的建议值,并查看建议以获取更多关于表的优化建议信息。

      列名称

      说明

      项目

      推荐修改聚簇属性的表所在的项目。

      表名称

      推荐修改聚簇属性的表名称。

      建议聚簇类型

      推荐该表使用的聚簇类型。目前仅支持Hash Clustering推荐。

      建议Cluster Key

      推荐该表使用的ClusterKey,主要与Shuffle Removal和点查数据过滤有关。

      建议Sort Key

      推荐该表使用的SortKey。主要与数据过滤和存储压缩率有关。

      建议Bucket数量

      推荐该表设置的Bucket数量。主要与写表以及Shuffle Removal后读表作业并行程度有关。

      推荐指数

      1星到5星,星数越多表示越推荐该表修改聚簇属性。星级的计算方式如下:

      评估维度

      减分规则

      权重系数

      可优化模式时效

      观察窗口小于14

      1

      读端Shuffle节省量

      节省量小于1TB

      1

      写入作业活跃度

      当日未统计到写入作业记录

      1

      可优化分区数规模

      • 可优化分区数大于3,减1

      • 可优化分区数大于31,减2

      动态调整

      说明
      • 当日未统计到写入作业记录,则无法估计每日写入增加代价导致减分。

      • 当可优化分区数较多时,Cluster优化需要随新增数据重写或主动重写较多已有分区后生效。此情形会导致减分。

      预估每天可节省Shuffle

      将该表转换为聚簇表后,预估能够每天节省的Shuffle量。

      观察区间

      一段时间内出现相同优化建议的天数。

      操作

      单击建议,进入优化建议表详情页面,包含相关内容如下:

      • 优化建议

      • 表现状

      • 预估收益概览

        • 预估节省Shuffle量/天

        • 可受益读表作业

        • 全量写表作业

        • 全量读表作业

应用聚簇优化建议

将聚簇建议直接应用于原始表

  • 界面操作

    对于分区表,可以直接应用建议,将原表根据聚簇建议一键转换为推荐的聚簇表。操作步骤如下:

    1. 在左侧导航栏,选择智能优化 > 数据排布优化

    2. 聚簇优化页签,选择预估收益

    3. 单击目标表对应操作列的查看详情,进入优化建议表详情页面。

    4. 单击右上方的应用建议完成转换。

  • 通过SQL命令进行操作,命令如下:

    --更改表为Hash Clustering表
    ALTER TABLE <table_name> [CLUSTERED BY (<col_name> [, <col_name>, ...])
                           [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])]
                           INTO <number_of_buckets> BUCKETS];
  • 完成转换后,建议查看优化后的聚簇表,并运行读表作业,以确保所有作业都按预期运行。如出现任何问题,请及时执行回滚操作,命令如下。

    --更改Hash Clustering表为非Hash Clustering表
    ALTER TABLE <table_name> NOT CLUSTERED;
重要
  • 转换为聚簇表后无法进行增量写入操作(如INSERT INTO、Tunnel上传)。

  • 非分区表不能将聚簇建议直接应用于原始表。

  • 聚簇属性被修改后写表作业延迟与CU消耗会增加。读表作业CU会减少,从而实现总体CU消耗的节省。

  • 对于部分场景,建议参考重写分区并验证下游可优化作业收益,详情请参见(推荐)重写分区数据

(推荐)重写分区数据

表的聚簇属性修改后,只会对新分区的数据生效。只有重写已有分区数据后,优化才会对已有分区生效,针对以下场景,需要重写分区并验证下游可优化作业收益:

  • 高优先级且延迟敏感作业依赖的表。

  • 分区数据较大,单次写入超过10TB的表。

  • 下游作业读入较多分区,需同时重写为Cluster分区才能应用优化的表。

  1. 当该表是每日全增量合并写入的作业中的大表时,建议重写最后一天的分区,以降低次日首次运行全增量作业时成本增加和运行速度变慢的风险。

    -- 假设分区列为 ds, 每日新增分区为 20241015, 20241016, 新增分区数据从昨日分区合并增量数据得出。
    INSERT OVERWRITE TABLE <table_name> PARTITION(ds) 
    SELECT * FROM <table_name> WHERE ds = max_pt('<table_name>');
  2. 当可优化作业中读取多个已有分区时,建议重写读取范围已有分区,以更早地应用Cluster优化。

    -- 假设分区列为 ds, 每日新增分区为 20241015, 20241016, ..., 读取范围从 20241015 开始
    INSERT OVERWRITE TABLE <table_name> PARTITION(ds) 
    SELECT * FROM <table_name> WHERE ds >='20241015';
  3. 重写后,建议试运行可优化作业以验证优化是否生效。

将聚簇建议应用于新建表

对于非分区表,无法直接修改原表的聚簇属性,因此需要通过新建Cluster表的方式手动进行应用。具体操作步骤如下:

  1. 新建Cluster表。

    -- 确认已有表的创建语句
    SHOW CREATE TABLE <orignal_table>;
    -- 根据 CREATE TABLE 语法插入 CLUSTER 信息合适的位置, 新建Cluster表
    CREATE TABLE <new_table> [CLUSTERED BY (<col_name> [, <col_name>, ...])
                              [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])]
                              INTO <number_of_buckets> BUCKETS];
  2. 将数据注入新表。

    INSERT OVERWRITE TABLE <new_table>
    SELECT * FROM <orignal_table>;
  3. 将原始表重命名为备份表。

    ALTER TABLE <orignal_table> RENAME TO <orignal_table_backup>;
  4. 将新表重命名为原始表。

    ALTER TABLE <new_table> RENAME TO <orignal_table>;

新建表的名称与原始表相同,之后会根据新的聚簇属性聚类。

聚簇建议应用回滚

建议查看新建聚簇表,以确保所有作业都按预期运行。如果出现任何问题,请及时进行回滚,命令如下。

  1. 删除新建表(名称与原始表相同)。

    DROP TABLE IF EXISTS <orignal_table>;
  2. 将备份表重命名为原始表。

    ALTER TABLE <orignal_table_backup> RENAME TO <orignal_table>;

查看聚簇优化收益

可以在聚簇优化页签下选择实际收益查看聚簇优化收益,操作步骤如下:

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

  2. 在左侧导航栏,选择智能优化 > 数据排布优化

  3. 聚簇优化页签,选择实际收益

  4. 通过筛选项目名称分析时间,可以查看修改过聚簇属性的聚簇表带来的收益汇总和收益详情。

    • 收益指标说明

      指标

      说明

      受益作业数

      最近修改的聚簇表在收益统计区间内的被读取次数。

      节省CU

      所有读取最近修改的聚簇表的作业在收益统计区间内的CU时消耗相较于表修改为聚簇表之前CU时消耗的节省值。

      节省Shuffle量消耗

      所有读取最近修改的聚簇表的作业在收益统计区间内的Shuffle量消耗相较于表修改为聚簇表之前Shuffle量的节省值。

      聚簇优化收益基于Signature相同作业修改前平均消耗和之后每日运行平均消耗计算,统计范围为365天内按推荐修改的Cluster表。

    • 已优化列表

      列名称

      说明

      项目

      修改过聚簇属性的聚簇表所在的项目。

      表名称

      修改过聚簇属性的表名称。

      聚簇属性修改时间

      表的聚簇属性最近一次修改的日期。

      受益作业数

      该表修改聚簇属性后在收益统计区间内的被读取次数。

      节省计算时长

      该表修改聚簇属性后,读取该表的作业在收益统计区间内的计算时长相较于之前的节省值。

      节省CU

      该表修改聚簇属性后,读取该表的作业在收益统计区间内的CU时消耗相较于之前的节省值。

      节省Shuffle

      该表修改聚簇属性后,读取该表的作业在收益统计区间内的Shuffle量消耗相较于之前的节省值。

      操作

      单击建议,进入已优化表详情页面,包含相关内容如下:

      • 表现状

        • 聚簇类型

        • ClusterKey

        • SortKey

        • Bucket数量

        • 分区值

      • 收益概览

        • 受益作业数

        • 节省CU

        • 节省Shuffle量消耗

      • 受益读表作业列表

        • Signature

        • 节省计算时长

        • 节省CU

        • 节省Shuffle量消耗

    重要
    • 当修改表为聚簇表后,每日作业收益统计T+1更新,实时优化效果可以通过作业运维或LogView查看。

    • 聚簇优化收益统计基于相同Signature历史运行记录数据,容易受作业每日性能波动等各类因素影响。当发现收益不符合预期时,请比对前后不同日期的作业执行详情确认影响因素。

    • 聚簇优化收益统计仅供参考,最终CU节省量请以账单为准。