聚簇优化推荐

更新时间:2025-03-17 09:46:38

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

关于聚簇表如何优化作业,请参见Hash Clustering

使用限制

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

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

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

查看聚簇优化建议

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

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

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

  3. 聚簇优化页签,选择预估收益,查看是否有推荐聚簇的表。您也可以填写如下筛选参数来过滤。

    参数

    说明

    参数

    说明

    项目名称

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

    表名称

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

    建议生成日期

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

    • 预估收益指标。

      指标

      说明

      指标

      说明

      预估可受益作业数/天

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

      预估可节省Shuffle量消耗/天

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

      说明

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

    • 优化建议列表。

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

      列名称

      说明

      列名称

      说明

      项目

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

      表名称

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

      建议聚簇类型

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

      建议ClusterKey

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

      建议SortKey

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

      建议Bucket数量

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

      推荐指数

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

      image

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

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

      预估每天可节省Shuffle

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

      观察区间

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

      操作

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

      • 优化建议

      • 表现状

      • 预估收益概览

        • 预估节省Shuffle量/天

        • 可受益读表作业

        • 全量写表作业

        • 全量读表作业

应用聚簇优化建议

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

  • 界面操作

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

    1. 数据排布优化界面,选择预估收益,单击目标表操作列的查看详情。进入优化建议表详情页面。

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

  • 通过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分区才能应用优化的表。

表的聚簇属性修改后,只会对新分区的数据生效。只有重写已有分区数据后,优化才会对已有分区生效,因此建议您按照如下方法进行分区数据重写:

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

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

    -- 假设分区列为 ds, 每日新增分区为 20241015, 20241016, ..., 读取范围从 20241015 开始
    INSERT OVERWRITE TABLE <table_name> PARTITION(ds) 
    SELECT * FROM <table_name> WHERE ds >='20241015';

重写后,建议试运行可优化作业以验证优化是否生效。

将聚簇建议应用于新建表

对于非分区表,无法直接修改原表的聚簇属性,因此需要通过新建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. 聚簇优化页签,选择实际收益,选择收益统计区间,可以查看修改过聚簇属性的聚簇表带来的收益汇总和收益详情。

    • 收益指标说明。

      指标

      说明

      指标

      说明

      受益作业数

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

      节省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节省量请以账单为准。

  • 本页导读 (1)
  • 使用限制
  • 查看聚簇优化建议
  • 应用聚簇优化建议
  • 将聚簇建议直接应用于原始表
  • 将聚簇建议应用于新建表
  • 查看聚簇优化收益

点击开启售前

在线咨询服务