全部產品
Search
文件中心

MaxCompute:聚簇最佳化推薦

更新時間:Jan 06, 2026

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節省量請以賬單為準。