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

DataWorks:複雑な依存関係シナリオにおけるスケジューリング設定の原則とサンプル

最終更新日:Jan 14, 2025

DataWorks では、時間、または 単位でスケジュールされたタスク間のスケジューリング依存関係を設定できます。タスクのスケジューリングサイクル数は、タスクのスケジューリング頻度によって異なります。各スケジューリングサイクルでタスクのインスタンスが生成されます。このトピックでは、異なるスケジューリング頻度を持つ上位タスクと下位タスクに対して生成される自動トリガーされたタスクインスタンス間の依存関係について説明します。

背景情報

  • DataWorks では、自動トリガーされたタスクは、スケジューリング頻度とタスクのスケジューリングサイクル数に基づいてインスタンスを生成します。たとえば、時間単位でスケジュールされたタスクは、毎日、タスクのスケジューリングサイクル数と同じ数のインスタンスを生成します。タスクはインスタンスとして実行されます。本質的に、自動トリガーされたタスク間の依存関係は、タスクに対して生成されたインスタンス間の依存関係です。上位と下位の自動トリガーされたタスクに対して生成されるインスタンスの数と、インスタンス間の依存関係は、上位と下位のタスクのスケジューリング頻度によって異なります。

  • DataWorks は、さまざまなスケジューリング依存関係シナリオをサポートしています。特定のシナリオで、タスク間に同一サイクルまたは前サイクルのスケジューリング依存関係を設定できます。タスク間の同一サイクルのスケジューリング依存関係とタスク間の前サイクルのスケジューリング依存関係の詳細については、「同一サイクルのスケジューリング依存関係の設定」および「サイクルをまたぐスケジューリング依存関係の設定」をご参照ください。

スケジューリング依存関係を設定する前に、次の表に記載されている項目に注意する必要があります。

番号

説明

参照

1

DataWorks は、分、時間、日、週、月、年というスケジューリング頻度をサポートしています。上位タスクと下位タスクのスケジューリング頻度が異なる場合、DataWorks では、スケジューリング時間近接の原則に基づいて、上位タスクと下位タスク間のスケジューリング依存関係を設定できます。

説明
  • 時間単位でスケジュールされたタスクが時間単位でスケジュールされた別のタスクに依存し、タスクのスケジューリングサイクルが当日同じである場合、タスク間の依存関係はスケジューリング時間近接の原則に準拠していません。これは、タスク間のスケジューリング依存関係がタスクのスケジューリング時間に関係がないことを示しています。

  • デフォルトでは、日単位でスケジュールされたタスクが時間または分単位でスケジュールされたタスクに依存する場合、日単位でスケジュールされたタスクに対して生成されたインスタンスは、当日時間または分単位でスケジュールされたタスクに対して生成されたすべてのインスタンスに依存します。これは、当日時間または分単位でスケジュールされたタスクに対して生成されたすべてのインスタンスのデータが生成された後、日単位でスケジュールされたタスクが当日生成されたデータのクレンジングを開始することを示しています。

スケジューリング依存関係のスケジューリング時間近接の原則

2

DataWorks でタスク間のスケジューリング依存関係を設定すると、タスクのデータ間の依存関係が確立されます。タスクのスケジューリング時間に関わらず、タスクはすべての上位タスクが実行を完了した後にのみ、実行条件を満たします。

タスクの実行に対するタスク間の依存関係の影響

3

サンプルシナリオに基づいて、スケジューリング依存関係のスケジューリング時間近接の原則を理解できます。

複雑な依存関係シナリオ:

  • 日単位でスケジュールされたタスクの依存関係

  • 時間単位でスケジュールされたタスクの依存関係

  • 分単位でスケジュールされたタスクの依存関係

  • 週、月、または年単位でスケジュールされたタスクへの依存関係

スケジューリング依存関係のスケジューリング時間近接の原則

