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

DataWorks:for-eachノードの設定

最終更新日:Jan 14, 2025

DataWorksは、for-eachノードを提供しています。 for-eachノードを使用すると、割り当てノードによって渡された結果セットをループ処理できます。 また、for-eachノードの内部ノードをカスタマイズすることもできます。 このトピックでは、for-eachノードの動作方法と設定方法の例を示します。 この例では、for-eachノードを使用して割り当てノードの出力を2回ループし、各ループの現在のループカウントが表示されます。

前提条件

for-eachノードを設定する前に、for-eachノードのロジックをよく理解しておく必要があります。 これにより、ノードの設定中にエラーが発生するのを防ぎます。 for-eachノードのロジックについては、for-eachノードのロジックをご参照ください。

手順

ほとんどの場合、for-eachノードは割り当てノードと共に使用されます。 このセクションでは、for-eachノードを使用する手順について説明します。

遍历节点

  1. for-eachノードの依存関係を設定します。

    for-eachノードは、割り当てノードに依存する必要があります。 for-eachノードの依存関係の設定方法については、ワークフローの作成と設定をご参照ください。

  2. for-eachノードへの入力パラメータを設定します。

    for-eachノードの[入力パラメータと出力パラメータ] セクションで、割り当てノードの outputs という名前の組み込み出力パラメータを、for-eachノードの [入力パラメータ] に入力パラメータとして追加します。 割り当てノードの設定方法については、割り当てノードの設定をご参照ください。

  3. for-eachノードの内部ノードを設定して、for-eachノードの入力パラメータを取得します。

    ビジネス要件に基づいてfor-eachノードの内部ワークフローを設定し、ワークフロー内の内部ノードの組み込み変数を設定して入力パラメータに必要な値を取得してから、for-eachノードを実行できます。 組み込み変数については、組み込み変数をご参照ください。 for-eachノードの設定方法については、for-eachノードの設定をご参照ください。

  4. for-eachノードをテストします。 DataStudioではfor-eachノードをテストできません。

    for-eachノードをテストするには、[オペレーションセンター] に移動し、目的の内部ノードを見つけて、ノードの名前をクリックしてノードの詳細を表示します。 詳細については、for-eachノードのテストとテスト結果の表示をご参照ください。

    説明

    オペレーションセンターで、割り当てノードが出力をfor-eachノードに渡すかどうかを確認するには、データバックフィル 機能を使用し、割り当てノードとfor-eachノードの両方を選択できます。 for-eachノードのみを実行した場合、割り当てノードの出力は取得できません。

ワークフローの作成と設定

割り当てノードを祖先ノード、for-eachノードを子孫ノードとするワークフローを作成するには、次の手順を実行します。

  1. DataStudioページに移動します。

    DataWorksコンソール にログインします。 上部のナビゲーションバーで、目的のリージョンを選択します。 左側のナビゲーションペインで、[データ開発とガバナンス] > [データ開発] を選択します。 表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発に移動] をクリックします。

  2. 自動トリガーワークフローの作成を行います。

  3. for-eachノードを作成します。

    1. [スケジュールワークフロー] ペインで、新建 アイコンにポインタを移動し、[ノードの作成] > [一般] > [for-each] を選択します。

      または、[ビジネスフロー] セクションで目的のワークフローを見つけ、ワークフローを右クリックして、[ノードの作成] > [一般] > [for-each] を選択することもできます。

    2. [ノードの作成] ダイアログボックスで、名前やパスなどのパラメータを設定します。

    3. [確認] をクリックします。

  4. 割り当てノードを作成します。

    1. ワークフローをダブルクリックして、ワークフローの設定タブに移動します。 [+ ノードの作成] をクリックし、[一般] セクションの [割り当てノード] を右側のキャンバスにドラッグします。

      割り当てノードについては、割り当てノードの設定をご参照ください。赋值

    2. [ノードの作成] ダイアログボックスで、[名前] パラメータと [パス] パラメータを設定します。 デフォルトでは、割り当てノードは現在のワークフローに配置されます。

    3. [確認] をクリックします。

  5. 有向線をドラッグして、割り当てノードをfor-eachノードの祖先ノードとして設定します。

    依赖

割り当てノードの設定

  1. 作成したワークフローの設定タブで、作成した割り当てノードの名前をダブルクリックします。 割り当てノードの設定タブが表示されます。

  2. [言語] ドロップダウンリストから [SHELL] を選択します。

  3. コードエディタに次のステートメントを入力します。

    echo 'this is name,ok';
  4. 右側のナビゲーションペインで、[プロパティ] タブをクリックします。 [入力パラメータと出力パラメータ] セクションの [出力パラメータ] テーブルで、outputsパラメータに関する情報を表示します。 outputsパラメータは、割り当てノードのデフォルトの出力パラメータです。

    outputs

  5. トップツールバーの 保存 アイコンをクリックして、割り当てノードを保存します。

  6. トップツールバーの 提交 アイコンをクリックして、割り当てノードをコミットします。

    [送信] ダイアログボックスで、[変更の説明] パラメータを設定します。 次に、ビジネス要件に基づいて、ノードのコミット後にノードコードを確認するかどうかを決定します。

    重要
    • ノードをコミットする前に、[プロパティ] タブで [再実行] パラメータと [親ノード] パラメータを設定する必要があります。

    • コードレビュー機能を使用して、ノードのコード品質を確保し、無効なノードコードによって発生するノード実行エラーを防ぐことができます。 コードレビュー機能を有効にすると、コミットされたノードコードは、コードレビューに合格した後でのみデプロイできます。 詳細については、コードレビューをご参照ください。

    使用しているワークスペースが標準モードの場合、ノードのコミット後に、ノード設定タブの右上隅にある [デプロイ] をクリックして、実行環境にノードをデプロイする必要があります。 詳細については、ノードのデプロイをご参照ください。

