フェーズの削減によるパフォーマンスの向上 - Advanced SQL Engine - Teradata Database

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

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

FNC_GetPhaseExオプションを使用すると、変数モードのテーブル関数を開発しているときに、テーブルのフェーズの遷移をより細かく制御できます。これらのオプションを使用して、テーブル関数の実行時に必要な、フェーズの遷移の数を減らすことができます。それにより、UDF呼び出しの回数が少なくなり、テーブル関数のパフォーマンスを向上することになります。

次に示すテーブルでは、FNC_GetPhaseExオプションを使用した場合と、使用しなかった場合の各行に必要なフェーズの遷移の数を比較しています。これらのフェーズは、P (TBL_PRE_INIT)、I (TBL_INIT)、B (TBL_BUILD)、B EOF (TBL_BUILD_EOFではなく、EOFの合図を送るTBL_BUILD)、F (TBL_FINI)、およびE (TBL_END)です。Xは出力行に対する入力のスケール係数です。

処理モード FNC_GetPhaseExオプションが使用されない場合に必要なフェーズ 特定のFNC_GetPhaseExオプションが使用された場合に必要なフェーズ
1:1

(1ロー入力: 1ロー出力)

I, B, B EOF, F TBL_NEWROWオプションが設定されている場合はB。
1:M

(1行入力:複数行出力)

I, B*X, B EOF, F TBL_NEWROWEOFオプションが設定されている場合はB * X。
M:1

(複数行入力:1行出力)

I, B EOF, F TBL_NEWROW | TBL_LASTROWオプションが設定されている場合はB * X。

例:

1:1処理モードでは、TBL_NEWROWオプションを使用して、TBL_BUILD呼び出しごとに新しい行を取得します。

FNC_Mode mode = FNC_GetPhaseEx(&thePhase, TBL_NEWROW);

この場合、関数は次に示すフェーズをパス スルーします。



1:M処理モードでは、TBL_NEWROWEOFオプションを使用して、EOFの合図が送られたときに新しい行を取得します。

FNC_Mode mode = FNC_GetPhaseEx(&thePhase, TBL_NEWROWEOF);

この場合、関数は次に示すフェーズをパス スルーします。


TBL_NEWROWEOFオプションは、EOFの合図が送られたときに新しい行を取得します。

M:1処理モードでは、以下を使用します。

FNC_Mode mode = FNC_GetPhaseEx(&thePhase, TBL_LASTROW | TBL_NEWROW);

M:1と1:Mを組み合わせた処理モードは、次のように使用します。これは、EOFまで新しい行を渡しません。

FNC_Mode mode = FNC_GetPhaseEx(&thePhase, TBL_LASTROW | TBL_NEWROWEOF);

この場合、関数は次に示すフェーズをパス スルーします。



詳細については、FNC_GetPhaseExを参照してください。