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

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/uhh1512082756414.ditamap
dita:ditavalPath
ja-JP/uhh1512082756414.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);

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


Layer_1 工作表.1 工作表.2 工作表.3 工作表.4 工作表.5 工作表.6 工作表.7 工作表.8 工作表.9 工作表.10 工作表.11 工作表.12 工作表.13 工作表.14 工作表.15 工作表.16 工作表.17 工作表.18 工作表.19 工作表.20 工作表.21 工作表.22 工作表.23 工作表.24 工作表.25 工作表.26 工作表.27 工作表.28 工作表.29 工作表.30 工作表.31 工作表.32 工作表.33 工作表.34 工作表.35 工作表.36 工作表.37 工作表.38 工作表.39 工作表.40 工作表.41 工作表.42 工作表.43 工作表.44 工作表.45 工作表.46 工作表.47 工作表.48 工作表.49 工作表.50 工作表.51 工作表.52 工作表.53 工作表.54 工作表.55 工作表.56 工作表.57 工作表.58 工作表.59 工作表.60 工作表.61 工作表.62 工作表.63 工作表.64 工作表.65 工作表.66 工作表.67 工作表.68 工作表.69 工作表.70 工作表.71 工作表.72 工作表.73 工作表.74 工作表.75 工作表.76 工作表.77 工作表.78 工作表.79 工作表.80 工作表.81 工作表.82 工作表.83 工作表.84 工作表.85 工作表.86 工作表.87

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

FNC_Mode mode = FNC_GetPhaseEx(&thePhase, TBL_NEWROWEOF);

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



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を参照してください。