DataWorks では、分、時間、日、週、月、または年単位でスケジュールされるタスク間のスケジューリング依存関係を構成できます。タスクのスケジューリングサイクル数は、タスクのスケジューリング頻度によって異なります。各スケジューリングサイクルで、タスクのインスタンスが生成されます。このトピックでは、異なるスケジューリング頻度を持つ祖先タスクと子孫タスクに対して生成される自動トリガー タスクインスタンス 間の依存関係について説明します。
背景情報
DataWorks では、自動トリガー タスク は、スケジューリング頻度とタスクのスケジューリングサイクル数に基づいてインスタンスを生成します。たとえば、時間単位でスケジュールされるタスクは、毎日、タスクのスケジューリングサイクル数と同じ数のインスタンスを生成します。タスクはインスタンスとして実行されます。本質的に、自動トリガー タスク 間の依存関係は、タスクに対して生成される インスタンス 間の依存関係です。祖先と子孫の自動トリガー タスク に対して生成される インスタンス の数と、インスタンス 間の依存関係は、祖先と子孫の タスク のスケジューリング頻度によって異なります。
DataWorks は、さまざまなスケジューリング依存関係シナリオをサポートしています。特定のシナリオで、タスク間の同一サイクルまたは前サイクルのスケジューリング依存関係を構成できます。 タスク間の同一サイクルのスケジューリング依存関係とタスク間の前サイクルのスケジューリング依存関係の詳細については、「」および「」をご参照ください。
スケジューリング依存関係を構成する前に、次の表に記載されている項目に注意する必要があります。
番号 | 説明 | 参照 |
1 | DataWorks は、分、時間、日、週、月、年のスケジューリング頻度をサポートしています。祖先タスクと子孫タスクのスケジューリング頻度が異なる場合、DataWorks では、スケジューリング時間近接の原則に基づいて、祖先タスクと子孫タスク間のスケジューリング依存関係を構成できます。
説明 時間単位でスケジュールされるタスクが時間単位でスケジュールされる別のタスクに依存し、タスクのスケジューリングサイクルが当日同じである場合、タスク間の依存関係はスケジューリング時間近接の原則に準拠していません。これは、タスク間のスケジューリング依存関係がタスクのスケジューリング時間に関係がないことを示しています。 デフォルトでは、日単位でスケジュールされるタスクが時間または分単位でスケジュールされるタスクに依存する場合、日単位でスケジュールされるタスクに対して生成されるインスタンスは、当日、時間または分単位でスケジュールされるタスクに対して生成されるすべてのインスタンスに依存します。これは、当日、時間または分単位でスケジュールされるタスクに対して生成されるすべてのインスタンスのデータが生成された後、日単位でスケジュールされるタスクが、当日生成されたデータのクレンジングを開始することを示しています。
| スケジューリング依存関係のスケジューリング時間近接の原則 |
2 | DataWorks でタスク間のスケジューリング依存関係を構成すると、タスクのデータ間の依存関係が確立されます。タスクのスケジューリング時間に関わらず、タスクは、すべての祖先タスクの実行が完了した後にのみ、実行条件を満たします。 | タスク間の依存関係がタスクの実行に与える影響 |
3 | サンプルシナリオに基づいて、スケジューリング依存関係のスケジューリング時間近接の原則を理解できます。 | 付録 1:複雑な依存関係シナリオ: |
スケジューリング依存関係のスケジューリング時間近接の原則
DataWorks では、自動トリガー タスク が実行されるようにスケジュールされるたびに、タスク の インスタンス が生成されます。そのため、複数の インスタンス が生成されます。子孫 インスタンス は祖先 インスタンス に依存します。ほとんどの場合、現在の インスタンス が依存する インスタンス を指定しない場合、現在の インスタンス の依存関係は、スケジューリング時間近接の原則に準拠します。これは、現在の インスタンス が、スケジューリング時間が現在の インスタンス のスケジューリング時間に最も近く、他の インスタンス の祖先 インスタンス ではない インスタンス に依存することを示しています。次の表に、さまざまなシナリオでの依存関係の原則を示します。
説明 タスクのスケジューリング時間がその祖先タスクのスケジューリング時間よりも早い場合、タスクはスケジューリング時間には実行されません。タスクは、祖先タスクの実行が完了した後にのみ、実行するようにスケジュールできます。
スケジューリング時間近接の原則に基づき、タスクの祖先タスクに、当日、タスクに対して生成された最初のインスタンスのスケジューリング時間よりも早いスケジューリング時間を持つインスタンスがない場合、タスクの最初のインスタンスは、デフォルトで、当日、祖先タスクに対して生成された最初のインスタンスに依存します。
シナリオ | 説明 | 図 |
時間単位でスケジュールされるタスクと分単位でスケジュールされるタスクの依存関係シナリオ | タスク間の依存関係は、タスクに対して生成されるインスタンスのスケジューリング時間に関連しています。 デフォルトのシナリオ: 現在の インスタンス の依存関係は、スケジューリング時間近接の原則に準拠します。これは、DataWorks では、現在の インスタンス が、スケジューリング時間が現在の インスタンス のスケジューリング時間よりも早いか、現在の インスタンス のスケジューリング時間と一致する インスタンス で、他の インスタンス の祖先 インスタンス ではない インスタンス に依存できることを示しています。
説明 タスクに対して生成される インスタンス の数が、その子孫タスクに対して生成される インスタンス の数よりも多い場合、子孫 インスタンス は複数の祖先 インスタンス に依存することがあります。 詳細については、自己依存関係が構成されていない時間単位でスケジュールされるタスクと分単位でスケジュールされるタスクの間の依存関係の図を参照してください。 特別なシナリオ: 時間単位でスケジュールされるタスクと分単位でスケジュールされるタスクの両方に対して自己依存関係が構成されている場合、現在の子孫 インスタンス は、スケジューリング時間が現在の子孫 インスタンス のスケジューリング時間よりも早いか、現在の子孫 インスタンス のスケジューリング時間と一致する祖先 インスタンス に依存します。 自己依存関係の構成方法の詳細については、「クロスサイクルのスケジューリング依存関係の構成」トピックの 前のサイクルで現在のノードに対して生成されたインスタンスへの依存関係 セクションを参照してください。
説明 詳細については、自己依存関係が構成されている時間単位でスケジュールされるタスクと分単位でスケジュールされるタスクの間の依存関係の図を参照してください。
タスク間の依存関係は、タスクに対して生成されるインスタンスのスケジューリング時間に関係がありません。 時間単位でスケジュールされるタスクが時間単位でスケジュールされる別のタスクに依存するシナリオ、または分単位でスケジュールされるタスクが分単位でスケジュールされる別のタスクに依存するシナリオでは、祖先タスクと子孫タスクの両方でスケジューリングサイクル数(当日生成されるインスタンス)が同じであれば、祖先インスタンスと子孫インスタンスの間に 1 対 1 のマッピングが確立されます。
| 次の図は、さまざまなシナリオにおける時間単位でスケジュールされるタスクと分単位でスケジュールされるタスクの間のスケジューリング依存関係を示しています。 時間単位でスケジュールされるタスクが時間単位でスケジュールされる別のタスクに依存する 時間単位でスケジュールされるタスクが分単位でスケジュールされるタスクに依存する 分単位でスケジュールされるタスクが時間単位でスケジュールされるタスクに依存する 例: 時間単位でスケジュールされるタスクが時間単位でスケジュールされる別のタスクに依存する。  シナリオ 1: 時間単位でスケジュールされるノード B が時間単位でスケジュールされるノード A に依存する。 構成情報: 毎日のスケジューリング期間は 00:00 から 23:59 です。 ノード A とノード B は 5 時間ごとにスケジュールされます。 ノード A に対して生成されるインスタンスの数は、ノード B に対して生成されるインスタンスの数と同じです。
依存関係: ノード A に対して生成されるインスタンスの数は、ノード B に対して生成されるインスタンスの数と同じです。この場合、インスタンスのスケジューリング依存関係に対して 1 対 1 のマッピングが確立されます。 シナリオ 2: 構成情報: 依存関係: ノード A に対して生成されるインスタンスの数は、ノード B に対して生成されるインスタンスの数と同じです。この場合、インスタンスのスケジューリング依存関係に対して 1 対 1 のマッピングが確立されます。
|
日単位でスケジュールされるタスクが時間または分単位でスケジュールされるタスクに依存するシナリオ | デフォルトのシナリオ: デフォルトでは、日単位でスケジュールされるタスクが時間または分単位でスケジュールされるタスクに依存する場合、日単位でスケジュールされるタスクに対して生成されるインスタンスは、当日、時間または分単位でスケジュールされるタスクに対して生成されるすべてのインスタンスに依存します。これは、当日、時間または分単位でスケジュールされるタスクに対して生成されるすべてのインスタンスのデータが生成された後、日単位でスケジュールされるタスクが、当日生成されたデータのクレンジングを開始することを示しています。 その他のシナリオ: 日単位でスケジュールされるタスクに対して生成されるインスタンスを、時間または分単位でスケジュールされるタスクに対して生成され、スケジューリング時間が日単位でスケジュールされるタスクのスケジューリング時間に最も近いインスタンスに依存させたい場合は、時間または分単位でスケジュールされるタスクに対して自己依存関係を構成できます。自己依存関係が構成されると、日単位でスケジュールされるタスクに対して生成されるインスタンスは、時間または分単位でスケジュールされるタスクに対して生成されるインスタンスの実行が完了した後に実行を開始します。 |  |
さまざまな依存関係シナリオにおけるタスクの依存関係と実行状況の詳細については、このトピックの 付録 1:複雑な依存関係シナリオ セクションを参照してください。
タスク間の依存関係がタスクの実行に与える影響
タスク間の依存関係を構成すると、祖先タスクが成功状態にならない場合、子孫タスクのスケジューリング時間になっても子孫タスクは実行を開始できません。
たとえば、時間単位でスケジュールされるタスク B が日単位でスケジュールされるタスク A に依存し、タスク B に対して自己依存関係が構成されていないとします。
タスク A が実行を完了しない場合、タスク B のスケジューリング時間 00:00 になってもタスク B は実行されるようにスケジュールされません。タスク B が実際に実行される最も早い時間は 07:00 です。

