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

MaxCompute:データ拡張の処理

最終更新日:Jan 20, 2025

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

問題の説明

Fuxiタスクの出力データ量は、その入力データ量よりもはるかに大きい。 入出力データの量は、LogviewページのFuxiタスクのI/OレコードおよびI/Oバイト属性に基づいて取得できます。

次の図では、Fuxiタスクの入力データ量は約1 GB、処理後の出力データ量は約1テラバイトです。 1テラバイトのデータを1つのインスタンスで処理すると、データ処理効率が大幅に低下します。

Amount of input and output data

原因と対策

次の表に、この問題の考えられる原因と実行可能な対策を示します。

原因説明測定
コード内のバグコードに欠陥があります。 例:
  • コードのJOIN条件が正しくなく、デカルト積として記述されています。
  • ユーザー定義のテーブル値関数 (UDTF) が無効です。 その結果、出力データの量は、入力データの量よりもはるかに多い。
コードのバグを修正します。
不適切な集計操作
ほとんどの集計操作は再帰的で、中間結果はマージされます。 ほとんどの場合、中間結果データの量は大きくなく、ほとんどの集計操作の計算の複雑さは低いです。 したがって、これらの集計操作は、データ量が大きくても時間がかからない。 ただし、collect_listmedianなどの一部の集計操作では、すべての中間結果データを保持する必要があります。 これらの集計操作が他の集計操作とともに使用される場合、データ拡張が発生する可能性があります。 例:
  • SELECT操作で集計操作を実行し、DISTINCT操作を実行して異なるディメンションの重複を削除すると、重複が削除されるたびにデータの拡張が行われます。
  • GROUPING SETSCUBE、またはROLLUPを使用すると、中間結果データのサイズが元のデータサイズの何倍も大きくなることがあります。
データ拡張を引き起こす集計操作を実行しないでください。
不適切なJOIN操作たとえば、JOIN操作の左側のテーブルには大量の母集団データが含まれ、右側のテーブルにはディメンションテーブルがあり、性別ごとに数百行のデータが記録されます。 性別に基づいてデータに対してJOIN操作を実行すると、左側のテーブルのデータのサイズが元のサイズの数百倍に拡大する場合があります。 データの拡張を防ぐために、JOIN操作を実行する前に、右側のテーブルの行にデータを集約できます。