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

DataWorks:依存関係

最終更新日:Jul 01, 2026

このトピックでは、依存関係に関するよくある質問について説明します。

基本概念

スケジューリング依存関係とは、ノード間の上流・下流の依存関係のことです。DataWorks では、下流タスクノードは、上流タスクノードが正常に実行された後にのみ実行を開始します。

説明

依存関係が設定された後、現在のノードが実行されるための前提条件の 1 つは、現在のノードが依存する親ノードが正常に実行されること です。スケジューリング依存関係の詳細については、「スケジューリング依存関係」をご参照ください。

スケジューリング依存関係を設定する理由

スケジューリング依存関係が設定されると、スケジューリングシステムは、スケジュールされたタスクが実行時に正しいデータを取得することを保証します。現在のノードが依存する上流ノードが正常に実行された後、DataWorks はノードの実行ステータスに基づいて、上流テーブルの最新データが生成されたことを識別します。その後、下流ノードがデータを取得します。これにより、上流テーブルのデータ生成が完了する前に下流ノードがデータを取得するという問題を防ぐことができます。

DataWorks でスケジューリング依存関係を設定する方法

DataWorks では、上流ノードの出力が下流ノードの入力として機能し、ノード依存関係を形成します。

説明
  • SQL タスクは、次の方法でノードの入力と出力を自動的に設定します。

    • テーブルから select を実行すると、システムはそのテーブルを生成するノードを現在のノードの上流依存関係として自動的に解析します。

    • テーブルに insert を実行するか、テーブルを create すると、システムはそのテーブルを現在のノードの出力として自動的に解析します。

  • Data Integration タスクの場合、出力テーブルを projectname.tablename の形式でノードの出力として手動で追加する必要があります。これにより、下流ノードが同期された出力テーブルを処理する際に、自動解析機能が依存関係を解決できるようになります。

  • 一意の出力は一意のノードを特定してノード依存関係を形成するために必要であるため、ノードの出力 (projectname.tablename) は一意である必要があります。

スケジューリング依存関係がサポートされないシナリオ

DataWorks のスケジューリング依存関係は、主にスケジュールされたノードによって定期的に更新されるテーブルのデータが、下流ノードによって正しく利用されることを保証するために設計されています。そのため、DataWorks のスケジュールされたノードによって更新されないテーブルは、プラットフォームでは監視できません。

テーブルが定期的なスケジューリングによって生成されず、ノードが select を使用してそのようなテーブルからデータをクエリする場合、select ステートメントから自動的に生成された上流ノード依存関係を手動で削除する必要があります。定期的なスケジューリングによって生成されないテーブルには、次のようなものがあります。

  • ローカルソースから DataWorks にアップロードされたテーブル

  • ディメンションテーブル

  • DataWorks のスケジューリングによって生成されないテーブル

  • 手動タスクによって生成されるテーブル

不要なテーブル依存関係を削除する方法

コード内のテーブル名を右クリックして [出力の削除] を選択し、自動解析を再実行します。コードエディターの最初の行にアノテーション --@exclude_input=table_name を追加して、指定した入力依存関係 (たとえば --@exclude_input=xc_dw_user_info_all_d) を除外します。次に、エディター内を右クリックして [出力の削除] を選択し、不要な出力依存関係を削除します。右側のスケジュール設定パネルにある [入力と出力の解析] ボタンをクリックして、スケジューリング依存関係を再解析します。スケジューリング依存関係テーブルでは、現在の親ノードの出力名、ソース (手動で追加または自動解析)、およびその他の情報を表示できます。また、操作列で [削除] をクリックして、対応する依存関係を削除することもできます。

送信エラー: 現在のノードが依存する親ノードの出力が存在しません

ノードを送信すると、現在のノードが依存する親ノードの出力が存在しないというエラーが表示されます。考えられる原因と解決策については、「親ノードの出力が存在しないエラーのトラブルシューティング」をご参照ください。

送信プロンプト: 入力と出力がコードリネージ分析と一致しません

ノードを送信すると、入力と出力がコードリネージ分析と一致しないというプロンプトが表示されます。考えられる原因と解決策については、「入力/出力とコードリネージ分析の不一致のトラブルシューティング」をご参照ください。

