すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:クラスタリング最適化の推奨

最終更新日:Jan 06, 2026

大規模なデータ処理では、JOIN や GROUP BY のような操作は、しばしば大規模なデータシャッフルを引き起こし、高い CU 消費とジョブパフォーマンスの低下につながります。この問題に対処するため、クラスタリングを使用してデータの物理レイアウトを最適化することで、シャッフルの必要性をなくすことができます。しかし、適切なテーブルとクラスタリングキーを特定するのは複雑な場合があります。クラスタリング最適化の推奨は、テーブルの過去の読み取りおよび書き込みパターンを分析して、ハッシュクラスタリングを実装するための正確で実行可能な提案を提供することで、このプロセスを自動化します。これらの推奨を適用すると、シャッフル量が大幅に削減され、ジョブの実行が高速化され、CU コストが削減されます。

適用範囲

  • サポート対象リージョン:中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (深セン)、および中国 (成都)。

  • クラスタリング最適化の推奨は、3層モデルプロジェクトではサポートされていません。

  • 統計はほとんどのジョブの実行履歴をカバーしますが、複数の基盤となる実行タスクを持つ複雑なジョブは除外される場合があります。そのため、推奨がすべてのジョブをカバーするとは限りません。

  • ハッシュクラスタリングの詳細については、「ハッシュクラスタリング」をご参照ください。

クラスタリング最適化の推奨の表示

現在のリージョン内のいずれかまたはすべてのプロジェクトについて、推奨されるテーブル、クラスタリングによる推定効果、および詳細な提案を表示できます。この情報は、クラスタリングの推奨を採用するかどうかを判断するのに役立ちます。

  1. MaxCompute コンソールにログインし、左上のコーナーでリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、Intelligent Optimization > データスケジューリングの最適化 を選択します。

  3. クラスタリングの最適化 タブで、推定収益 をクリックし、フィルターを使用してクラスタリングの推奨があるテーブルを確認します。

    パラメーター

    説明

    プロジェクト名

    MaxCompute プロジェクトを選択します。未選択の場合は、デフォルトで [すべてのプロジェクト] になります。

    テーブル名

    テーブル名を入力します。あいまい検索がサポートされています。複数のテーブル名はカンマ (,) で区切ります。

    推奨される生成日

    推奨が生成された日付です。デフォルトは前日です。

    • 推定効果メトリック

      メトリック

      説明

      利益を得るための操作の推定数/日

      テーブルをクラスタリングすることで恩恵を受けると推定される1日あたりのジョブ数です。

      シャッフル消費量/日の推定節約

      テーブルをクラスターテーブルに変換した場合の1日あたりの推定シャッフル削減量です。
      シャッフル量を削減すると、ジョブの CU 時間消費が直接減少します。経験則として、1 TB のシャッフル削減ごとに、毎日 2〜4 CU 時間が節約されます。

    • 最適化推奨リスト

      リスト内のパラメーターの推奨値を確認し、テーブルに関する詳細な最適化の提案をチェックします。

      列

      説明

      プロジェクト

      推奨テーブルが含まれるプロジェクトです。

      テーブル名

      クラスタリングが推奨されるテーブルの名前です。

      推奨されるクラスタータイプ

      テーブルに推奨されるクラスタリングタイプです。現在、ハッシュクラスタリングの推奨のみがサポートされています。

      推奨されるクラスターキー

      テーブルに推奨される ClusterKey です。これは主にシャッフル除去とポイントルックアップのデータフィルタリングに関連しています。

      提案されたソートキー

      テーブルに推奨される SortKey です。これは主にデータフィルタリングとストレージ圧縮率に関連しています。

      推奨バケット数

      テーブルに推奨されるバケット数です。これは主にテーブル書き込み操作の並列性と、シャッフル除去後のテーブル読み取りジョブに関連しています。

      推奨インデックス

      推奨を適用した場合の潜在的な影響を示す1つ星から5つ星までの評価です。スコアが高いほど、推奨度が高くなります。スコアは次のように計算されます:

      評価ディメンション

      控除ルール

      重み係数

      最適化可能なパターンの適時性

      観測ウィンドウが 14 日未満です。

      1つ星減点

      読み取り時のシャッフルデータ節約量

      節約量が 1 TB 未満です。

      1つ星減点

      書き込みジョブの頻度

      その日の書き込みジョブのレコードが見つかりませんでした。

      1つ星減点

      最適化可能なパーティションの数

      • 最適化可能なパーティションの数が 3 を超える場合、1つ星減点します。

      • 最適化可能なパーティションの数が 31 を超える場合、2つ星減点します。

      動的調整

      説明
      • その日に書き込みジョブが記録されていない場合、書き込みコストの潜在的な増加を推定できないため、スコアが減少します。

      • 最適化可能なパーティションが多数ある場合、クラスタリング最適化は、新しいデータで多数の既存パーティションを再書き込みするか、アクティブな再書き込みによってのみ有効になるため、減点されます。

      毎日のシャッフル割引の見積もり

      テーブルをクラスターテーブルに変換した後の1日あたりの推定シャッフル削減量です。

      観察間隔

      この推奨が生成された連続日数です。

      操作

      提案をクリックすると、最適化推奨テーブルの詳細 ページに移動します。このページには以下が含まれます:

      • 最適化の推奨事項

      • テーブルの現在の状態

      • 推定収益の概要

        • 推定シャッフル節約/日

        • 有益なテーブル読書の仕事

        • フルテーブル書き込みジョブ

        • 全テーブル読み取りジョブ

