フェーズの削減によるパフォーマンスの向上 - 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

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

次に示すテーブルでは、Tbl.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は出力行に対する入力のスケール係数です。

処理モード Tbl.getPhaseEx()オプションが使用されない場合に必要なフェーズ 特定のTbl.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呼び出しごとに新しい行を取得します。

tbl.getPhaseEx(phase, tbl.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の合図が送られたときに新しい行を取得します。

tbl.getPhaseEx(phase, tbl.TBL_NEWROWEOF);

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



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

tbl.getPhaseEx(phase, tbl.TBL_LASTROW | tbl.TBL_NEWROW);

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

tbl.getPhaseEx(phase, tbl.TBL_LASTROW |tbl.TBL_NEWROWEOF);

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



詳細は、getPhaseEx(int[] phase, int option)を参照してください。