あるグループに対するウィンドウ集約関数の処理フローは、次のテーブルに示すとおりです。
フェーズ | aggregation_phase引数の値 | 説明 |
---|---|---|
1 | AGR_INIT | このフェーズは、新しい集約グループの評価が開始されるときに、パーティションごとに1度だけトリガーされます。 関数では、次のことを実行する必要があります。
|
2 | AGR_DETAIL | このフェーズは、行が前進する度にトリガーされます。 Teradata Databaseにより、各グループごとに、集約の対象となる行ごとに1回ずつ関数が呼び出されます。 関数は、特定のグループに対して定義されている中間記憶域に引数入力データを集積する必要があります。 |
3 | AGR_COMBINE | このフェーズは、ウィンドウ集約関数には適用しませんが、誤ってこのフェーズに到達してしまったときに、エラーを生成するために組み込むことができます。 このフェーズは集約UDF用です。詳細は、集約関数のパラメータ リストを参照してください。 |
6 | AGR_MOVINGTRAIL | このフェーズは、移動ウィンドウ タイプに適用します。 このフェーズは、ウィンドウを指す前進ポインタがパーティションの終端に到達したときに、移動ウィンドウの最後の数行によってのみトリガーされます。 このフェーズでは、新しい値を関数に提供しませんが、関数に対して処理がパーティションの終端に到達したことを示します。 関数は、ウィンドウがパーティションの終端方向に縮小するのに応じて、実際のサイズを反映するように必要な内部カウントとオフセット値を調整するために、このフェーズを使用します。 |
4 | AGR_FINAL | このフェーズは、最終的に評価された結果を結果行に移動する必要が生じたときに、呼び出されます。 グループへの入力はなくなり、関数はグループの最終集約結果を生成します。 |
5 | AGR_NODATA | このフェーズが関係してくるのは、集約するデータが何もない場合だけです。 この関数は、NULL集約セット用の結果を生成します。 |
ウィンドウのサイズに応じた、行のキャッシュを維持する必要があります。このキャッシュは、これまでに読み取った行の合計を示すカウンタ値の保守に役立ちます。例えば、Cがカウンタを表わすとすると、評価対象の行のウィンドウは次のようになります。
if (C < window_size), window size would be C else window size would be as indicated in function context.
ウィンドウの起点はC - window_sizeになり、ウィンドウの終端はCと同じになります。
各種のウィンドウの組み合わせ(PRECEDING/FOLLOWING/CURRENTなど)に関わる複雑性は、Teradata Databaseによって処理されます。ユーザーに必要なことは、行のウィンドウ キャッシュを保守し、この行のキャッシュに対する関数のセマンティクスを実装するだけです。