同一周期のスケジューリング依存関係 では、ノードは実行前に、現在の周期で上流ノードインスタンスが完了するのを待つ必要があります。これは、ノードが同日に上流ノードによって生成されたデータを使用する場合に適しています。DataWorks では、タスクが期待どおりにスケジューリングされることを確認できるよう、これらの依存関係を設定およびプレビューするための複数の方法が提供されています。
仕組み
スケジューリング依存関係は、ノード出力 と ノード入力 を一致させることで確立されます。上流ノードの出力名が下流ノードの入力として追加され、下流ノードは上流ノードが成功した後にのみ実行されます。開始する前に、テーブルリネージに基づいて依存関係のターゲットとタイプを特定します。詳細については、「スケジューリング依存関係設定ガイド」をご参照ください。
ノード出力
ノード出力は、現在のノードの出力名 とも呼ばれる、他のノードが依存関係を確立するために参照する論理的な識別子です。ノードが生成する実際のデータを表すものではありません。
DataWorks は、各ノードに対して 2 つの出力名を自動的に生成します。
-
projectName.randomNumber_out:この出力はグローバルに一意であり、変更または削除できません。
-
projectName.nodeName:この出力にはノード名が含まれており、変更可能です。ノードの名前を変更しても、この出力名は影響を受けません。
出力を手動で追加したり、DataWorks にコードから入力と出力を自動解析させたりすることもできます。自動解析のサポートはノードタイプによって異なります。詳細については、「自動解析結果の比較」をご参照ください。
ノード入力
ノード入力は、現在のノードが依存する 祖先ノード を指定します。依存関係は、祖先ノードの 出力名 (推奨)、ノード名、または ノード ID を使用して指定できます。
ノード ID は、祖先ノードが本番環境にサブミットされた後にのみ生成されます。
設定のガイドライン
依存関係を効率的に設定するために、自動解析 の使用を推奨します。自動解析を使用する場合は、次のガイドラインに従ってください。
-
ノード作成:各ノードには、その出力テーブルにちなんだ名前を付けます。
-
コード開発:複数のノードが同じテーブルにデータを書き込まないようにします。
-
依存関係の設定:ノードが生成するテーブルをそのノードの出力として設定します。
エントリポイントと方法
Data Studio ノードの編集ページに移動し、右側のナビゲーションペインで [スケジューリング設定] をクリックし、スケジュールの依存関係 セクションでノードのスケジューリング依存関係を設定します。
-
[依存する先祖ノード]:現在のタスクが依存する祖先ノードを指定します。
-
[このノードの出力名]:他のタスクがこのノードへの依存関係を確立できる出力名を定義します。
-
During code editing, dependencies are configured based on table lineage by default. DataWorks automatically checks whether the dependencies match the data lineage upon submission. You can choose whether to enable the automatic parsing before submission feature. For more information, see Configure automatic parsing before submission.
-
If the current node needs to depend on data produced by an upstream node yesterday, or if an hourly/minutely task needs to depend on its own instance from the previous cycle, configure cross-cycle dependencies.
-
If the current node and its upstream node have different scheduling frequencies, such as a daily task depending on an hourly task or depending on hourly tasks with different frequencies, see Configure dependencies between tasks with different scheduling frequencies.
依存関係は 3 つの方法で設定できます。3 つの方法すべてで同じ基盤となるメカニズムが使用されます。
コードからテーブルリネージを解析してノードの依存関係を設定
自動解析は、ノードのコード内のテーブルリネージを分析し、それに応じてノードの出力名と上流の依存関係を設定します。ノードが書き込むテーブルは projectname.tablename 形式でノード出力として追加され、ノードが読み取るテーブルはノード入力として追加されます。
たとえば、ノードがテーブルに対して SELECT を使用すると、そのテーブルはノードの上流依存関係として自動的に解析されます。ノードがテーブルに対して INSERT を使用すると、そのテーブルはノードの出力として自動的に解析されます。各ノードタイプの自動解析でサポートされるキーワードについては、「各ノードタイプの自動解析でサポートされるキーワード」をご参照ください。
-
依存関係の設定
自動解析は、[コードから入力と出力を解析] と コミット前の自動解析 の 2 つの方法をサポートします。どちらの方法も同じ原則で動作します。コミット前の自動解析は、コードをコミットするときに入力と出力を自動的に解析し、依存関係を設定するように促します。
たとえば、ODPS ノード mc2 は、ノード mc1 の出力テーブル
dws_user_info_all_diに依存します。ノード mc2 のコードは次のとおりです。INSERT OVERWRITE TABLE ads_user_info_1d PARTITION (dt='${workflow.var}') SELECT uid , MAX(region) , MAX(device) , COUNT(0) AS pv , MAX(gender) , MAX(age_range) , MAX(zodiac) FROM dws_user_info_all_di WHERE dt = '${workflow.var}' GROUP BY uid;[コードから入力と出力を解析] をクリックすると、このノードの入力は
dws_user_info_all_diテーブルとして解析され、出力テーブル名と上流ノードの名前が自動的に照合されます。上流ノードの出力名
上流ノードの出力テーブル名
上流ノード名
ノード ID
ワークスペース
所有者
スケジュール
方法
最近の実行ステータス
操作
yunwan_lingyi.dws_user_info_all_di
yunwan_lingyi.dws_user_info_all_di
mc1
-
テストワークスペース
lingyi01_testcloud_com
日
コード解析
データなし
削除
同時に、このノードの出力は
ads_user_info_1dテーブルとして解析されます。解析結果は次のとおりです。出力名
出力テーブル名
下流ノード名
所有者
方法
影響を受ける下流ノードのベースライン
操作
old_ide.505487297_out
-
-
-
システムによる追加
-
削除
old_ide.mc2
-
-
-
手動で追加
-
削除
yunwan_lingyi.ads_user_info_1d
yunwan_lingyi.ads_user_info_1d
-
-
コード解析
-
削除
これで、ノード mc2 とノード mc1 の依存関係が設定されました。
-
コード解析による依存関係の変更
解析された依存関係が期待と一致しない場合や、サポートされていないシナリオ (定期的なスケジューリングでデータが生成されないテーブル) で手動調整が必要な場合は、解析された依存関係を次のように変更します。
操作
説明
解析結果の手動削除
上流ノードの依存関係リストから予期しない入力を削除し、削除操作を実行して再解析します。削除後、次回の解析時に依存関係が再追加されるのを防ぐため、対応するコメントがコードに自動的に追加されます。
--@exclude_input=Remove input --@exclude_output=Remove output入力と出力の手動追加
コードエディターでテーブル名を右クリックし、[入力の追加] または [出力の追加] を選択します。入力または出力が追加されると、対応するコメントがコードに自動的に追加されます。
--@extra_output=Add output --@extra_input=Add inputまたは、「スケジュール設定パネルから上流ノードの依存関係を手動で追加」または「ワークフローパネルで接続をドラッグしてノードの依存関係を設定」で説明されている方法を使用して依存関係を追加することもできます。
重要DataWorks では、既存の下流依存関係を持つノード出力を直接削除することはできません。これを行うと、下流タスクの実行エラーやデータ取得エラーの原因となります。まず、下流のビジネスロジックを調整し、下流ノードから上流の依存関係を削除してから、上流ノードからノード出力を削除します。
-
自動解析から除外されるシナリオ
ワークスペースのテーブル管理 で定義された、固定の命名形式を持つ一時テーブル (たとえば、
t_で始まるテーブル) は、DataWorks ではノード出力または上流依存関係として自動的に解析されません。 -
自動解析に関する考慮事項
自動解析を使用する場合、ノード出力が現在のリージョン内で一意であることを確認してください。次の点に注意してください。
-
ノード作成:各ノードには、ノードと同じ名前のデフォルト出力があります。同じワークスペースに同じ名前のノードが存在する場合、どちらか一方のノード出力を手動で変更する必要があります。
-
コード開発:自動解析は、ノードの出力テーブルをノード出力として使用します。同じワークスペース内の 2 つのスケジュールされたノードが同じテーブルにデータを挿入する場合、自動解析はどちらかのノードでエラーを引き起こします。詳細については、「複数のノードが同じテーブルにデータを書き込むと、自動解析が重複したノード出力名を報告する」をご参照ください。
-
依存関係の設定:バッチ同期タスクの出力テーブルを処理するために SQL タスクを使用する場合、リネージベースの自動解析を通じて SQL タスクからバッチ同期タスクへの依存関係を迅速に設定できるようにするには、バッチ同期ノードの出力テーブルをノード出力として手動で設定するか、バッチ同期タスクノードに出力テーブルにちなんだ名前を付ける必要があります (プラットフォームはノードと同じ名前のノード出力を自動的に作成します)。そうしないと、下流の SQL ノードをサブミットするときに、The parent node output name ${projectname.tablename} that the current node depends on does not exist. The current node cannot be submitted. Make sure that the parent node with this output name has been submitted というエラーが発生する場合があります。
-
スケジュール設定パネルから上流ノードの依存関係を手動で追加
[スケジューリング設定] > スケジュールの依存関係 > 依存する先祖ノード セクションで、ターゲットノードのノード出力、ノード名、またはノード ID を入力して、上流ノードの依存関係を追加します。ノード名は重複する可能性があるため、ノード出力の使用を推奨します。
ワークフローパネルで接続をドラッグしてノードの依存関係を設定
ワークフロー の DAG パネルで接続をドラッグして依存関係を設定すると、DataWorks は上流ノードの _out 出力を下流ノードに自動的に追加し、ノード依存関係を作成します。
ワークフローパネルから依存関係の接続が削除されると、対応する依存関係もノードのスケジュール設定から削除されます。
ノード出力の削除または変更による影響
ノードが生成するデータを変更したり、ノード出力を手動で変更したりする場合は、次の影響に注意してください。
-
ノード出力を削除しても、ノードによって生成されるデータに直接影響はありません。
-
ノード出力にすでに下流の依存関係がある場合、それを変更または削除すると、下流タスクに深刻な影響を与える可能性があります。
-
出力テーブルの削除:自動解析によって設定されたノード出力が出力テーブルの変更によって変わると、下流ノードはスケジューリングされない 孤立ノード になるか、データ依存関係の欠落により下流データが破損する可能性があります。
-
出力テーブルの変更:現在のノードによって生成されるテーブルを別のノードに転送する必要がある場合は、「ノードの出力テーブルを別のノードに転送する」をご参照ください。
下流依存関係を持つノード出力を削除する前に、下流タスクの所有者に通知して依存関係を調整し、タスクが孤立するのを防ぐようにしてください。
-
次のステップ:依存関係が期待どおりであることを確認
依存関係を設定した後、タスクが期待どおりに実行されるように、それらが正しいことを確認します。
-
依存関係のプレビュー:予期しない依存関係によるタスクのスケジューリング遅延を防ぐために、依存関係が正しいことを確認します。
-
サブミットチェック:ノードをサブミットするときに、依存関係の変更が期待どおりであることを確認します。
-
スケジュールされたタスクの依存関係の検証:ノードをデプロイした後、オペレーションセンター の本番スケジュールされたタスクの依存関係が期待どおりであることを確認します。スケジュールされたタスクは、本番環境におけるタスクの最新の状態を表します。スケジュールされたインスタンスのインスタンス依存関係は、インスタンスの生成方法に関連しています。
詳細については、「スケジューリング依存関係の確認」をご参照ください。
よくある質問
その他のよくある質問については、「スケジューリング依存関係」をご参照ください。
ベストプラクティス
ワークスペース間、または同じワークスペース内のワークフロー間でノードの依存関係を設定するには、「ワークスペースまたはワークフローをまたいでノードの依存関係を設定する」をご参照ください。