ループ変数 (DataStage®)
ループ条件を定義することで、Transformer ステージがすべての入力行に対して複数の出力行を出力するように指定できます。
ループ変数について
Transformer ステージでは、読み込む入力行ごとに、ループを複数回繰り返すように指定できます。 ステージは、特定の条件が true である間に、単一の入力行に対応する複数の出力行を生成することができます。
この条件の指定では、ステージ変数を使用することができます。 ステージ変数は、各入力行の読み取り後に 1 回評価されるため、ループの実行中は同じ値を保持します。
ループ変数を指定することもできます。 ループ変数は、ループ条件が true と評価されるたびに評価されます。 ループ変数は、ループの反復ごと、および生成される出力行ごとに変更できます。
変数の名前は、両方のステージ変数とループ変数の両方で固有でなければなりません。
ループ条件の定義
ループ条件を定義することで、各入力行を処理するときに Transformer ステージがループするように指定します。 ループは、条件が true である間、反復処理を続行します。
式の中に @ITERATION システム変数を使用できます。@ITERATION は、1 から開まって、ループが実行された回数のカウントを保持します。@ITERATION は、新しい入力行が読み取られると、1 にリセットされます。
- 「ループ中」フィールドで、式エディターのアイコンをクリックします。
- 式エディターで、ループを制御する式を指定します。 この式は、true または false の結果を返す必要があります。
- 「保存して戻る」をクリックします。
- 「ループ反復の警告しきい値」フィールドで、警告しきい値を定義します。
無限ループになる障害のあるループ条件を定義することはできますが、それでも正常にコンパイルされることもあります。 このようなイベントをキャッチするには、ループ反復警告しきい値を指定することができます。 ループが指定の回数繰り返されると警告がジョブ・ログに書き込まれ、その値の倍数に達するたびに警告が繰り返されます。
したがって、例えばしきい値を 100 と指定すると、ループが 100 回、200 回、300 回など繰り返されると、警告がジョブ・ログに書き込まれます。 しきい値を 0 に設定すると、警告は発行されません。 デフォルトのしきい値は 10000です。これは開始値に適しています。 環境変数 APT_TRANSFORM_LOOP_WARNING_THRESHOLD をしきい値に設定すると、プロジェクト内のすべてのジョブに制限を設定できます。
しきい値は、ループ反復、および入力行キャッシュ内に保持されているレコード数に適用されます (入力行キャッシュは、入力列の値を集計するときに使用されます)。
ループ変数の定義
Transformer ステージ内で、ループ変数を宣言および使用することができます。 ステージ内の式でループ変数を使用できます。
ループ条件が Transformer ステージに定義されている場合は、ループ変数を使用できます。 ループが定義されている場合、Transformer ステージは、ステージに入力されるすべての行に対して複数の行を出力できます。 ループ変数は、ループが反復されるたびに評価されるため、出力行ごとに値を変更することができます。 このような変数は、宣言されている Transformer ステージからのみアクセス可能です。 ステージ変数の導出ではループ変数を使用できません。
ループ変数は、以下のように使用できます。
- 式ごとに値を割り当てることができます。
- これらは、出力列の出力仕様を定義する式で使用できます。
- 変数を評価する式には、他のループ変数またはステージ変数、またはその変数自体を評価する変数を含めることができます。
宣言するループ変数は、リンク域の右側のペインにある表に表示されます。 この表は、出力リンク表とステージ変数表のようになります。 表のタイトル・バーの矢印をクリックすると、表を最大化または最小化できます。
表には、ループ変数と、その値を導出するために使用される式がリストされています。 リンクの行は、式で使用される入力列をループ変数に結合します。 テーブルの右側からのリンクは、変数を、それらを使用する出力列、またはそれらが使用するステージ変数にリンクします。
- 「ループ変数」フィールドで、「ループ変数の追加 +」をクリックします。
- 変数名、初期値、SQL タイプ、拡張情報 (変数に Unicode データが含まれている場合)、精度、スケール、およびオプションの説明を入力します。 変数名は、英字 (a-z、A-Z) で始めなければならず、英数字 (a から z、A から Z、0 から 9) のみを使用できます。
- 「変更を適用」をクリックします。