for-eachノードの設定

  1. 作成したfor-eachノードをダブルクリックします。 for-eachノードの設定タブが表示されます。 デフォルトでは、開始ノード、Shellノード、終了ノードがタブに表示されます。

    ビジネス要件に基づいて、Shellノードを別のノードに置き換えることができます。

    • Shellノードを使用する場合は、Shellノードを直接設定できます。

    • 別のタイプのノードを使用する場合は、デフォルトの Shell ノードを削除し、必要なタイプのノードを作成します。

    この例では、Shellノードを使用します。

  2. Shellノードを設定します。

    1. Shellノードをダブルクリックします。 Shellノードの設定タブが表示されます。

    2. コードエディタに次のコードを入力します。

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

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

      • Shellノードのコードを変更した後、変更を保存します。 ノードをコミットするときに、変更を保存するように促すメッセージは表示されません。 変更を保存しないと、コードを最新バージョンにタイムリーに更新できません。

      for-eachノードは、次の環境変数をサポートしています。

      • ${dag.foreach.current}: 現在のデータエントリ。

      • ${dag.loopDataArray}: 入力データセット。

      • ${dag.offset}: ループカウントのオフセット( 1 から)。

      • ${dag.loopTimes}: ループカウント。値は ${dag.offset} の値に 1 を加えた値と同じです。

      変数の詳細については、組み込み変数 および 変数値の例をご参照ください。

  3. for-eachノードのスケジューリングプロパティを設定します。

    1. for-eachノードの設定タブで、右側のナビゲーションペインの [プロパティ] タブをクリックします。

    2. [入力パラメータと出力パラメータ] セクションの [入力パラメータ] テーブルでloopDataArrayパラメータを見つけ、[アクション] 列の [変更] をクリックします。 loopDataArrayパラメータは、for-eachノードのデフォルトの入力パラメータです。

    3. [値のソース] 列のドロップダウンリストから割り当てノードのoutputsパラメータを選択し、[保存] をクリックします。

      outputs

      説明

      割り当てノードをfor-eachノードの祖先ノードとして設定した後、[プロパティ] タブでfor-eachノードの入力パラメータを指定する必要があります。 入力パラメータを指定しないと、for-eachノードをコミットするときにエラーが発生します。

  4. トップツールバーの 保存 アイコンをクリックして、for-eachノードを保存します。

  5. トップツールバーの 提交 アイコンをクリックして、for-eachノードをコミットします。

    重要

    ノードをコミットする前に、[プロパティ] タブで [再実行] パラメータと [親ノード] パラメータを設定する必要があります。

    [コミット] ダイアログボックスで、コミットする内部ノードを選択し、[説明] フィールドにコメントを入力して、[コミット] をクリックします。

    使用しているワークスペースが標準モードの場合、ノードのコミット後に、ノード設定タブの右上隅にある [デプロイ] をクリックしてノードをデプロイする必要があります。 詳細については、ノードのデプロイをご参照ください。

for-eachノードのテストとテスト結果の表示

  1. ノード設定タブで、右上隅の [オペレーションセンター] をクリックして、[オペレーションセンター] に移動します。

  2. [オペレーションセンター] ページの左側のナビゲーションペインで、[サイクルタスクのメンテナンス] > [サイクルタスク] を選択します。

  3. [サイクルタスク] ページで、for-eachノードを見つけ、[アクション] 列の [DAG] をクリックして、for-eachノードの有向非巡回グラフ( DAG )を開きます。 for-eachノードの DAG で、割り当てノードを右クリックし、[実行] > [遡及的に現在ノードと子孫ノード] を選択します。 [パッチデータ] ダイアログボックスで、パラメータを設定し、[ OK ] をクリックします。

    补数据

  4. [パッチデータ] ページを更新します。 データバックフィルインスタンスが実行された後、インスタンスの [アクション] 列の [DAG] をクリックします。

  5. 表示される DAG で、割り当てノードを右クリックし、[実行ログの表示] を選択して、操作ログを表示します。

    赋值节点结果

  6. [パッチデータ] ページで、DAG のfor-eachノードを右クリックし、[内部ノードの表示] を選択します。

    内部节点

  7. 表示されるページで、中央ペインの [ループ 1 ] をクリックし、DAG のShellノードを右クリックして、[実行ログの表示] を選択します。

    运行日志

    表示されるページで、最初のループのShellノードの操作ログを表示します。1

  8. 同じ方法を使用して、2 番目のループのShellノードの操作ログを表示します。

    2