付録 1:複雑な依存関係シナリオ
タスクのスケジューリング時間がその祖先タスクのスケジューリング時間よりも早い場合、タスクはスケジューリング時間には実行されません。タスクは、祖先タスクの実行が完了した後にのみ、実行するようにスケジュールできます。タスクの祖先タスクに、当日、タスクに対して生成された最初のインスタンスのスケジューリング時間よりも早いスケジューリング時間を持つインスタンスがない場合、タスクの最初のインスタンスは、デフォルトで、当日、祖先タスクに対して生成された最初のインスタンスに依存します。
時間単位でスケジュールされるタスクの依存関係
依存関係シナリオ | 説明 | 図 |
時間単位でスケジュールされるタスクが時間単位でスケジュールされる別のタスクに依存するシナリオ | 祖先タスクのスケジューリングサイクル数(インスタンス) = 子孫タスクのスケジューリングサイクル数(インスタンス) 当日、祖先タスクに対して生成されるインスタンスと子孫タスクに対して生成されるインスタンスの間に 1 対 1 のマッピングが確立されます。これは、最初の子孫インスタンスが最初の祖先インスタンスに依存し、2 番目の子孫インスタンスが 2 番目の祖先インスタンスに依存し、後続の子孫インスタンスが後続の祖先インスタンスに依存することを示しています。 祖先タスクのスケジューリングサイクル数(インスタンス) ≠ 子孫タスクのスケジューリングサイクル数(インスタンス) 当日、祖先タスクに対して生成されるインスタンスと子孫タスクに対して生成されるインスタンスの間の依存関係は、スケジューリング時間近接の原則に準拠します。子孫インスタンスは、スケジューリング時間が子孫インスタンスのスケジューリング時間と同じかそれよりも早く、最も近い祖先インスタンスに依存します。
説明 タスクに対して生成されるインスタンスの数が、その子孫タスクに対して生成されるインスタンスの数よりも少ない場合、複数の子孫インスタンスが同じ祖先インスタンスに依存することがあります。
|  |
時間単位でスケジュールされたタスクが日単位でスケジュールされたタスクに依存するシナリオ | 時間単位でスケジュールされたタスクに自己依存が設定されていない場合。 当日、時間単位でスケジュールされたタスクに対して生成されたすべてのインスタンスは、日単位でスケジュールされたタスクに対して生成されたインスタンスに依存します。 日単位でスケジュールされたタスクの実行が完了すると、時間単位でスケジュールされたタスクに対して生成されたすべてのインスタンスの実行が開始されます。 この場合、時間単位でスケジュールされたタスクに対して生成され、スケジュールされた時刻に達したインスタンスは並列に実行されます。 時間単位でスケジュールされたタスクに自己依存が設定されている場合。 時間単位でスケジュールされたタスクに対して生成された最初のインスタンスのみが、日単位でスケジュールされたタスクに依存します。 現在のサイクルで時間単位でスケジュールされたタスクに対して生成された残りの各インスタンスは、前のサイクルのタスクのインスタンスに依存します。 現在のサイクルの時間単位でスケジュールされたタスクのインスタンスは、日単位でスケジュールされたタスクと前のサイクルの時間単位でスケジュールされたタスクのインスタンスの実行が完了した後にのみ実行を開始します。 この場合、時間単位でスケジュールされたタスクに対して生成されたインスタンスのスケジュールされた時刻に達しても、インスタンスは並列に実行されません。
説明 時間単位でスケジュールされたタスクに自己依存を設定すると、当日生成された最初のインスタンスは前日生成された最後のインスタンスに依存する場合があります。 前日生成された最後のインスタンスの実行が完了しない場合、時間単位でスケジュールされたタスクを当日にスケジュールすることはできません。
|  |
分単位でスケジュールされたタスクに依存する、時間単位でスケジュールされたタスクのシナリオ | 分単位でスケジュールされたタスクに自己依存が設定されていません。 時間単位でスケジュールされたタスクに対して特定の時間に生成されたインスタンスは、同じ時間内に分単位でスケジュールされたタスクに対して生成されたすべてのインスタンスに依存します。 分単位でスケジュールされたタスクと時間単位でスケジュールされたタスクの両方に自己依存が設定されています。 時間単位でスケジュールされたタスクに対して特定の時間に生成されたインスタンスは、同じ時間内で、分単位でスケジュールされたタスクに対して生成され、スケジュール時間が現在のインスタンスのスケジュール時間と等しいかそれよりも前で最も近いインスタンスに依存します。
|  |
日単位でスケジュールされたタスクの依存関係
依存シナリオ | 説明 | 図 |
日次スケジュールされたタスクが、同じスケジューリングサイクル内で日次スケジュールされた別のタスクに依存するシナリオ | 日次スケジュールされた祖先タスクに対して自己依存が設定されていない。 デフォルトでは、日次スケジュールされたタスクに対して生成されたインスタンスは、同じスケジューリングサイクル内で日次スケジュールされた別のタスクに対して生成されたインスタンスに依存します。 日次スケジュールされた祖先タスクに対して自己依存が設定されている。 日次スケジュールされたタスクが、自己依存が設定されている日次スケジュールされた別のタスクに依存する場合、クロス依存が存在します。
説明 日次スケジュールされたタスクに対して自己依存を設定すると、当日生成された最初のインスタンスは、前日生成された最後のインスタンスに依存する可能性があります。 前日生成された最後のインスタンスが実行を完了していない場合、日次スケジュールされたタスクは当日スケジュールできません。
|  |
日次スケジュールされたタスクが、当日の時間単位でスケジュールされたタスクに依存するシナリオ | 時間単位でスケジュールされたタスクに対して自己依存が設定されていない。 日次スケジュールされたタスクに対して生成されたインスタンスは、当日時間単位でスケジュールされたタスクに対して生成されたすべてのインスタンスに依存します。 当日時間単位でスケジュールされたタスクに対して生成されたすべてのインスタンスのデータが生成された後、日次スケジュールされたタスクは、当日生成されたデータのクレンジングを開始します。
説明 日次スケジュールされたタスクに対して生成されたインスタンスを、時間単位でスケジュールされたタスクに対して生成された特定のインスタンスに依存させたい場合は、時間単位でスケジュールされたタスクに対して自己依存を設定できます。 特定のインスタンスの実行が完了すると、日次スケジュールされたタスクに対して生成されたインスタンスは、スケジュールされた時刻に自動的にスケジュールされます。 時間単位でスケジュールされたタスクに対して自己依存が設定されている。 日次スケジュールされたタスクは、時間単位でスケジュールされたタスクに対して生成され、そのスケジュール時刻が日次スケジュールされたタスクのスケジュール時刻と等しいかそれ以前で最も近いインスタンスに依存します。
|  |
日次スケジュールされたタスクが、前日の時間単位または分単位でスケジュールされたタスクに依存するシナリオ | 時間単位または分単位でスケジュールされたタスクに対して自己依存が設定されていない。 当日の日次スケジュールされたタスクは、前日の時間単位または分単位でスケジュールされたタスクに対して生成されたすべてのインスタンスに依存します。 時間単位または分単位でスケジュールされたタスクに対して自己依存が設定されている。 当日の日次スケジュールされたタスクは、前日の時間単位または分単位でスケジュールされたタスクに対して生成された最後のインスタンスに依存します。
| 次の図は、日次スケジュールされたタスクが前日の時間単位でスケジュールされたタスクにどのように依存するかを示す例です。  |
日単位でスケジュールされるタスクの依存関係
依存関係シナリオ | 説明 | 図 |
分単位でスケジュールされたタスクが時間単位でスケジュールされたタスクに依存するシナリオ | 分単位でスケジュールされたタスクに自己依存が設定されていません。 分単位でスケジュールされたタスクに対して生成されたインスタンスは、時間単位でスケジュールされたタスクに対して生成され、スケジュール時間が現在のインスタンスのスケジュール時間よりも前である最も近いインスタンスに依存します。
説明 この場合、分単位でスケジュールされたタスクに対して生成された複数のインスタンスが、時間単位でスケジュールされたタスクに対して生成された同じインスタンスに依存する可能性があります。 分単位でスケジュールされたタスクと時間単位でスケジュールされたタスクの両方に自己依存が設定されています。 現在のサイクルの分単位でスケジュールされたタスクのインスタンスは、前のサイクルのタスクのインスタンスに依存し、また、スケジュール時間の近接性の原則に基づいて、時間単位でスケジュールされたタスクに対して生成され、スケジュール時間が現在のインスタンスのスケジュール時間よりも前である最も近いインスタンスにも依存します。
|  |
分単位でスケジュールされたタスクが日単位でスケジュールされたタスクに依存するシナリオ | |  |
週、月、または年単位でスケジュールされたタスクへの依存関係
日、時間、または分単位でスケジュールされたタスクが、週、月、または年単位でスケジュールされたタスクに依存している場合、スケジュール時間外のある期間に、週、月、または年単位でスケジュールされたタスクに対してドライラン インスタンスが生成されます。 ドライラン インスタンスは、データを生成したり、リソースを占有したり、子孫タスクの実行をブロックしたりしません。
日単位でスケジュールされたタスクが、週単位でスケジュールされ、自己依存関係が構成されていないタスクに依存するサンプル シナリオ:
週単位でスケジュールされたタスクは、毎週月曜日と金曜日に実行されるようにスケジュールされています。 ドライラン インスタンスは、毎週火曜日、水曜日、木曜日、土曜日、および日曜日にタスクに対して生成されます。 ドライラン インスタンスのスケジュール時間が到来すると、インスタンスのステータスは直接成功に設定されますが、インスタンスのコードは実行されません。 ドライラン インスタンスは、子孫インスタンスの通常の実行に影響を与えません。
日単位でスケジュールされたタスクのインスタンスは毎日生成され、ドライラン インスタンスを含む、毎日生成される週単位でスケジュールされたタスクのインスタンスに依存します。 日単位でスケジュールされたタスクに対して生成されたインスタンスは、週単位でスケジュールされたタスクに対して生成されたインスタンスが毎日正常に実行された後に実行されるようにスケジュールできます。

付録 2:ワークフローのスケジューリング
DataWorks では、全体として機能するワークフローの先祖ノードと子孫ノードを設定できます。ワークフローのスケジューリングの詳細については、「自動的にトリガーされるワークフロー」をご参照ください。