DataWorks では、自動トリガーされたタスクが実行されるようにスケジュールされるたびに、タスクのインスタンスが生成されます。そのため、複数のインスタンスが生成されます。下位インスタンスは上位インスタンスに依存します。そのため、上位インスタンスは、下位インスタンスのスケジューリング時間が来る前に生成される必要があります。

ほとんどの場合、現在のインスタンスが依存するインスタンスを指定しない場合、現在のインスタンスの依存関係はスケジューリング時間近接の原則に準拠します。これは、現在のインスタンスが、スケジューリング時間が現在のインスタンスのスケジューリング時間と等しいか、それよりも前で、かつ他のインスタンスの上位インスタンスではないインスタンスに依存することを示しています。次の表は、さまざまなシナリオにおける依存関係の原則を示しています。

説明
  • タスクのスケジューリング時間が上位タスクのスケジューリング時間よりも前の場合、タスクはスケジューリング時間には実行されません。タスクは、上位タスクが実行を完了した後にのみ、実行をスケジュールできます。

  • スケジューリング時間近接の原則に基づいて、タスクの上位タスクに、当日タスクに対して生成された最初のインスタンスのスケジューリング時間よりも前のスケジューリング時間を持つインスタンスがない場合、タスクの最初のインスタンスは、デフォルトで当日上位タスクに対して生成された最初のインスタンスに依存します。

シナリオ

説明

時間単位でスケジュールされたタスクと分単位でスケジュールされたタスクの依存関係シナリオ

タスク間の依存関係は、タスクに対して生成されたインスタンスのスケジューリング時間に関連しています。

  • デフォルトのシナリオ: 現在のインスタンスの依存関係は、スケジューリング時間近接の原則に準拠します。これは、DataWorks により、現在のインスタンスが、スケジューリング時間が現在のインスタンスのスケジューリング時間と一致するか、それよりも前で、かつ他のインスタンスの上位インスタンスではないインスタンスに依存できることを示しています。

    説明

    タスクに対して生成されたインスタンスの数が下位タスクに対して生成されたインスタンスの数よりも多い場合、下位インスタンスは複数の上位インスタンスに依存することがあります。

    詳細については、自己依存関係が設定されていない時間単位でスケジュールされたタスクと分単位でスケジュールされたタスク間の依存関係の図をご参照ください。

  • 特別なシナリオ: 時間単位でスケジュールされたタスクと分単位でスケジュールされたタスクの両方に対して自己依存関係が設定されている場合、現在の下位インスタンスは、スケジューリング時間が現在の下位インスタンスのスケジューリング時間と一致するか、それよりも前の上位インスタンスに依存します。自己依存関係の設定方法の詳細については、「前サイクルで現在のノードに対して生成されたインスタンスへの依存関係」をご参照ください。

    説明

    詳細については、自己依存関係が設定されている時間単位でスケジュールされたタスクと分単位でスケジュールされたタスク間の依存関係の図をご参照ください。

次の図は、さまざまなシナリオにおける時間単位でスケジュールされたタスクと分単位でスケジュールされたタスク間のスケジューリング依存関係を示しています。小时、分钟任务互相依赖

タスク間の依存関係は、タスクに対して生成されたインスタンスのスケジューリング時間に関係がありません。

時間単位でスケジュールされたタスクが別の時間単位でスケジュールされたタスクに依存するシナリオ、または分単位でスケジュールされたタスクが別の分単位でスケジュールされたタスクに依存するシナリオでは、上位タスクと下位タスクの両方でスケジューリングサイクル数(当日生成されたインスタンス)が同じであれば、上位インスタンスと下位インスタンス間に 1 対 1 のマッピングが確立されます。

