ウィンドウ集約関数の基本アルゴリズム - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

あるグループに対するウィンドウ集約関数の処理フローは、次のテーブルに示すとおりです。

フェーズ 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によって処理されます。ユーザーに必要なことは、行のウィンドウ キャッシュを保守し、この行のキャッシュに対する関数のセマンティクスを実装するだけです。