DataWorks は、do-while ノードを提供します。do-while ノード内でワークフローを再配置し、ノード内でループで実行されるロジックを記述し、終了ノードを設定してループを終了するかどうかを決定できます。 do-while ノードを単独で使用することも、do-while ノードを割り当てノードと共に使用して、割り当てノードによって渡された結果セットをループ処理することもできます。このトピックでは、do-while ノードを設定する方法の例を示します。
前提条件
ビジネス要件に基づいて、do-while ノードの内部ワークフローを設定できることを理解している必要があります。 詳細については、「do-while ノードの構成とワークフローオーケストレーション」をご参照ください。
do-while ノードによって提供される組み込み変数を使用して、各ループの関連値を取得できることを理解している必要があります。 組み込み変数の詳細については、「組み込み変数」をご参照ください。
do-while ノードの内部ワークフローは開始ノードで開始し、終了ノードで終了する必要があることを理解している必要があります。 また、開始ノードはループの開始を示し、終了ノードはループを終了するかどうかを制御するために使用されることも理解している必要があります。 終了ノードの詳細については、「終了ノードのサンプルコード」をご参照ください。
do-while ノードをテストする方法と、do-while ノードの実行ログを表示する方法を理解している必要があります。 詳細については、「注意事項」をご参照ください。
制限事項
do-while ノードは、DataWorks Standard Edition 以降のエディションでのみサポートされています。 詳細については、「DataWorks エディション間の違い」をご参照ください。
do-while ノードの最大ループ回数は 1024 です。
並列実行はサポートされていません。 ループは、前のループが終了した場合にのみ開始できます。
do-while ノードの作成
DataStudio ページに移動します。
DataWorks コンソール にログインします。 上部のナビゲーションバーで、目的のリージョンを選択します。 左側のナビゲーションペインで、 を選択します。 表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発に移動] をクリックします。
do-while ノードを作成します。
[datastudio] ページで、ポインターを
アイコンの上に移動し、 を選択します。または、do-while ノードを作成するワークフローを見つけ、ワークフロー名をクリックし、[一般] を右クリックして、 を選択することもできます。
[ノードの作成] ダイアログボックスで、[名前] パラメーターと [パス] パラメーターを設定します。
[確認] をクリックします。
do-while ノードの使用例
このセクションでは、do-while ノードを使用して出力を 5 回ループし、ループが実行されるたびに現在のループ回数を表示する方法について説明します。
シェルノードのコードを編集する
デフォルトでは、do-while ノードは start ノード、shell ノード、および end ノードで構成されます。
start ノードはループの開始を示し、ループタスクの処理には使用されません。 start ノードは削除できません。
shell ノードは、DataWorks によって提供されるサンプルのビジネス処理ノードです。
end ノードはループの終了を示し、次のループを開始するかどうかを決定します。 end ノードは、do-while ノードのループ終了条件を定義します。 end ノードは削除できません。
ビジネス要件に基づいて、do-while ノードで内部ワークフローを設定できます。 具体的には、shell ノードを別のタイプのノードに置き換えることができます。
shell ノードをダブルクリックします。 shell ノードの設定タブが表示されます。
コードエディターに次のコードを入力します。
echo ${dag.loopTimes} ----Display the current number of loops.
終了ノードの設定
終了ノードでループ終了条件を定義します。
終了ノードをダブルクリックします。 ノードの設定タブが表示されます。
[言語] ドロップダウンリストから [python] を選択します。
次のコードを入力して、do-while ノードのループ終了条件を定義します。
if ${dag.loopTimes}<5: print True; else: print False;${dag.loopTimes} 変数は、システムの予約変数です。 この変数は現在のループ回数を指定し、この変数の値は 1 から始まります。 do-while ノードのすべての内部ノードはこの変数を参照できます。 組み込み変数の詳細については、「組み込み変数」および「変数値の例」をご参照ください。
コードでは、
dag.loopTimes変数の値を 5 と比較して、実行できるループ回数を制限します。 dag.loopTimes 変数の値は最初のループでは 1 で、ループごとに 1 ずつ増加します。 この場合、${dag.loopTimes} 変数の値は 2 番目のループでは 2、5 番目のループでは 5 になります。 ${dag.loopTimes}<5 の結果が False の場合、do-while ノードはループを終了します。
do-while ノードをコミットする
上部ツールバーの
アイコンをクリックして、ノードを保存します。上部ツールバーの
アイコンをクリックして、ノードをコミットします。[送信] ダイアログボックスで、[変更の説明] パラメーターを設定します。 次に、ビジネス要件に基づいて、ノードをコミットした後にノードコードを確認するかどうかを決定します。
重要ノードをコミットする前に、[プロパティ] タブで [再実行] パラメーターと [親ノード] パラメーターを設定する必要があります。
コードレビュー機能を使用して、タスクのコード品質を確保し、無効なタスクコードによって発生するタスク実行エラーを防ぐことができます。 コードレビュー機能を有効にすると、コミットされたノードコードは、コードレビューに合格した後でのみデプロイできます。 詳細については、「コードレビュー」をご参照ください。
使用しているワークスペースが標準モードの場合、ノードの設定タブの右上隅にある [デプロイ] をクリックして、ノード上のタスクを実行するために本番環境にデプロイする必要があります。 詳細については、「タスクのデプロイ」をご参照ください。
do-while ノードをテストし、do-while ノードの実行ログを表示する
do-while ノードのコミット、デプロイ、および実行の手順は、一般的なノードのコミット、デプロイ、および実行の手順と同じです。 ただし、DataStudio で do-while ノードをテストすることはできません。
使用しているワークスペースが標準モードの場合、DataStudio で do-while ノードを実行するためのテストを直接実行することはできません。
do-while ノードを実行するためのテストを実行して結果を表示するには、do-while ノードを含むワークフローを Operation Center にコミットしてデプロイし、Operation Center で do-while ノードを実行する必要があります。 do-while ノードで割り当てノードによって渡された値を使用する場合は、Operation Center でのテスト中に割り当てノードと do-while ノードの両方を実行します。
do-while ノードの設定タブで、上部ツールバーの [operation Center] をクリックして、[operation Center] に移動します。
Operation Center ページの左側のナビゲーションペインで、 を選択します。
[サイクルタスク] ページで、do-while ノードを見つけ、[アクション] 列の [DAG] をクリックして、do-while ノードの有向非巡回グラフ (DAG) を開きます。 do-while ノードの DAG で、割り当てノードを右クリックし、 を選択します。 [バックフィルデータ] ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。
[パッチデータ] ページを更新します。 データバックフィルインスタンスが正常に実行された後、do-while ノード用に生成されたデータバックフィルインスタンスの [アクション] 列の [DAG] をクリックします。
do-while ノードの実行ログを表示します。
do-while ノードを右クリックし、[内部ノードの表示] を選択します。
do-while ノードの実行ログは、do-while ノードの内部ノードを表示した場合にのみ表示できます。
do-while ノードの内部ワークフローは 3 つの部分に分かれています。
ビューの左側のペインには、do-while ノードの再実行履歴が表示されます。 do-while ノードインスタンスが実行されるたびにレコードが生成されます。
ビューの中央のペインには、do-while ノードの既存のすべてのループと各ループの状態を示すループレコードリストが表示されます。
ビューの右側のペインには、各ループの詳細が表示されます。 ループレコードリストのレコードをクリックして、ループ内の各インスタンスの詳細を表示できます。
内部ノードページで、中央のペインで終了したループをクリックし、右側のペインで目的のノードを右クリックして、[ランタイムログの表示] を選択します。
n 番目のループの実行ログを表示します。
内部ノードページで、中央のペインの [ループ 5] をクリックして、5 番目のループの shell ノードの実行ログを表示します。
上記の例は、do-while ノードが次のアプリケーションロジックに基づいて動作することを示しています。
システムは start ノードからループを開始します。
do-while ノード内の他のノードは、設定されている依存関係に基づいて順番に実行されます。
システムは、ループ終了のために end ノードのコードで定義されている条件文を実行します。
システムは実行されたループ回数を記録し、end ノードの実行ログで条件文が True を返した場合、次のループが開始されます。
end ノードの実行ログで条件文が False を返した場合、ループ処理全体が終了します。
まとめ
do-while ノードと while、For Each、および do-while ループステートメントの比較:
do-while ノードは、評価前にループを開始するワークフローに基づいて実行されます。 このノードは、do-while ステートメントと同じように機能します。 do-while ノードは、組み込み変数 ${dag.offset} と入力パラメーターおよび出力パラメーターを使用して、For Each ステートメントの機能を実現できます。
do-while ノードは評価前にループを実行するため、while ステートメントの機能を実現できません。
do-while ノードの作業手順:
システムは start ノードからループを実行し、設定されている依存関係に基づいて他のノードを実行します。
システムがループ内で end ノードに定義されているコードを実行した後、次のいずれかの状況が発生します。
end ノードが True を返すと、次のループが開始されます。
end ノードが False を返すと、ループ処理全体が終了します。
入力パラメーターと出力パラメーター:do-while ノードの内部ノードは、変数 ${dag.入力パラメーター名と出力パラメーター名} を使用して、do-while ノードに設定されている入力パラメーターと出力パラメーターを参照します。
組み込み変数:DataWorks は、do-while ノードの内部ノードに次の組み込み変数を提供します。
dag.loopTimes:実行されたループ回数。 この変数の値は 1 から始まります。
dag.offset:実行されたループ回数の 1 からのオフセット。 この変数の値は 0 から始まります。