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

MaxCompute:データ膨張への対処

最終更新日:Jun 23, 2026

このトピックでは、データ膨張の原因と、データ膨張の問題に対処するために実行できる対策について説明します。

問題の説明

Logview では、Fuxi タスクの出力データ量が入力データ量よりも著しく大きくなることがあります。Fuxi タスクの [I/O Record] 属性と [I/O Bytes] 属性を使用して、入出力データ量を確認できます。

例えば、1 GB の入力データが、処理後に 1 TB まで膨張することがあります。単一のインスタンスで 1 TB のデータを処理すると、パフォーマンスが大幅に低下します。

原因と対策

次の表に、この問題の考えられる原因と関連する対策を示します。

原因説明対策
コードのバグコードに欠陥があります。例:
  • コード内の JOIN 条件が不正確で、デカルト積として記述されている。
  • ユーザー定義テーブル値関数 (UDTF) が無効になっている。その結果、出力データ量が入力データ量を大幅に上回る。
コードのバグを修正してください。
不適切な集約操作
通常、これらの操作は少量の中間データしか生成せず、計算量も少ないため、大規模なデータセットでも迅速に完了します。そのため、標準的な集約操作が問題を引き起こすことはほとんどありません。しかし、collect_listmedian のような特定の集約操作では、すべての中間データを保持する必要があります。これが他の集約手法と組み合わさると、データ膨張を引き起こす可能性があります。例:
  • select 文内で、異なるディメンションに対して DISTINCT を使用した集約操作を行う。各 DISTINCT 操作によってデータが膨張します。
  • grouping setscube、または rollup を使用する。これらは中間データのサイズを数倍に増加させる可能性があります。
データ膨張を引き起こす集約操作は実行しないでください。
不適切な JOIN 操作 例えば、JOIN 操作の左テーブルに大量の人口データが含まれ、右テーブルが各性別について数百行のデータを記録するディメンションテーブルであるとします。JOIN 操作を性別に基づいてデータに対して実行すると、左テーブルのデータサイズが元のサイズの数百倍に膨張する可能性があります。 データ膨張を防ぐには、右テーブルを集約してから左テーブルと結合してください。