DataWorks は、do-while ノードを提供します。 do-while ノード内でワークフローを再配置し、ノード内でループで実行されるロジックを記述し、終了ノードを構成してループを終了するかどうかを決定できます。 do-while ノードを単独で使用することも、do-while ノードを代入ノードと共に使用して、代入ノードによって渡された結果セットをループすることもできます。
ノードの概要
do-while ノード内でワークフローを再配置し、ノード内でループで実行されるロジックを記述し、終了ノードを構成してループを終了するかどうかを決定できます。 do-while ノードを単独で使用することも、do-while ノードを代入ノードと共に使用して、代入ノードによって渡された結果セットをループすることもできます。このトピックでは、do-while ノードの構成とアプリケーションロジックについて説明します。
前提条件
使用する RAM ユーザーがワークスペースに追加されていること。
RAM ユーザーを使用してタスクを開発する場合は、RAM ユーザーをメンバーとしてワークスペースに追加し、[開発] ロールまたは [ワークスペース管理者] ロールを RAM ユーザーに割り当てる必要があります。ワークスペース管理者ロールには、必要以上の権限があります。 ワークスペース管理者ロールを割り当てる場合は注意してください。 メンバーを追加してロールを割り当てる方法の詳細については、「ワークスペースメンバーを追加し、ロールを割り当てる」をご参照ください。
サーバーレス リソースグループがワークスペースに関連付けられていること。 詳細については、「サーバーレス リソースグループの使用」ディレクトリのトピックをご参照ください。
ノードでタスクを開発する前に、do-while ノードが作成されていること。 詳細については、「タスクノードを作成する」をご参照ください。
制限事項
do-while ノードは、DataWorks Standard Edition 以降のエディションでのみサポートされています。 詳細については、「DataWorks エディション間の違い」をご参照ください。
並列実行はサポートされていません。 ループは、前のループが終了した場合にのみ開始できます。
注意事項
次元 | 項目 | 説明 |
ループのサポート | ループ数の上限 | do-while ノードの最大ループ数は 128 です。 do-while ノードのループ数が 128 を超えると、[終了] ノードは False を返してループを終了します。 |
内部ノード | ワークフロー オーケストレーション |
|
値の取得 | do-while ノードの祖先ノードとして構成されている代入ノードによって渡される出力値を取得するには、do-while ノードによって提供される 組み込み変数 を使用できます。 | |
デバッグ | タスクのデバッグ | 標準モードでワークスペースを使用している場合、Data Studio で do-while ノードを実行するテストを直接実行することはできません。 テストを実行して do-while ノードの実行結果を確認する場合は、do-while ノードを含むワークフローを開発環境のオペレーションセンターにコミットしてデプロイし、do-while ノードでタスクを実行する必要があります。 |
ログの表示 | オペレーションセンターで do-while ノードの実行ログを表示するには、次の手順を実行します。 do-while ノードを見つけて、ノードの有向非循環グラフ (DAG) を開きます。 DAG で、ノード名を右クリックし、[内部ノードの表示] を選択します。 | |
依存関係 | 依存関係の設定 | do-while ノードを単独で使用することも、do-while ノードを代入ノードと共に使用することもできます。 オペレーションセンターで、代入ノードが出力を do-while ノードに渡すかどうかを確認する場合は、データバックフィル機能を使用して、代入ノードと do-while ノードの両方のデータをバックフィルできます。 do-while ノードのみを実行する場合、代入ノードの出力を取得することはできません。 |
組み込み変数
ほとんどの場合、do-while ノードによって提供される組み込み変数は、${dag.変数名} 形式で構成されます。 DataWorks の do-while ノードは、2 つの組み込み変数 ${dag.loopTimes} と ${dag.offset} を提供します。 また、do-while ノードを代入ノードと共に使用して、${dag.変数名} 形式で構成された組み込み変数に基づいて、値の代入パラメーターの値を取得することもできます。
組み込み変数
DataWorks の do-while ノードによって提供される組み込み変数を使用して、do-while ノードがループに使用されたときに終了したループの数と、現在のループと前のループの間のオフセットを取得できます。
組み込み変数
説明
値
${dag.loopTimes}終了したループの数。
最初のループは 1、2 番目のループは 2、3 番目のループは 3、...、n 番目のループは n。
${dag.offset}現在のループと前のループの間のオフセット。
最初のループは 0、2 番目のループは 1、3 番目のループは 2、...、n 番目のループは n-1。
代入ノードによって渡された結果セットを取得する
do-while ノードを代入ノードと共に使用する場合は、次の表で説明する組み込み変数を使用して、値の代入パラメーターとループ変数の値を取得できます。
説明do-while ノードが代入ノードに依存している場合は、[出力パラメーター] で代入ノードに指定されている出力パラメーターを、do-while ノードの入力パラメーターに追加できます。その後、do-while ノードを使用して、代入ノードによって渡された結果セット、または結果セット内の指定されたデータを取得できます。入力パラメーターは、${dag.Variable name} 形式で設定されます。変数名は、[入力パラメーター] で do-while ノードに指定されている入力パラメーターの名前に置き換えます。以下の組み込み変数では、
inputは、do-while ノードで定義されている [入力パラメーター] の名前を指定し、代入ノードによって渡された結果セットを取得するために使用されます。 input は、実際に使用する入力パラメーターの名前に置き換える必要があります。組み込み変数
説明
${dag.input}祖先代入ノードによって渡されたデータセット。
${dag.input[${dag.offset}]}現在のループで do-while ノードによって取得されたデータ入力。
${dag.input.length}do-while ノード内で取得されたデータセットの長さ。
ステップ 1:do-while ノードを使用してタスクを開発する
do-while ノードの開発の説明
デフォルトでは、do-while ノードは、
開始ノード、
終了ノード、および do-while ループ本体で構成されます。
開始ノードはループの開始を示し、ループタスクの処理には使用されません。 開始ノードは削除できません。do-while ループ本体は、DataWorks によって提供されるサンプル ビジネス処理ノードです。
終了ノードはループの終了を示し、次のループを開始するかどうかを決定します。 終了ノードは、do-while ノードのループ終了条件を定義します。 終了ノードは削除できません。
ビジネス要件に基づいて、do-while ノードに内部ワークフローを構成できます。 具体的には、別のタイプのノードをdo-while ループ本体に追加できます。
do-while ノードを構成する
do-while ノードの構成タブに移動して、do-while ノードを構成します。 デフォルトでは、do-while ノードは、
開始ノード、
終了ノード、および do-while ループ本体で構成されます。
Do-while ループ本体の横にある [内部ノードの作成] をクリックします。 表示されるポップオーバーで、[Shell] を選択し、Shell ノードの名前を指定します。
Shell ノードを構成します。
ループ本体で作成された Shell ノードにポインターを移動し、Shell ノードの名前を右クリックして、[ノードを開く] を選択し、Shell ノードの構成タブに移動します。
Shell ノードのコードを記述します。
echo ${dag.loopTimes} ---- 現在のループ回数を表示します。説明do-while ノードの
開始ノードと
終了ノードのロジックは固定されており、編集できません。Shell ノードのコードを変更した後、変更を保存します。 ノードをコミットするとき、システムは変更を保存するように促すメッセージを表示しません。 変更を保存しないと、コードをできるだけ早く最新バージョンに更新できません。
${dag.loopTimes}変数は、システムの予約変数です。 この変数は現在のループ回数を指定し、この変数の値は 1 から始まります。 do-while ノードのすべての内部ノードはこの変数を参照できます。 組み込み変数の詳細については、「組み込み変数」をご参照ください。
上部ツールバーの
アイコンをクリックして、ノードを保存します。
終了ノードを構成し、終了ノードでループ終了条件を定義する
do-while ノードの構成タブに移動して、do-while ノードの
終了ノードを構成し、終了ノードでループ終了条件を定義します。 この例では、5 つのループが実行された後にループを終了するように do-while ノードが定義されています。
終了ノードを右クリックし、[ノードを開く] を選択します。 次のコードを入力して、do-while ノードのループ終了条件を定義します。if ${dag.loopTimes}<5: print True; else: print False;${dag.loopTimes} 変数は、システムの予約変数です。 この変数は現在のループ回数を指定し、この変数の値は 1 から始まります。 do-while ノードのすべての内部ノードはこの変数を参照できます。 組み込み変数の詳細については、「組み込み変数」をご参照ください。
コードでは、
dag.loopTimes変数の値が 5 と比較され、実行できるループの数が制限されます。 たとえば、dag.loopTimes変数の値は、最初のループの実行時は 1 で、実行ごとに 1 ずつ増加し、2 回目は 2、5 回目は 5 になります。 ${dag.loopTimes}<5 の結果が False の場合、do-while ノードはループを終了します。
上部ツールバーの
アイコンをクリックして、
終了ノードを保存します。
do-while ノードを保存してデプロイする
Shell ノードと終了ノードのループ終了条件を構成した後、ワークフローに戻り、[デプロイ] をクリックして、do-while ノードと、do-while ノードの祖先ノードとして構成されている代入ノードをデプロイします。 詳細については、「ノードまたはワークフローのデプロイ」をご参照ください。
do-while ノードをコミットする前に、do-while ノードの [再実行] プロパティと [祖先ノード] を構成する必要があります。
do-while ノードをテストし、テスト結果を表示する
デプロイが完了したら、[オペレーションセンター] の [自動トリガーノード] ページに移動して、デプロイされたノードを表示し、ノードで O&M 操作を実行します。 これにより、システムは、構成したスケジューリングプロパティに基づいてノードを定期的に実行します。
[自動トリガーノード] ページで、代入ノードを見つけ、[アクション] 列の [データのバックフィル] をクリックし、[現在および子孫ノードを遡及的に] を選択して、代入ノードと do-while ノードのデータをバックフィルします。 詳細については、「データのバックフィルとデータバックフィルインスタンスの表示 (新バージョン)」をご参照ください。
付録:do-while 機能の比較と説明
do-while ノードと while、For Each、および do-while ループ文の比較:
do-while ノードは、評価前にループを開始するワークフローに基づいて実行されます。 このノードは、do-while 文と同じように機能します。 do-while ノードは、組み込み変数 ${dag.offset} と入力および出力パラメーターを使用して、For Each 文の機能を実現できます。
do-while ノードは評価前にループを実行するため、while 文の機能を実現できません。
do-while ノードの作業手順:
システムは開始ノードからループを実行し、それらに構成された依存関係に基づいて他のノードを実行します。
システムがループ内で終了ノードに定義されているコードを実行した後、次のいずれかの状況が発生します。
# エンドノードが True を返す場合は、ループを再度実行します。
# 終了ノードが False を返した場合、ループを終了します。
入力パラメーターと出力パラメーター: do-while ノードの内部ノードは、[${dag.Input and output parameter names}] 変数を使用して、do-while ノードに対して構成された入力パラメーターと出力パラメーターを参照します。
組み込み変数: DataWorks は、do-while ノードの内部ノードに対して次の組み込み変数を用意しています。
dag.loopTimes: 実行されたループ回数。この変数の値は 1 から始まります。
dag.offset: 実行されたループ回数の 1 からのオフセット。この変数の値は 0 から始まります。