自動解析された親ノードで「依存する親ノードの出力 (テーブル) が存在しません」と報告される理由

Data Studio でノードを送信すると、ノード依存関係設定パネルの上部にエラーが表示されます。依存する親ノードの出力 workshop_yanshi.tb_2 が存在しません。このノードを送信できません。最初に親ノードを送信してください。この依存関係は、SQL コードの FROM tb_2 ステートメントからシステムによって自動的に生成されます。

このエラーはテーブルが存在しないという意味ではなく、システムがテーブルデータを生成するノードを見つけられず、ノード依存関係を確立できないことを示しています。

この問題は、次の 2 つの原因が考えられます:

  • 上流ノードが送信されていません。送信してから再試行してください。

  • 上流ノードは送信されていますが、その出力名が workshop_yanshi.tb_2 ではありません。

説明
  • tb_2 が同期タスクによって生成されたテーブルである場合、tb_2 テーブルを生成する同期タスクノードの出力セクションに、projectname.tablename の形式でノードの出力として手動で追加する必要があります。詳細については、「スケジューリング依存関係の設定」をご参照ください。

  • tb_2 が、スケジュールされたノードによって日次で更新されないテーブルの場合、コード内でテーブルを右クリックして入力を削除し、自動解析を再実行します。

スケジュールされたノードによって日次で更新されないテーブルについては、「スケジューリング依存関係がサポートされないシナリオ」をご参照ください。

ノードの出力セクションで、下流ノード名とIDが表示されるノードと、空白で編集できないノードがある理由

ノード依存関係は、下流ノードが上流ノードの出力を参照することによって確立されます。現在のノードに下流の子ノードがない場合、このセクションは空白になります。このノードの下流に子ノードが設定されると、コンテンツが自動的に解析されて表示されます。

不要な依存関係を削除する方法

コード内のテーブルを右クリックして入力を削除し、再度自動解析を選択して不要な上流の依存関係ノードを除外します。

基本概念

DataWorks のスケジューリングシステムでは、効果的なデータ生成と取得を保証するために、ノード間の上流・下流依存関係が設定されます。依存関係を設定するかどうかは、データに強い相関関係があるかどうかに基づいて判断できます。詳細については、「スケジューリング依存関係の設定」をご参照ください。

基本概念

ノードの出力名は、ノード間の依存関係を確立するために使用されます。たとえば、ノード A の出力名が ABC で、ノード B が ABC を入力として使用する場合、ノード A とノード B の間に上流・下流関係が確立されます。

ノードに複数の出力名を設定できますか

はい。ノードの出力は、現在のノードの識別子として機能します。下流ノードが現在のノードに依存する必要がある場合、このノードの任意の出力名を下流ノードの親ノードの出力名として参照して、依存関係を確立できます。

同じテーブルにデータを書き込む複数のノードで、同じ出力名を使用できますか

いいえ。ノードの出力名は、ノードやテーブルと同様に、テナントレベルで一意である必要があります。これにより、自動解析が一意の出力に基づいて一意のノードを特定し、ノード依存関係を確立できるようになります。お使いのシナリオで複数のノードが同じテーブルのデータを生成する場合、このテーブルを自動解析するときに下流ノードがどのノードに依存すべきかを判断する必要があります (下流ノードによる正しいデータ取得を保証するため、テーブルに最後にデータを書き込むノード)。また、他のノードの出力を変更して一意性を確保する必要があります。

同じワークスペース内の 2 つのスケジュールされたノードが同じテーブルにデータを挿入すると、自動解析によりいずれかのノードで次のエラーが発生します。ワークスペース ${projectname} のノード ${nodename1} の出力名は、ワークスペース ${projectname} のノード ${nodename2} の出力名と同じです: ${node_outputname}。複数のノードで同じ出力名を使用することはできません

自動解析で中間テーブルが解析されないようにする方法

SQL コードで中間テーブル名を選択して右クリックし、Delete Input または Delete Output を選択してから、再度入出力の自動解析を実行します。

ワークフロー内の最上流ノードの親ノードを設定する方法