日単位でスケジュールされたタスクが時間または分単位でスケジュールされたタスクに依存するシナリオ

  • デフォルトのシナリオ: デフォルトでは、日単位でスケジュールされたタスクが時間または分単位でスケジュールされたタスクに依存する場合、日単位でスケジュールされたタスクに対して生成されたインスタンスは、当日時間または分単位でスケジュールされたタスクに対して生成されたすべてのインスタンスに依存します。これは、当日時間または分単位でスケジュールされたタスクに対して生成されたすべてのインスタンスのデータが生成された後、日単位でスケジュールされたタスクが当日生成されたデータのクレンジングを開始することを示しています。

  • その他のシナリオ: 日単位でスケジュールされたタスクに対して生成されたインスタンスを、時間または分単位でスケジュールされたタスクに対して生成され、スケジューリング時間が日単位でスケジュールされたタスクのスケジューリング時間に最も近いインスタンスに依存させたい場合は、時間または分単位でスケジュールされたタスクに対して自己依存関係を設定できます。自己依存関係が設定されると、日単位でスケジュールされたタスクに対して生成されたインスタンスは、時間または分単位でスケジュールされたタスクに対して生成されたインスタンスが実行を完了した後に実行を開始します。自己依存関係の設定方法の詳細については、「前サイクルで現在のノードに対して生成されたインスタンスへの依存関係」をご参照ください。

天任务依赖当天小时任务

さまざまな依存関係シナリオにおけるタスクの依存関係と実行状況の詳細については、「付録: 複雑な依存関係シナリオ」をご参照ください。

タスクの実行に対するタスク間の依存関係の影響

タスク間の依存関係を設定した後、上位タスクが「成功」状態にならない場合、下位タスクは下位タスクのスケジューリング時間になっても実行を開始できません。

たとえば、時間単位でスケジュールされたタスク B は、日単位でスケジュールされたタスク A に依存しています。

  • タスク A: スケジューリング時間は 07:00 です。

  • タスク B: スケジューリング時間は 00:0008:00、および 16:00 です。

タスク A が実行を完了しない場合、タスク B のスケジューリング時間 00:00 になっても、タスク B は実行をスケジュールされません。タスク B が実際に実行される最も早い時間は 07:00 です。依赖关系对任务执行的影响

付録: 複雑な依存関係シナリオ

次の表は、さまざまな依存関係シナリオにおける、異なるスケジュール頻度を持つタスクの依存関係と実行状況を示しています。

説明
  • タスクのスケジュール時刻が、その祖先タスクのスケジュール時刻よりも早い場合、タスクはスケジュール時刻に実行されません。タスクは、祖先タスクの実行が完了した後にのみ、スケジュールされて実行されます。

  • スケジュール時刻の近接性の原則に基づき、タスクの祖先タスクに、当日タスクに対して生成された最初のインスタンスよりも早いスケジュール時刻を持つインスタンスがない場合、タスクの最初のインスタンスは、デフォルトで当日祖先タスクに対して生成された最初のインスタンスに依存します。

時間単位でスケジュールされたタスクの依存関係

依存関係シナリオ

説明

時間単位でスケジュールされたタスクが時間単位でスケジュールされた別のタスクに依存するシナリオ

  • 祖先タスクのスケジューリングサイクル(インスタンス)の数 = 子孫タスクのスケジューリングサイクル(インスタンス)の数

    当日生成された祖先タスクのインスタンスと子孫タスクのインスタンスの間には、1 対 1 のマッピングが確立されます。これは、最初の子孫インスタンスが最初の祖先インスタンスに依存し、2 番目の子孫インスタンスが 2 番目の祖先インスタンスに依存し、後続の子孫インスタンスが後続の祖先インスタンスに依存することを示します。

  • 祖先タスクのスケジューリングサイクル(インスタンス)の数 ≠ 子孫タスクのスケジューリングサイクル(インスタンス)の数

    当日生成された祖先タスクのインスタンスと子孫タスクのインスタンス間の依存関係は、スケジューリング時間の近接性の原則に準拠します。子孫インスタンスは、スケジューリング時間が子孫インスタンスのスケジューリング時間と最も近く、それより遅くない祖先インスタンスに依存します。

    説明

    タスクに対して生成されたインスタンスの数が、その子孫タスクに対して生成されたインスタンスの数よりも少ない場合、複数の子孫インスタンスが同じ祖先インスタンスに依存することがあります。