クラスタリング最適化の推奨の適用

元のテーブルへの推奨の直接適用

  • UI の使用

    パーティションテーブルの場合、ワンクリックで推奨を適用して、元のテーブルをクラスターテーブルに変換できます。

    1. 左側のナビゲーションウィンドウで、Intelligent Optimization > データスケジューリングの最適化 を選択します。

    2. クラスタリングの最適化 タブで、推定収益 をクリックします。

    3. 対象テーブルの 操作 列の [詳細の表示] をクリックして、最適化推奨テーブルの詳細 ページを開きます。

    4. 右上隅の アプリケーションの推奨事項 をクリックして変換を完了します。

  • SQL コマンドの使用

    次のコマンドを実行します:

    -- テーブルをハッシュクラスタリングテーブルに変更します。
    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];
  • 変換後、クラスターテーブルを検査し、関連する読み取りジョブを実行して、期待どおりに動作することを確認します。問題が発生した場合は、すぐに次のコマンドを実行してロールバックを実行します。

    -- ハッシュクラスタリングテーブルを非クラスターテーブルに戻します。
    ALTER TABLE <table_name> NOT CLUSTERED;
重要
  • テーブルをクラスターテーブルに変換すると、INSERT INTO や Tunnel アップロードなどの増分書き込み操作は実行できなくなります。

  • 非パーティションテーブルにクラスタリングの推奨を直接適用することはできません。

  • クラスタリングは書き込み操作のレイテンシーと CU コストを増加させますが、読み取り操作ではそれらを削減するため、全体的な CU 消費量が正味で削減されます。

  • 特定のシナリオでは、パーティションを再書き込みし、ダウンストリームの最適化可能なジョブの効果を確認します。詳細については、「(推奨) パーティションデータの再書き込み」をご参照ください。

(推奨) パーティションデータの再書き込み

クラスタリングプロパティの変更は、新しいデータにのみ影響します。既存のデータに最適化を適用するには、関連するパーティションを再書き込みする必要があります。ダウンストリームジョブの効果を確認するために、次のシナリオではパーティションの再書き込みが必要です:

  • テーブルが優先度が高く、遅延の影響を受けやすいジョブの依存関係である場合。

  • テーブルに大きなパーティションがあり、単一の書き込み操作が 10 TB を超える場合。

  • ダウンストリームジョブが複数のパーティションから読み取る場合。完全な最適化効果を得るには、ジョブによって読み取られるすべての関連パーティションを再書き込みする必要があります。

  1. テーブルが日次の全量・増分マージ書き込みジョブの対象である大規模テーブルの場合、最終日のパーティションを再書き込みします。これにより、翌日に全量・増分ジョブが初めて実行される際のコスト増加と実行時間遅延のリスクが軽減されます。

    -- パーティションキー列が ds であり、20241015 や 20241016 などの新しいパーティションが毎日追加されると仮定します。新しいパーティションデータは、前日のパーティションからの増分データをマージして導出されます。
    INSERT OVERWRITE TABLE <table_name> PARTITION(ds) 
    SELECT * FROM <table_name> WHERE ds = max_pt('<table_name>');
  2. 最適化可能なジョブが複数の既存パーティションから読み取る場合、読み取り範囲内の既存パーティションを再書き込みして、クラスタリング最適化をより早く適用します。

    -- パーティションキー列が ds であり、20241015、20241016 などの新しいパーティションが毎日追加されると仮定します。読み取り範囲は 20241015 から始まります。
    INSERT OVERWRITE TABLE <table_name> PARTITION(ds) 
    SELECT * FROM <table_name> WHERE ds >='20241015';
  3. 再書き込み後、最適化可能なジョブの試行を実行して、最適化が効果的であることを確認します。

