do-while ノードは、プログラミング言語における do-while 文と同様に動作します。つまり、内部ワークフローをループで実行し、各反復の終了時に終了条件を評価します。このループは、条件の評価前に最低でも 1 回は必ず実行されます。do-while ノードは単体で使用することもできますが、代入ノードと組み合わせて結果セットを反復処理することもできます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
DataWorks Standard Edition ワークスペース以上が必要です — Basic Edition では do-while ノードは利用できません。詳細については、「DataWorks のエディション間の違い」をご参照ください。
内部ワークフローの設定方法を理解するために、「do-while ノードの構成とフローオーケストレーション」をご参照ください。
ループ内で利用可能な変数を理解するために、「組み込み変数」をご参照ください。
終了条件の実装例を参考にするために、「終了ノードのサンプルコード」をご参照ください。
do-while ノードのテスト方法および実行ログの確認方法を理解するために、「注意事項」をご参照ください。
制限事項
| 制約事項 | 詳細 |
|---|---|
| エディション | DataWorks Standard Edition 以上のみ |
| 最大ループ回数 | ノードインスタンスあたり 1,024 回 |
| 並列実行 | 非対応 — 各ループは前のループが終了した後にのみ開始されます |
仕組み
do-while ノードには、以下の 3 つの組み込みコンポーネントがあります。
| コンポーネント | 役割 | 削除可能か |
|---|---|---|
| 開始ノード | 各反復の開始を示すものであり、ビジネスロジックは実行しません | いいえ |
| Shell ノード | DataWorks が提供するサンプルのビジネス処理ノードです。他のノードタイプに置き換えることができます | いいえ(必要に応じて他のノードタイプに置き換えます) |
| 終了ノード | 終了条件を評価します。True を返すとループを継続し、False を返すとループを停止します | いいえ |
各反復における実行シーケンスは以下のとおりです。
開始ノードがループの開始を通知します。
内部ノードが依存関係に従って順次実行されます。
終了ノードが終了条件を評価します。
終了ノードが
Trueを返す場合、次の反復が開始されます。一方、Falseを返す場合、ループは終了します。
すべての内部ノードで利用可能な組み込み変数は以下のとおりです。
| 変数 | 説明 | 初期値 |
|---|---|---|
${dag.loopTimes} | 現在の反復回数 | 1 |
${dag.offset} | 現在の反復回数から 1 を引いた値(オフセット) | 0 |
内部ノードでは、do-while ノード上で設定した入出力パラメーターを、${dag.<parameter name>} の形式で参照できます。
do-while ノードの作成
DataStudio ページに移動します。DataWorks コンソールにログインします。上部のナビゲーションバーから目的のリージョンを選択します。左側のナビゲーションウィンドウで、データ開発およびガバナンス > データ開発 を選択します。表示されたページで、ドロップダウンリストから目的のワークスペースを選択し、データ開発へ移動 をクリックします。
ノードを作成します。
アイコンにカーソルを合わせ、ノードの作成 > 一般 > do-while の順に選択します。または、左側のペインで対象のワークフローを見つけ、ワークフロー名をクリックしてから、一般 を右クリックし、ノードの作成 > do-while を選択します。ノードの作成 ダイアログボックスで、名前 および パス パラメーターを設定し、確定 をクリックします。
例:5 回ループして反復回数を出力する
この例では、do-while ノードを正確に 5 回実行します。各反復において、Shell ノードが現在のループ番号を出力します。
Shell ノードの編集
終了ノードの設定
終了ノードをダブルクリックして、その構成タブを開きます。
[言語] ドロップダウンリストから [Python] を選択します。
以下の終了条件を入力します。
if ${dag.loopTimes}<5: print True; else: print False;この条件では、
dag.loopTimesを5と比較しています。5 回目の反復では、dag.loopTimesは5に等しくなるため、${dag.loopTimes}<5はFalseと評価され、ループは停止します。1~4 回目の反復ではTrueが返され、ループは継続します。
do-while ノードのコミットおよびデプロイ
上部ツールバーの
アイコンをクリックして、ノードを保存します。上部ツールバーの
アイコンをクリックして、ノードをコミットします。提出 ダイアログボックスで、変更内容の説明 を入力します。コミットする前に、再実行 および 親ノード パラメーターを プロパティ タブで設定します。デプロイ前にタスクコードを検証するために、コードレビューを有効化します。コミットされたノードは、コードレビューに合格した後でのみデプロイ可能になります。詳細については、「コードレビュー」をご参照ください。
ワークスペースが標準モードの場合、ノード構成タブの右上隅にある デプロイ をクリックして、ノードを本番環境にデプロイします。詳細については、「タスクのデプロイ」をご参照ください。
ノードのテストおよび実行ログの確認
do-while ノードは DataStudio 内で直接テストすることはできません。ワークフローをオペレーションセンターにコミットおよびデプロイした後、そちらで実行および確認を行ってください。
do-while ノードが代入ノードの値を使用する場合、テスト時には代入ノードと do-while ノードの両方を実行してください。
do-while ノードの構成タブで、上部ツールバーの オペレーションセンター をクリックします。
左側のナビゲーションウィンドウで、周期タスク保守 > 周期タスク を選択します。
do-while ノードを見つけ、操作 列の DAG をクリックします。
有向非循環グラフ (DAG) で、代入ノードを右クリックし、実行 > 現在および子ノードを遡及的に実行 を選択します。データバックフィル ダイアログボックスでパラメーターを設定し、OK をクリックします。
[パッチデータ] ページを更新します。データバックフィルインスタンスが正常に実行された後、do-while インスタンスの [アクション] 列の [DAG] をクリックします。
実行ログを確認します。
do-while ノードを右クリックし、内部ノードの表示 を選択します。内部ノードビューには 3 つのペインがあります。
ペイン 内容 左 再実行履歴 — do-while ノードインスタンスの実行ごとに 1 件のレコード 中央 ループ記録一覧 — 全ての反復およびそのステータス 右 反復の詳細 — ループ記録をクリックすると、その中のノードインスタンスを表示できます 中央ペインで完了したループをクリックします。右ペインで目的のノードを右クリックし、実行時ログの表示 を選択します。
中央ペインで ループ 5 をクリックして、5 回目のループにおける Shell ノードの実行ログを表示します。
次のステップ
外部ワークフローと内部ノード間でデータを渡すには、do-while ノード上で入出力パラメーターを設定します。内部ノードでは、
${dag.<parameter name>}を使用してそれらを参照できます。結果セットを反復処理するには、do-while ノードと代入ノードを組み合わせます。
${dag.offset}(初期値は 0)を使用して各行をインデックス指定します。do-while ノードは、終了条件の評価前に必ず最低 1 回は実行されるため、do-while 文の動作と一致します。while ループのような事前チェックはサポートされていません。for-each の動作を実現するには、
${dag.offset}を使用し、適切に入出力パラメーターを設定します。