小时任务依赖小时任务

時間単位でスケジュールされたタスクが日単位でスケジュールされたタスクに依存するシナリオ

  • 時間単位でスケジュールされたタスクに対して自己依存関係が設定されていません。

    当日、時間単位でスケジュールされたタスクに対して生成されたすべてのインスタンスは、日単位でスケジュールされたタスクに対して生成されたインスタンスに依存します。日単位でスケジュールされたタスクの実行が完了すると、時間単位でスケジュールされたタスクに対して生成されたすべてのインスタンスの実行が開始されます。この場合、時間単位でスケジュールされたタスクに対して生成され、スケジューリング時間が到来したインスタンスは並列に実行されます。

    説明
    • インスタンスが並列に実行されないようにするには、時間単位でスケジュールされたタスクに対して自己依存関係を設定します。 自己依存関係の設定方法の詳細については、「前のサイクルで現在のノードに対して生成されたインスタンスへの依存関係」をご参照ください。

    • 時間単位でスケジュールされたタスクに対して生成されたインスタンスの実行は、互いに独立しています。

  • 時間単位でスケジュールされたタスクに対して自己依存関係が設定されています。

    • 時間単位でスケジュールされたタスクに対して生成された最初のインスタンスのみが、日単位でスケジュールされたタスクに依存します。現在のサイクルで時間単位でスケジュールされたタスクに対して生成された残りの各インスタンスは、前のサイクルのタスクのインスタンスに依存します。

    • 現在のサイクルの時間単位でスケジュールされたタスクのインスタンスは、日単位でスケジュールされたタスクと前のサイクルの時間単位でスケジュールされたタスクのインスタンスの実行が完了した後にのみ実行を開始します。この場合、時間単位でスケジュールされたタスクに対して生成されたインスタンスのスケジューリング時間が到来しても、インスタンスは並列に実行されません。

    説明

    時間単位でスケジュールされたタスクに対して自己依存関係を設定すると、当日生成された最初のインスタンスは前日生成された最後のインスタンスに依存することがあります。前日生成された最後のインスタンスの実行が完了しない場合、時間単位でスケジュールされたタスクを当日スケジュールすることはできません。 自己依存関係の設定方法の詳細については、「前のサイクルで現在のノードに対して生成されたインスタンスへの依存関係」をご参照ください。

小时任务依赖天任务

時間単位でスケジュールされたタスクが分単位でスケジュールされたタスクに依存するシナリオ

  • 分単位でスケジュールされたタスクに対して自己依存関係が設定されていません。

    時間単位でスケジュールされたタスクに対して特定の時間に生成されたインスタンスは、同じ時間内に分単位でスケジュールされたタスクに対して生成されたすべてのインスタンスに依存します。

  • 分単位でスケジュールされたタスクと時間単位でスケジュールされたタスクの両方に対して自己依存関係が設定されています。

    時間単位でスケジュールされたタスクに対して特定の時間に生成されたインスタンスは、同じ時間内で分単位でスケジュールされたタスクに対して生成され、スケジューリング時間が現在のインスタンスのスケジューリング時間と最も近く、それより遅くないインスタンスに依存します。

小时任务依赖分钟任务

日単位でスケジュールされたタスクの依存関係

依存関係シナリオ

説明

同じスケジューリングサイクル内で、日単位でスケジュールされたタスクが別の日にスケジュールされたタスクに依存するシナリオ

  • 日単位でスケジュールされたタスクに対して自己依存関係が設定されていません。

    デフォルトでは、日単位でスケジュールされたタスクに対して生成されたインスタンスは、同じスケジューリングサイクル内で、別の日にスケジュールされたタスクに対して生成されたインスタンスに依存します。

  • 日単位でスケジュールされたタスクに対して自己依存関係が設定されています。

    日単位でスケジュールされたタスクが、自己依存関係が設定されている別の日にスケジュールされたタスクに依存する場合、相互依存関係が存在します。

    説明

    日単位でスケジュールされたタスクに対して自己依存関係を設定すると、当日に生成された最初のインスタンスは、前日に生成された最後のインスタンスに依存する可能性があります。 前日に生成された最後のインスタンスが実行を完了していない場合、日単位でスケジュールされたタスクは当日にスケジュールできません。 自己依存関係の設定方法の詳細については、「前のサイクルで現在のノードに対して生成されたインスタンスへの依存関係」をご参照ください。