ノードがワークフローの開始ノードである場合、仮想ノードをワークフローの開始ノードとして追加できます。仮想ノードの上流は、ワークスペースのルートノードに設定できます。仮想ノードの使用方法の詳細については、「仮想ノードの使用」をご参照ください。

ノード A で上流ノードの出力名を検索すると、ノード B の存在しない出力名が見つかるのはなぜですか

依存関係の解析は、既に送信およびデプロイされたノードの情報に基づいています。ノード B の出力名を送信後に削除し、その変更をスケジューリングシステムに送信しない場合、ノード A から検索すると、削除されたノード B の出力名が見つかる可能性があります。

依存関係が表示されていないにもかかわらず、「子ノードが存在するためデプロイ解除できません」と報告される理由

ノードをデプロイ解除できるのは、開発環境と本番環境の両方で、他のノードがそのノードに依存していない場合のみです。これは、開発環境のオペレーションセンター本番環境のオペレーションセンターで確認できます。

オペレーションセンターで一部の依存関係の線が破線になっているのはなぜですか

破線はクロスサイクル依存関係を示します。クロスサイクル依存関係の詳細については、「クロスサイクル依存関係」をご参照ください。

基本概念

  • 現在のノードへの影響: 上流ノードの次のサイクルのインスタンスは、前のサイクルのインスタンスが正常に実行された後にのみ実行を開始します。

    シナリオ: 00:00 から開始するようにスケジュールされた時間単位タスクがあるとします。01:00 のインスタンスは、00:00 のインスタンスが正常に実行されるまで待機してから開始する必要があります。

  • 下流ノードへの影響: 下流ノードが日次スケジュールタスクであるとします。下流の日次ノードは、上流ノードの複数の時間単位インスタンスに直接依存することから、上流ノードの特定の時間単位インスタンスに直接依存することに変わります。時間単位インスタンスに自己依存関係が設定されているため、下流の日次タスクは、間接的にすべての上流時間単位インスタンスに依存することになります。

日次タスクが時間単位タスクに依存する場合、さまざまなシナリオで依存関係を設定する方法

  • シナリオ 1: 日次タスクが、当日の時間単位タスクのすべての時間単位インスタンスに依存します。

    日次タスクが時間単位タスクに直接依存する場合、当日の時間単位タスクのすべてのインスタンスに依存します。Daily task directly depends on hourly task

  • シナリオ 2: 日次タスクが、当日の特定の時間単位インスタンスに依存します。

    • 時間単位タスクの設定: 時間単位タスクに自己依存関係を設定します。時間単位タスクのスケジュール設定で、現在のノードを前のサイクルの依存関係として選択します。

    • 日次タスクの設定: 日次タスクは時間単位タスクに直接依存します。時間単位タスクを日次タスクの入力 (依存する上流ノード) として設定します。

    Setting self-dependency for an hourly scheduled task

  • シナリオ 3: 日次タスクが、前日の時間単位タスクのすべての時間単位インスタンスに依存します。

    • 日次タスクに時間単位タスクに対するクロスサイクル依存関係を設定します。日次タスクのスケジュール設定で、前のサイクルのスケジューリング依存関係を選択し、Hourly Task を選択して、時間単位タスクのノード ID を入力します。

    • 日次タスクのスケジュール設定から、時間単位タスクに対する同一サイクル依存関係を削除します。同一サイクル依存関係 (親ノード) セクションで、時間単位タスクに対する同一サイクル依存関係を削除します。

日次タスクに時間単位タスクに対するクロスサイクル依存関係を設定した場合は、同一サイクル依存関係が削除されていることを確認してください。そうしないと、日次タスクは当日のすべての時間単位インスタンスと前日のすべての時間単位インスタンスの両方に依存することになります。

日次タスクが時間単位タスクに直接依存する場合、日次タスクはいつ実行されますか

仕組み: 日次タスクが時間単位タスクに直接依存する場合、日次タスクは当日の時間単位タスクのすべてのインスタンスに依存します。日次タスクは、その日の最後の時間単位インスタンスが正常に実行された後にのみ開始されます。

