DataWorks は、代入ノードからの結果セットを反復処理するための for-each ノードを提供します。for-each ノード内のワークフローをカスタマイズすることもできます。本トピックでは、for-each ノードが代入ノードの出力を 2 回反復処理し、各反復で現在のループ回数を出力する例を用いて、そのロジックと設定を説明します。
前提条件
ノードを設定する前に、エラーを防ぐためにそのロジックを理解していることを確認してください。詳細については、「for-each ノードの仕組み」をご参照ください。
操作手順
for-each ノードは、通常、代入ノードと一緒に使用されます。一般的な手順は以下の通りです。

-
ノードの依存関係の設定
for-each ノードは、代入ノードに依存させる必要があります。設定の詳細については、「ワークフローの作成と設定」をご参照ください。
-
結果セットの受け渡し
代入ノードの組み込みの[ノードコンテキスト] 出力パラメーター outputs を、for-each ノードの[ノードコンテキスト] 入力パラメーターとして使用する必要があります。設定の詳細については、「代入ノードの設定」をご参照ください。
-
内部ノードでのパラメーターの取得
ビジネス要件に基づいて for-each ノードの内部ワークフローをカスタマイズします。内部ノードでは、組み込み変数を使用してパラメーター値を取得し、ループタスクを実行します。組み込み変数の詳細については、「組み込み変数」をご参照ください。設定の詳細については、「for-each ノードの設定」をご参照ください。
ワークフローの作成と設定
代入ノードを上流ノード、for-each ノードを下流ノードとするワークフローを作成します。
DataStudioページに移動します。
DataWorks コンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。 表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[DataStudioに移動] をクリックします。
-
定期ワークフローを作成します。
-
for-each ノードを作成します。
-
アイコンにカーソルを合わせ、 をクリックします。または、対象のワークフローを見つけて、汎用 を右クリックし、 を選択します。
-
ノードの作成 ダイアログボックスで、ノード名とパスを設定します。
-
確認 をクリックします。
-
-
代入ノードを作成します。
-
ワークフローをダブルクリックして設定ページを開きます。[新しいノード] をクリックし、 を右側のキャンバスにドラッグします。
代入ノードの詳細については、「代入ノード」をご参照ください。
-
ノードの作成 ダイアログボックスで、ノード名とパスを設定します。デフォルトでは、ノードは現在のワークフローディレクトリに作成されます。
-
確認 をクリックします。
-
-
代入ノードから for-each ノードに線をドラッグして、依存関係を設定します。
代入ノードの設定
-
代入ノードをダブルクリックして、設定ページを開きます。
-
[言語] ドロップダウンリストから、シェル を選択します。
-
ノード設定ページで、次のステートメントを入力します:
echo 'this is name,ok'; -
右側のペインで スケジューリング設定 をクリックします。。
-
ツールバーの
[保存] アイコンをクリックします。 -
ツールバーの
[コミット] アイコンをクリックします。コミット ダイアログボックスで、変更内容 を入力し、コードレビューを要求するかどうかを選択します。
重要-
ノードをコミットする前に、ノードの[再実行プロパティ]と[依存する先祖ノード] プロパティを設定する必要があります。
-
コードレビューは、コードの品質を管理し、誤ったコードがレビューなしで本番環境にデプロイされることによるエラーを防ぐことができます。コードレビューを有効にすると、ノードはレビュー担当者が承認した後にのみデプロイできます。詳細については、「コードレビュー」をご参照ください。
ワークスペースが標準モードの場合、コミット後にノード設定ページの右上隅にある [デプロイ] をクリックして、タスクを本番環境にデプロイする必要があります。詳細については、「タスクのデプロイ」をご参照ください。
-
for-each ノードの設定
-
for-each ノードをダブルクリックして設定ページを開きます。デフォルトでは、開始ノード、Shell ノード、および終了ノードが含まれています。
Shell ノードを別のノードタイプに置き換えることができます。
-
Shell ノードを使用する場合は、直接設定できます。
-
別のノードタイプを使用するには、まずデフォルトの Shell ノードを削除し、次に必要なノードを作成します。
この例では Shell ノードを使用します。
-
-
Shell ノードを編集します:
-
Shell ノードをダブルクリックして、設定ページを開きます。
-
次のコードを入力します:
echo ${dag.loopTimes} # 現在のループ回数を出力します。説明-
開始ノードと終了ノードのロジックは固定されており、編集できません。
-
Shell ノードのコードを変更した後は、変更を保存する必要があります。DataWorks はノードをコミットする際に変更を保存するよう促すプロンプトは表示されません。保存しない場合、変更は有効になりません。
for-each ノードは、次の 4 つの組み込み変数をサポートしています:
-
${dag.foreach.current}:現在反復処理されているデータ行。
-
${dag.loopDataArray}:入力データセット。
-
${dag.offset}:オフセット。
-
${dag.loopTimes}:現在のループ回数。値は ${dag.offset} + 1 です。
詳細については、「組み込み変数」および「組み込み変数の値の例」をご参照ください。
-
-
-
for-each ノードを設定します:
-
for-each ノードの設定ページで、右側のペインにある スケジューリング設定 をクリックします。
-
で、デフォルトのパラメーター名 loopDataArray の横にある 編集 をクリックします。
-
値のソース ドロップダウンリストから、上流の代入ノードの
outputsパラメーターを選択し、保存 をクリックします。説明[プロパティ] タブで上流の代入ノードへの依存関係を追加した後、その値ソースを手動で指定する必要があります。そうしないと、ノードをコミットするときにエラーが発生します。
-
-
ツールバーの
[保存] アイコンをクリックして、for-each ノードを保存します。 -
ツールバーの
[コミット] アイコンをクリックします。重要ノードをコミットする前に、ノードの[再実行プロパティ]と[依存する先祖ノード] プロパティを設定する必要があります。
コミット ダイアログボックスで、コミットするノードを選択し、OK をクリックします。
ワークスペースが標準モードの場合、ノードが正常にコミットされた後、右上隅にある 発行 をクリックします。詳細については、「タスクのデプロイ」をご参照ください。
ノードのテストと結果の表示
-
ページの右上隅にある 運用保守 をクリックして、[オペレーションセンター]に移動します。
-
左側メニューで、 をクリックします。
-
ノードを見つけます。右側の DAG で、代入ノードを右クリックし、 を選択します。
-
データバックフィルインスタンス ページを更新します。データバックフィルインスタンスが正常に実行された後、インスタンスの横にある [DAG を表示] をクリックします。
-
代入ノードを右クリックし、運用ログの表示 を選択して結果を確認します:
ランタイムログには、代入ノードが正常に実行されたことが示されます。Shell の出力は
this is name,okで、結果は["this is name", "ok"](2 つのデータレコード) に解析されます。for-each ノードは、これら 2 つのレコードを反復処理します。 -
データバックフィルインスタンス ページで、for-each ノードを右クリックし、内部ノードの表示 を選択します。
-
内部ノードページで、左側の [ループ 1] をクリックします。次に、Shell ノードを右クリックし、運用ログの表示 を選択します:
ランタイムログページで、最初の反復の Shell ノードのログを確認します。Shell の出力は
1で、これは現在のループ回数 (${dag.loopTimes}の値) です。 -
同様に、2 回目の反復の Shell ノードのログを確認します:
Shell の出力は
2で、これは 2 回目の反復のループ回数 (${dag.loopTimes}の値が2) です。これにより、for-each ノードが代入の結果セット内の 2 つのデータレコードを正常に反復処理したことを確認できます。