天任务依赖同周期天任务

日単位でスケジュールされたタスクが当日の時間単位でスケジュールされたタスクに依存するシナリオ

  • 時間単位でスケジュールされたタスクに対して自己依存関係が設定されていません。

    日単位でスケジュールされたタスクに対して生成されたインスタンスは、当日の時間単位でスケジュールされたタスクに対して生成されたすべてのインスタンスに依存します。 当日の時間単位でスケジュールされたタスクに対して生成されたすべてのインスタンスのデータが生成された後、日単位でスケジュールされたタスクは、当日に生成されたデータのクレンジングを開始します。

    説明

    日単位でスケジュールされたタスクに対して生成されたインスタンスを、時間単位でスケジュールされたタスクに対して生成された特定のインスタンスに依存させたい場合は、時間単位でスケジュールされたタスクに対して自己依存関係を設定できます。 特定のインスタンスの実行が完了すると、日単位でスケジュールされたタスクに対して生成されたインスタンスは、スケジュールされた時刻に自動的にスケジュールされます。 自己依存関係の設定方法の詳細については、「前のサイクルで現在のノードに対して生成されたインスタンスへの依存関係」をご参照ください。

  • 時間単位でスケジュールされたタスクに対して自己依存関係が設定されています。

    日単位でスケジュールされたタスクは、時間単位でスケジュールされたタスクに対して生成され、スケジュール時刻が日単位でスケジュールされたタスクのスケジュール時刻と等しいかそれ以前の最も近いインスタンスに依存します。

天任务依赖当天小时任务

日単位でスケジュールされたタスクが前日の時間単位または分単位でスケジュールされたタスクに依存するシナリオ

  • 時間単位または分単位でスケジュールされたタスクに対して自己依存関係が設定されていません。

    当日の日単位でスケジュールされたタスクは、前日の時間単位または分単位でスケジュールされたタスクに対して生成されたすべてのインスタンスに依存します。

  • 時間単位または分単位でスケジュールされたタスクに対して自己依存関係が設定されています。

    当日の日単位でスケジュールされたタスクは、前日の時間単位または分単位でスケジュールされたタスクに対して生成された最後のインスタンスに依存します。

次の図は、日単位でスケジュールされたタスクが前日の時間単位でスケジュールされたタスクにどのように依存するかを示す例です。天任务依赖昨天的小时任务

分単位でスケジュールされたタスクの依存関係

依存関係シナリオ

説明

分単位でスケジュールされたタスクが時間単位でスケジュールされたタスクに依存するシナリオ

  • 分単位でスケジュールされたタスクに対して自己依存関係が設定されていません。

    分単位でスケジュールされたタスクに対して生成されたインスタンスは、時間単位でスケジュールされたタスクに対して生成され、スケジュール時間が現在のインスタンスのスケジュール時間と等しいかそれよりも前であるインスタンスの中で最も近いインスタンスに依存します。

    説明

    この場合、分単位でスケジュールされたタスクに対して生成された複数のインスタンスが、時間単位でスケジュールされたタスクに対して生成された同じインスタンスに依存する場合があります。

  • 分単位でスケジュールされたタスクと時間単位でスケジュールされたタスクの両方に対して自己依存関係が設定されています。

    現在のサイクルの分単位でスケジュールされたタスクのインスタンスは、前のサイクルのタスクのインスタンスに依存し、また、スケジュール時間近接の原則に基づいて、時間単位でスケジュールされたタスクに対して生成され、スケジュール時間が現在のインスタンスのスケジュール時間と等しいかそれよりも前であるインスタンスの中で最も近いインスタンスに依存します。

