ウィンドウ指定のPARTITION BY句で指定される列で、順序付き分析関数が実行するパーティションが決定します。 例えば、次の問合わせではPARTITION BY句でStoreID列を指定して、各店舗のグループ売上合計を計算します。
SELECT StoreID, SMonth, ProdID, Sales, SUM(Sales) OVER (PARTITION BY StoreID) FROM sales_tbl;
実行時に、Teradata Databaseは1つのパーティションに分類される行のすべてを同じAMPに移動します。多くの行が同じパーティションに分類される場合、AMPではスプール領域が不足する可能性があります。 例えば、先行する問合わせのsales_tblテーブルに何百万または何十億もの行があり、StoreID列に小数の明確な値がある場合は、膨大な数の行が同じパーティションに分類されることになり、スプール不足エラーの原因となります。
この問題を回避するには、PARTITION BY句の列のデータを検査します。 必要に応じて、PARTITION BY句で追加の列を含めるように問合わせを書き換え、Teradata DatabaseがAMPでより均等に分配を行なうことができるように、小さいパーティションを作成します。 例えば、先行する問合わせは、月ごとに各店舗のグループ売上合計を計算するように書き換えることができます。
SELECT StoreID, SMonth, ProdID, Sales, SUM(Sales) OVER (PARTITION BY StoreID, SMonth) FROM sales_tbl;