シナリオ:

  • 00:00 から開始するようにスケジュールされた時間単位タスクがあり、1 時間ごとに 1 回実行されるとします。日次タスクは、24 個すべての時間単位インスタンスが完了するまで待機してから開始できます。

  • オペレーションセンターでの依存関係の表示: 日次タスクを右クリックして親ノードを表示すると、当日の時間単位タスクのすべてのインスタンスに依存していることがわかります。つまり、24 個の時間単位インスタンスに依存しています。(依存関係の線: 実線)

日次タスクが時間単位タスクに依存する場合、日次タスクをすべての時間単位インスタンスではなく特定の時間単位インスタンスに依存させる方法

仕組み: 日次タスクを当日の特定の時間単位インスタンスに依存させるには、時間単位タスクに自己依存関係を設定し、日次タスクのスケジュール時刻を特定の時間単位インスタンスに合わせて設定します。

シナリオ: 日次タスクが当日の 12:00 にスケジュールされた時間単位インスタンスに依存する必要がある場合

  • 依存関係の設定:

    • 上流の毎時タスクの自己依存を設定するには、Scheduling SettingsTime attribute セクションで、Previous-cycle Scheduling Dependency > Current Nodeを選択します。

    • 下流の日次タスクの設定: 日次タスクのスケジュール時刻を 12:00 に設定します。

  • オペレーションセンターでの依存関係の表示:

    • 日次インスタンスを右クリックして親ノードを表示すると、当日の 12:00 にスケジュールされた時間単位インスタンスに依存していることがわかります。(依存関係の線: 実線)

    • 時間単位インスタンスを右クリックして親ノードを表示すると、上流の親ノードは前の時間単位インスタンスであることがわかります。12:00 のインスタンスは 11:00 のインスタンスに依存しています。(依存関係の線: 破線。時間単位タスクにクロスサイクル依存関係が設定されており、依存項目が現在のノードに設定されているため)

日次タスクが時間単位タスクに依存する場合、日次タスクを当日ではなく前日のすべての時間単位インスタンスに依存させる方法

仕組み: 日次タスクを前日のすべての時間単位インスタンスに依存させるには、日次タスクに時間単位タスクに対するクロスサイクル依存関係を設定します。

シナリオ: 日次タスクが前日のすべての時間単位インスタンスに依存する必要がある場合。

  • 依存関係の設定:

    • 下流の日次タスク設定:時間単位のタスクに周期をまたぐ依存関係を設定するには、Scheduling SettingsTime attribute セクションで Previous-cycle Scheduling Dependency > [時間単位のタスク] を選択し、ノード ID を入力します。

    • 上流の時間単位タスクの設定: 設定は不要です。

  • オペレーションセンターでの依存関係の表示:

    下流の日次インスタンスを右クリックして親ノードを表示すると、前日の時間単位タスクのすべての時間単位インスタンスに依存していることがわかります。(依存関係の線: 破線。日次タスクに時間単位タスクに対するクロスサイクル依存関係が設定されているため)

どのような場合に、前のサイクルの依存関係を現在のノードに設定しますか

ビジネスシナリオ: 現在のノードが前のサイクルで同じノードによって生成されたデータを必要とする場合、現在のノードに自己依存関係を設定できます。これは、現在のノードの次のサイクルのインスタンスが、前のサイクルのインスタンスが完了した後にのみ実行を開始することを意味し、前のサイクルのインスタンスがまだ実行中 (データがまだ生成されていない) にデータを取得することを防ぎます。

  • 現在のノードが前のサイクルで自身が生成したデータに依存し、前のサイクルがデータを生成した時刻を確認する必要がある場合は、タスクのScheduling Settings > [Time attribute]に移動し、Previous-cycle Scheduling Dependency > [Current Node]を設定します。

  • 時間単位タスクが日次タスクに依存し、上流の日次タスクが実行を完了したときに、下流の時間単位タスクのスケジュール時刻が既に過ぎている複数のサイクルがある場合、時間単位タスクは複数のサイクルを同時に実行する可能性があります。この場合、タスクのScheduling Settings > [Time attribute]に移動し、Previous-cycle Scheduling Dependency > [Current Node]を設定します。

下流ノードが複数のタスクに同時に依存する場合、依存関係を設定する方法