分钟任务依赖小时任务

分単位でスケジュールされたタスクが日単位でスケジュールされたタスクに依存するシナリオ

  • 分単位でスケジュールされたタスクに対して自己依存関係が設定されていません。

    当日、分単位でスケジュールされたタスクに対して生成されたすべてのインスタンスは、日単位でスケジュールされたタスクに対して生成されたインスタンスに依存します。日単位でスケジュールされたタスクのスケジュール時間が到来し、タスクの実行が完了すると、分単位でスケジュールされたタスクの実行が開始されます。

    説明
    • 日単位でスケジュールされたタスクの実行が完了した後、分単位でスケジュールされたタスクに対して生成され、スケジュール時間が到来したインスタンスは並列に実行できます。インスタンスが並列に実行されないようにするには、分単位でスケジュールされたタスクに対して自己依存関係を設定します。自己依存関係の設定方法の詳細については、「前のサイクルの現在のノードに対して生成されたインスタンスへの依存関係」をご参照ください。

    • 分単位でスケジュールされたタスクに対して生成されたインスタンスの実行は、互いに独立しています。

  • 分単位でスケジュールされたタスクに対して自己依存関係が設定されています。

    • 分単位でスケジュールされたタスクに対して生成された最初のインスタンスのみが、日単位でスケジュールされたタスクに依存します。現在のサイクルの分単位でスケジュールされたタスクに対して生成された残りの各インスタンスは、前のサイクルのタスクのインスタンスに依存します。

    • 現在のサイクルの分単位でスケジュールされたタスクのインスタンスは、日単位でスケジュールされたタスクと前のサイクルの分単位でスケジュールされたタスクのインスタンスの実行が完了した後にのみ実行を開始します。この場合、分単位でスケジュールされたタスクに対して生成されたインスタンスのスケジュール時間が到来しても、インスタンスは並列に実行されません。

    説明

    分単位でスケジュールされたタスクに対して自己依存関係を設定した場合、当日生成された最初のインスタンスは前日生成された最後のインスタンスに依存する場合があります。前日生成された最後のインスタンスの実行が完了していない場合、分単位でスケジュールされたタスクは当日スケジュールできません。自己依存関係の設定方法の詳細については、「前のサイクルの現在のノードに対して生成されたインスタンスへの依存関係」をご参照ください。

分钟任务依赖天任务

週、月、または年単位でスケジュールされたタスクへの依存関係

日、時間、または分でスケジュールされたタスクが、週、月、または年でスケジュールされたタスクに依存している場合、スケジュール時間外にある期間において、週、月、または年でスケジュールされたタスクに対してドライランインスタンスが生成されます。ドライランインスタンスは、データを生成したり、リソースを占有したり、子孫タスクの実行をブロックしたりすることはありません。

日単位でスケジュールされたタスクが、週単位でスケジュールされ、自己依存が構成されていないタスクに依存するサンプルシナリオ:

  • 週単位でスケジュールされたタスクは、毎週月曜日と金曜日に実行されるようにスケジュールされています。 火曜日、水曜日、木曜日、土曜日、日曜日の毎日、タスクのドライランインスタンスが生成されます。 ドライランインスタンスのスケジュール実行時刻になると、インスタンスのステータスは直接成功に設定されますが、インスタンスのコードは実行されません。 ドライランインスタンスは、子孫インスタンスの通常の実行に影響を与えません。

  • 日単位でスケジュールされたタスクのインスタンスは毎日生成され、ドライランインスタンスを含む、週単位でスケジュールされたタスクに対して毎日生成されるインスタンスに依存します。 日単位でスケジュールされたタスクに対して生成されるインスタンスは、週単位でスケジュールされたタスクに対して生成されるインスタンスが毎日正常に実行された後に実行されるようにスケジュールできます。

image