ノードコンテキストパラメーターは、DataWorks におけるタスクノード間で動的データを渡すための中核となるメカニズムです。上流ノード (プロデューサー) は、その出力値を 1 つ以上の下流ノードに渡すことができます。下流ノードは、これらの値をコード内で参照し、上流ノードの出力に基づいてその動作を動的に調整できます。これにより、ワークフローの柔軟性と自動化が大幅に向上します。
仕組み
ノードコンテキストパラメーターは、上流ノード (プロデューサー) で出力パラメーターを定義し、そのパラメーターを下流ノード (コンシューマー) で参照することによって値を渡します。
上流ノード (プロデューサー):値を生成し、それを出力パラメーターとして提供します。値を提供するには、2 つの方法があります。
定数または変数を渡す:上流ノードの [ノード出力パラメーター] セクションでパラメーターを定義し、値を代入します。値は、
'abc'のような定数、または${status}のようなシステムコンテキスト変数を指定できます。代入結果を渡す: システムは、
SELECT 'table_A';のようなノードのコードの最後のクエリ結果を取得してoutputsという名前の組み込み出力パラメーターに代入し、このパラメーターの値を下流ノードに渡します。パラメーター値は、コードの実行結果によって決まります。代入ノードおよび一部の SQL ノードがこの方法をサポートしています。
下流ノード (コンシューマー):上流ノードから提供された値を受け取り、使用します。
入力パラメーターの設定:下流ノードの [ノード入力パラメーター] セクションで入力パラメーターを追加し、その値のソースを上流ノードの出力パラメーターに設定します。
スケジューリング依存関係の確立:入力パラメーターを設定すると、システムは自動的に下流ノードから上流ノードへの同一周期スケジューリング依存関係を作成します。
コードでの参照:下流ノードのコードで、
${InputParameterName}形式を使用して値を参照します。たとえば、上流ノードが値table_Aを渡した場合、下流のコードSELECT * FROM ${input};は実行時にSELECT * FROM table_A;になります。
制限
エディション:一部のノードは、クエリ結果を渡すために使用される [代入パラメーターの追加] 機能をサポートしています。この機能を使用するには、DataWorks Standard Edition またはそれ以降のエディションが必要です。
ノードタイプ:代入パラメーターの追加 機能をサポートするノードタイプは、EMR Hive、EMR Spark SQL、ODPS Script、Hologres SQL、AnalyticDB for PostgreSQL、ClickHouse SQL、およびデータベースノードです。
手順
ステップ 1:上流ノードでの出力パラメーターの設定
DataWorks コンソールにログインします。対象のリージョンに切り替えます。左側のナビゲーションペインで、 をクリックします。ドロップダウンリストから目的のワークスペースを選択し、[Go to DataStudio] をクリックします。
[データ開発] ペインで、対象の上流ノードをダブルクリックしてエディターページを開きます。
キャンバスの右側で、スケジューリング設定 をクリックします。ノードコンテキストパラメーター セクションで、必要に応じて [ノード出力パラメーター] を設定する方法を選択します。
方法 1:定数または変数を渡す
[このノードの出力パラメーター] セクションで、[パラメーターの追加] をクリックします。
パラメーター情報を設定します。
パラメーター
説明
パラメーター名
出力パラメーターのカスタム名。例:
my_param。パラメーター値
パラメーターの値。次のタイプを使用できます:
定数:
helloなど。システムコンテキスト変数:
${status}など。スケジューリングパラメーター:
$bizdate、またはカスタムスケジューリングパラメーター${...}および$[...]など。
方法 2:代入結果を渡す
代入ノードを使用
代入ノード (上流ノード) は、MaxCompute SQL、Python 2、および Shell に対応しています。最後のクエリまたは出力の結果をノードの出力パラメーター (
outputs) に自動的に代入します。下流ノードは、このパラメーターを参照して代入ノードの出力結果を取得できます。詳細については、「代入ノード」をご参照ください。代入パラメーターを使用
代入パラメーターに対応しているノードでは、次の手順を実行します:
[ノード出力パラメーター] セクションで、[代入パラメーターの追加] をクリックします。
システムは、
outputsという名前の出力パラメーターを自動的に追加します。このパラメーターを設定する必要はありません。値は、ノードのコードの最後のクエリ結果になります。[保存] をクリックします。
説明代入パラメーターの追加 をクリックすると、代入パラメーターはこのノードのクエリ結果を、それを参照する任意の下流ノードに渡します。結果が空の場合、このノードの実行は続行されますが、パラメーターを参照する下流ノードの実行が失敗する可能性があります。
具体的な例については、「代入ノード」の MaxCompute 言語の例をご参照ください。
出力パラメーターは削除できます。出力パラメーターを削除する前に、それを参照している下流ノードがないことを確認してください。そうしないと、下流タスクの実行に影響を及ぼす可能性があります。
ステップ 2:下流ノードでのパラメーター設定
入力パラメーターの設定
下流ノードのエディターページを開きます。 設定ページに移動します。[ノード入力パラメーター] セクションで、[パラメーターの追加] をクリックします。
入力パラメーターを設定します。このパラメーターの [値のソース] として上流ノードの出力パラメーターを選択し、このノードの [パラメーター名] を定義します。
ツールバーで [保存] をクリックしてパラメーターを保存します。
依存関係の確立
上流ノードの出力パラメーターを関連付けると、システムはそのノードへの同一周期スケジューリング依存関係を自動的に追加します。手動で設定する必要はありません。
パラメーターの参照
下流ノードのコードで、
${InputParameterName}形式を使用してパラメーターを参照します。次の例は、Shell ノードで入力パラメーター
paramを参照する方法を示しています:echo "The value from upnode is ${param}"上流ノードが代入結果を下流ノードに渡す場合、パラメーター値は通常、2 次元配列またはカンマで区切られた 1 次元配列です。配列内の値には、次のようにアクセスできます:
上流ノードが SQL ノードの場合 (2次元配列):
行:
${param[i]}。セル:
${param[i][j]}。
上流ノードが Python/Shell ノードの場合 (1次元配列):
行:${param[i]}。
すべてのインデックスは 0 から始まります。
ステップ 3:デバッグと実行
コンテキストパラメーターは、ワークフローによってトリガーされる定期インスタンスでのみ、スケジュールされた順序で渡されます。下流ノードを単独で実行すると、上流のパラメーターを取得できず、タスクが失敗します。デバッグする際は、上流ノードから開始し、ビジネスフローの順序でノードを実行する必要があります。
ワークフローに戻ります。ワークフロー上部のツールバーで 実行 をクリックするか、下流ノードを右クリックして このノードまで実行 を選択します。
生成された有向非巡回グラフ (DAG) インスタンスで、ノードをクリックして操作ログを表示し、結果が期待どおりであるかどうかを確認します。
システムコンテキスト変数
システム変数 | 説明 |
${projectId} | プロジェクト ID。 |
${projectName} | MaxCompute プロジェクト名。 |
${nodeId} | ノード ID。 |
${gmtdate} | インスタンスのスケジュール時刻が含まれる日の 00:00:00。形式は |
${taskId} | タスクインスタンス ID。 |
${seq} | タスクインスタンスの序数。同じ日に同じノードのインスタンスにおける順序を示します。 |
${cyctime} | インスタンスのスケジューリング時刻。 |
${status} | インスタンスのステータス:成功 (SUCCESS) または失敗 (FAILURE)。 |
${bizdate} | データタイムスタンプ。 |
${finishTime} | インスタンスの終了時刻。 |
${taskType} | インスタンスの実行タイプ:通常 (NORMAL)、手動 (MANUAL)、一時停止 (PAUSE)、ドライラン (SKIP)、未選択 (UNCHOOSE)、またはサイクルスキップ (SKIP_CYCLE)。 |
${nodeName} | ノード名。 |