新しいテーブルへの推奨の適用

非パーティションテーブルの場合、元のテーブルのクラスタリング属性を直接変更することはできません。したがって、新しいクラスターテーブルを作成して手動で変更を適用する必要があります。

  1. クラスターテーブルを作成します。

    -- 既存のテーブルの CREATE TABLE 文を確認します。
    SHOW CREATE TABLE <orignal_table>;
    -- CLUSTER 情報を CREATE TABLE 構文の適切な位置に挿入して、新しいクラスターテーブルを作成します。
    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. 左側のナビゲーションウィンドウで、Intelligent Optimization > データスケジューリングの最適化 を選択します。

  3. クラスタリングの最適化 タブで、実際の収入 をクリックします。

  4. プロジェクト名 と 分析時間 でフィルタリングして、クラスタリング属性が変更されたテーブルからの効果の概要と詳細な内訳を表示します。

    • 効果指標の説明

      メトリック

      説明

      有益な仕事の数

      効果分析期間中に、最近変更されたクラスターテーブルが読み取られた回数です。

      CUを保存するとき

      変更されたクラスターテーブルを読み取るジョブの CU 時間の削減量で、変更前の消費量と比較されます。

      シャッフルの消費量を節約する

      変更されたクラスターテーブルを読み取るジョブのシャッフル量の削減量で、変更前の消費量と比較されます。

      効果統計は、推奨された変更が適用される前後の同じシグネチャを持つジョブの平均消費量を比較して計算されます。統計は、過去 365 日以内に推奨に基づいて変更されたクラスターテーブルを対象としています。

    • 最適化済みリスト

      列

      説明

      プロジェクト

      属性が変更されたクラスターテーブルを含むプロジェクトです。

      テーブル名

      クラスタリング属性が変更されたテーブルの名前です。

      クラスター属性の変更時間

      テーブルのクラスタリング属性が最後に変更された日付です。

      有益な仕事の数

      クラスタリング属性が変更された後、効果分析期間中にテーブルが読み取られた回数です。

      計算時間を節約

      分析期間中にこのテーブルを読み取ったジョブの計算時間の削減量で、属性が変更される前と比較されます。

      CUを保存するとき

      分析期間中にこのテーブルを読み取ったジョブの CU 時間消費の削減量で、属性が変更される前と比較されます。

      シャッフルの量を保存

      分析期間中にこのテーブルを読み取ったジョブのシャッフル量の削減量で、属性が変更される前と比較されます。

      操作

      提案をクリックすると、最適化されたテーブルの詳細 ページに移動します。このページには以下の情報が含まれます:

      • [テーブルの現在のステータス]

        • クラスタータイプ

        • クラスターキー

        • ソートキー

        • バケット数

        • パーティション値

      • メリットの概要

        • 有益な仕事の数

        • CUを保存するとき

        • シャッフルの消費量を節約する

      • 受益読み取りジョブのリスト

        • 署名

        • 計算時間を節約

        • CUを保存するとき

        • シャッフルの消費量を節約する

    重要
    • 日次ジョブの効果統計は T+1 ベースで更新されます。リアルタイムの最適化効果は、[ジョブモニタリング] または Logview で確認できます。

    • 効果統計は過去のジョブシグネチャに基づいており、日々のパフォーマンス変動の影響を受ける可能性があります。効果が期待どおりでない場合は、異なる日付のジョブ実行詳細を比較して影響要因を特定してください。

    • これらの統計は参考用です。最終的な CU 節約額は月次請求書に反映されます。