すべてのプロダクト
Search
ドキュメントセンター

DataWorks:Do-while ノード

最終更新日:Mar 27, 2025

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 ノードの内部ワークフローを構成できます。 do-while ノードの内部ワークフローを構成する場合は、内部ワークフローが [開始] ノードで始まり、[終了] ノードで終わることを確認してください。

  • do-while ノードの内部ノードが分岐ノードを使用して論理判断を実行したり、代入ノードによって渡された結果セットをループしたりする場合は、マージノードが必要です。 マージノードの詳細については、「マージノード」をご参照ください。

  • do-while ノードの [終了] ノードのコードを開発する際に、コメントを追加することはできません。

値の取得

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 ノードは、image開始ノード、image終了ノード、および do-while ループ本体で構成されます。

  • image開始ノードはループの開始を示し、ループタスクの処理には使用されません。 開始ノードは削除できません。

  • do-while ループ本体は、DataWorks によって提供されるサンプル ビジネス処理ノードです。

  • image終了ノードはループの終了を示し、次のループを開始するかどうかを決定します。 終了ノードは、do-while ノードのループ終了条件を定義します。 終了ノードは削除できません。

説明

ビジネス要件に基づいて、do-while ノードに内部ワークフローを構成できます。 具体的には、別のタイプのノードをdo-while ループ本体に追加できます。

do-while ノードを構成する

do-while ノードの構成タブに移動して、do-while ノードを構成します。 デフォルトでは、do-while ノードは、image開始ノード、image終了ノード、および do-while ループ本体で構成されます。

  1. Do-while ループ本体の横にある [内部ノードの作成] をクリックします。 表示されるポップオーバーで、[Shell] を選択し、Shell ノードの名前を指定します。

  2. Shell ノードを構成します。

    1. ループ本体で作成された Shell ノードにポインターを移動し、Shell ノードの名前を右クリックして、[ノードを開く] を選択し、Shell ノードの構成タブに移動します。

    2. Shell ノードのコードを記述します。

      echo ${dag.loopTimes} ---- 現在のループ回数を表示します。

      説明
      • do-while ノードの image開始ノードと image終了ノードのロジックは固定されており、編集できません。

      • Shell ノードのコードを変更した後、変更を保存します。 ノードをコミットするとき、システムは変更を保存するように促すメッセージを表示しません。 変更を保存しないと、コードをできるだけ早く最新バージョンに更新できません。

      • ${dag.loopTimes} 変数は、システムの予約変数です。 この変数は現在のループ回数を指定し、この変数の値は 1 から始まります。 do-while ノードのすべての内部ノードはこの変数を参照できます。 組み込み変数の詳細については、「組み込み変数」をご参照ください。

  3. 上部ツールバーの image アイコンをクリックして、ノードを保存します。

終了ノードを構成し、終了ノードでループ終了条件を定義する

do-while ノードの構成タブに移動して、do-while ノードの image終了ノードを構成し、終了ノードでループ終了条件を定義します。 この例では、5 つのループが実行された後にループを終了するように do-while ノードが定義されています。

  1. image終了ノードを右クリックし、[ノードを開く] を選択します。 次のコードを入力して、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 ノードはループを終了します。

  2. 上部ツールバーの image アイコンをクリックして、image終了ノードを保存します。

do-while ノードを保存してデプロイする

Shell ノードと終了ノードのループ終了条件を構成した後、ワークフローに戻り、[デプロイ] をクリックして、do-while ノードと、do-while ノードの祖先ノードとして構成されている代入ノードをデプロイします。 詳細については、「ノードまたはワークフローのデプロイ」をご参照ください。

説明

do-while ノードをコミットする前に、do-while ノードの [再実行] プロパティと [祖先ノード] を構成する必要があります。

do-while ノードをテストし、テスト結果を表示する

  1. デプロイが完了したら、[オペレーションセンター][自動トリガーノード] ページに移動して、デプロイされたノードを表示し、ノードで O&M 操作を実行します。 これにより、システムは、構成したスケジューリングプロパティに基づいてノードを定期的に実行します。

  2. [自動トリガーノード] ページで、代入ノードを見つけ、[アクション] 列の [データのバックフィル] をクリックし、[現在および子孫ノードを遡及的に] を選択して、代入ノードと 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 から始まります。