下流ノードが複数のタスクに依存するように設定されている場合、すべての依存関係が必要かどうかを業務要件に基づいて判断する必要があります。テーブルデータに強い相関関係がある場合は、すべてのノードを依存関係として設定することを推奨します。ノード依存関係を設定するかどうかについては、「スケジューリング依存関係を設定する理由」をご参照ください。

たとえば、下流ノード C が日次タスク B と当日の時間単位タスク A の両方に依存しているとします。時間単位タスク A はテーブル A を出力し、日次タスク B はテーブル B を出力します。下流ノード C は、テーブル A とテーブル B の両方からデータを必要とします。

下流ノード C がテーブル A とテーブル B の両方からデータをクエリすると仮定します。時間単位のタスク A のみを Parent Nodes として設定し、日単位のタスク B を Parent Nodes として設定しない場合、下流ノード C は上流の日単位のタスク B が完了する前に実行を開始する可能性があります。これにより、日単位のタスクの出力テーブル B からデータを取得する際に失敗します。したがって、この例では、日単位のタスクと時間単位のタスクの両方を、下流ノード C の Parent Nodes として設定する必要があります。

下流ノードが上流テーブルに対して強い依存関係を持たない場合、つまり、下流ノードが上流テーブルから問題なくいつでもデータを取得できる場合 (上流ノードが最新のデータを生成していない場合でも)、ノード依存関係を設定する必要はありません。

上流タスク A が時間単位タスクで、下流タスク B がタスク A のすべてのインスタンスが完了した後に 1 回実行される日次タスクの場合、時間単位タスクが翌日まで実行される場合でも日次タスクは実行されますか。スケジューリングパラメータは影響を受けますか

日次タスク B は、当日の時間単位タスク A のすべてのインスタンスに直接依存します。日次タスク B は、当日の時間単位タスクデータを集計します。時間単位タスクが深夜 (翌日) 以降に最後のインスタンスを完了した場合でも、下流の日次タスクは実行されます。実行時刻のみが異なり、スケジューリングパラメータの置換は影響を受けません。

ノード A が毎日毎時 0 分に実行され、ノード B が 1 日に 1 回実行されます。ノード A が毎日最初に正常に実行された後にノード B を開始する方法

ノード A を設定する際、Previous-cycle Scheduling Dependency を選択し、Current Node を選択します。ノード B のスケジュール時刻を 00:00 に設定します。毎日自動スケジューリングされるインスタンスでは、ノード B のインスタンスは、00:00 に生成されたノード A の最初のインスタンスにのみ依存します。

A、B、C という 3 つのタスクがあります。A → B → C を 1 時間ごとに実行する方法 (B は A が完了した後に開始し、C は B が完了した後に開始します)

  1. 依存関係の設定: A の出力が B の入力として機能し、B の出力が C の入力として機能するように依存関係を設定します。

  2. スケジュール頻度の設定: スケジュールはノードレベルで設定されるため、3 つのノード A、B、C すべてのスケジュールを時間単位に設定する必要があります。

同じリージョン内でワークフロー間およびプロジェクト間の依存関係を設定する方法

仕組み: 上流ノードの出力が下流ノードの入力として機能し、ノード依存関係を形成します。依存させたいノード (プロジェクト間またはワークフロー間) の出力を、依存関係を必要とするノードの入力セクションに追加してください。

失敗時の再実行が設定されたタスクが失敗後に再実行されず、「Task Run Timed Out, Killed by System!!」というエラーが報告される

  • エラーメッセージ:

    対象タスクのScheduling Settings > Time attribute > RerunAllow Regardless of Running StatusまたはAllow upon Failure Onlyに設定されている場合、タスクは失敗後に再実行されず、Task Run Timed Out, Killed by System! というエラーが発生します。

  • 考えられる原因:

    このタスクのScheduling Settings > Time attributeにはTimeoutが設定されており、タスクの実行時間がタイムアウト期間を超えると、タスクは自動的に終了します。タイムアウトが原因で失敗したタスクは、再実行メカニズムをトリガーしません。

  • 解決策:

    タスクがタイムアウトにより失敗した場合、失敗時の再実行メカニズムは有効になりません。タスクを手動で再起動する必要があります。