DataWorksにおけるスケジューリング依存関係は、タスク間ではなくインスタンス間の依存関係です。タスクが実行されるたびに、DataWorksはそのスケジューリングサイクルに対して1つのインスタンスを生成します。祖先タスクと子孫タスクが異なる頻度で実行される場合、子孫インスタンスがどの祖先インスタンスを待つかを決定するルールは、スケジューリング時間近接の原則と呼ばれます。
基本概念
インスタンス:単一のスケジューリングサイクルにおける実行単位です。1時間ごとにスケジュールされるタスクは、1時間あたり1つのインスタンスを生成します。
スケジューリング時間近接の原則:子孫インスタンスは、自身のスケジュール時刻に最も近く、かつそれより遅くないスケジュール時刻を持つ祖先インスタンスに依存します。また、その祖先インスタンスは他のインスタンスの祖先インスタンスではありません。
自己依存:各インスタンスが同じタスクの前のインスタンスに依存するようにする構成です。有効にすると、その日の最初のインスタンスのみが祖先タスクに依存します。それ以降のすべてのインスタンスは、並行して実行されるのではなく、同じタスクの先行するインスタンスに依存します。
ドライランインスタンス:週次、月次、または年次タスクに対して、実際の実行がスケジュールされていない日に生成されるプレースホルダーインスタンスです。そのステータスは、コードを実行することなく自動的に成功に設定されるため、子孫タスクをブロックしません。
近接の原則の仕組み
祖先タスクと子孫タスクが異なる頻度で実行される場合、常に近接の原則が適用されます。
子孫インスタンスは、自身のスケジュール時刻に最も近く、かつそれより遅くないスケジュール時刻を持つ祖先インスタンスに依存します。
2つのエッジケースが適用されます。
-
その日の最初の子孫インスタンスよりも早いスケジュール時刻を持つ祖先インスタンスがない場合、最初の子孫インスタンスはその日の最初の祖先インスタンスに依存します。
-
子孫タスクのスケジュール時刻が、その祖先が実行を完了する前に到来した場合、子孫は待機します。その実際の開始時刻は、祖先の完了時刻より早くはなりません。
実行例 — 日次タスクに依存する時間タスク
タスク A (日次タスク) は 07:00 にスケジュールされます。タスク B (時間タスク) は 00:00、08:00、16:00 にスケジュールされます。
00:00 になると、タスク A はまだ完了していません。タスク B の 00:00 のインスタンスは待機します。タスク B が実際に開始できる最も早い時刻は、タスク A が完了した後の 07:00 です。
近接の原則が適用される場合
| シナリオ | 近接の原則が適用されますか? | マッピング |
|---|---|---|
| 時間タスクが時間タスクに依存 — 1日あたりのインスタンス数が同じ | いいえ | 1対1:最初が最初に、2番目が2番目に、というように依存 |
| 時間タスクが時間タスクに依存 — 1日あたりのインスタンス数が異なる | はい | 各子孫は、自身のスケジュール時刻より遅くない最も近い祖先インスタンスに依存 |
| 時間タスクは分タスクに依存します | はい | 「時間と分の依存関係 |
| 分タスクが時間タスクに依存 | はい | 各分インスタンスは、最も近い先行する時間インスタンスに依存 |
| 時間または分タスクが日次タスクに依存 | いいえ (すべてのインスタンスが単一の日次インスタンスに依存) | 「日次タスクに依存する時間または分タスク |
| 日次タスクが時間または分タスクに依存 | いいえ (デフォルトですべてのインスタンスに依存) | 「時間または分に依存する日次タスク |
| 日次、時間、または分タスクが週次、月次、または年次タスクに依存 | はい (ドライランインスタンスがスケジュールされていない日を埋める) | 「週次、月次、年次タスクの依存関係 |
頻度ペアによる依存関係モード
時間と分の依存関係
時は時に依存します
両方のタスクが1日あたり同じ数のインスタンスを生成する場合、各タスクがスケジューリング期間を開始する時期に関係なく、1対1のマッピングが適用されます。
-
シナリオ 1 — 等しいインスタンス数、同じ期間:ノード A とノード B は両方とも 00:00~23:59 の間に5時間ごとにスケジュールされます。それぞれが同じ数のインスタンスを生成します。1対1のマッピングが適用されます。B の最初のインスタンスは A の最初のインスタンスに、B の2番目のインスタンスは A の2番目のインスタンスに、というように依存します。
-
シナリオ 2 — 等しいインスタンス数、異なる開始時刻:ノード A は 06:10 から 21:59 まで4時間ごとに実行されます (4つのインスタンス:06:10、10:10、14:10、18:10)。ノード B は 08:00 から 23:59 まで4時間ごとに実行されます (4つのインスタンス:08:00、12:00、16:00、20:00)。インスタンス数は等しいため、1対1のマッピングが適用されます。B の 08:00 のインスタンスは A の 06:10 のインスタンスに、B の 12:00 のインスタンスは A の 10:10 のインスタンスに、というように依存します。
インスタンス数が異なる場合、近接の原則がマッピングを決定します。祖先が子孫よりも少ないインスタンスを生成する場合、複数の子孫インスタンスが同じ祖先インスタンスに依存する可能性があります。
時は分に依存します
| モード | 動作 |
|---|---|
| 分タスクで自己依存なし | 特定の時間における時間インスタンスは、その同じ時間内のすべての分インスタンスに依存します。 |
| 両方のタスクで自己依存 | 時間インスタンスは、同じ時間内で時間インスタンスのスケジュール時刻に最も近く、かつそれより遅くないスケジュール時刻を持つ分インスタンスに依存します。 |
分は時によって異なります
| モード | 動作 |
|---|---|
| 分タスクで自己依存なし | 各分インスタンスは、その分インスタンスのスケジュール時刻に最も近く、かつそれより遅くないスケジュール時刻を持つ時間インスタンスに依存します。複数の分インスタンスが同じ祖先時間インスタンスを共有する場合があります。 |
| 両方のタスクで自己依存 | 各分インスタンスは、最も近い先行する時間インスタンスに加えて、自身の前サイクルのインスタンスにも依存します。 |
日次タスクに依存する時間または分タスク
| モード | 動作 |
|---|---|
| 時間/分タスクで自己依存なし | 現在の日の時間または分タスクのために生成されたすべてのインスタンスは、単一の日次インスタンスに依存します。日次タスクが完了した後、スケジュール時刻が過ぎたキューに入れられた時間/分インスタンスはすべて並行して実行されます。 |
| 時間/分タスクで自己依存 | その日の最初のインスタンスのみが日次タスクに依存します。それ以降の各インスタンスは、同じタスクの前のインスタンスに依存するため、インスタンスは順次実行されます。 |
自己依存が有効になっている場合、現在の日の最初のインスタンスは前日の最後のインスタンスに依存する可能性があります。その前日のインスタンスが完了していない場合、時間または分タスクは現在の日に開始できません。
時間または分に依存する日次タスク
| モード | 動作 |
|---|---|
| 時間/分タスクで自己依存なし | 日次インスタンスは、現在の日のすべての時間または分インスタンスに依存します。日次タスクは、それらすべてのインスタンスが完了した後に開始します。 |
| 時間/分タスクで自己依存 | 日次インスタンスは、日次タスクのスケジュール時刻に最も近く、かつそれより遅くないスケジュール時刻を持つ時間または分インスタンスに依存します。日次タスクは、その特定のインスタンスが完了した後に開始します。 |
日次タスクが、すべてのアップストリームインスタンスの完了を待つのではなく、スケジュール時刻前の最後のアップストリーム実行の直後に開始する必要がある場合は、時間または分タスクで自己依存を有効にします。
別の日次タスクに依存する日次タスク
| モード | 動作 |
|---|---|
| 祖先日次タスクで自己依存なし | 子孫日次インスタンスは、同じスケジューリングサイクル (同じ暦日) の祖先日次インスタンスに依存します。 |
| 祖先日次タスクで自己依存 | クロス依存関係が存在します。祖先の現在の日次インスタンスは、自身の前日のインスタンスに依存します。子孫タスクは、両方の条件が満たされるまで開始できません。 |
前日の時間または分に依存する日次タスク
| モード | 動作 |
|---|---|
| 時間/分タスクで自己依存なし | 現在の日の日次タスクは、前日の時間または分タスクのために生成されたすべてのインスタンスに依存します。 |
| 時間/分タスクで自己依存 | 現在の日の日次タスクは、前日の時間または分タスクのために生成された最後のインスタンスのみに依存します。 |
週次、月次、年次タスクの依存関係
日次、時間、または分タスクが週次、月次、または年次タスクに依存する場合、DataWorksは、低頻度タスクのスケジュールされた実行日以外のすべての日にドライランインスタンスを生成します。ドライランインスタンスは成功ステータスで直ちに完了するため、子孫タスクはブロックされません。
例 — 週次タスクに依存する日次タスク (自己依存なし)
週次タスクは毎週月曜日と金曜日にスケジュールされます。
-
月曜日と金曜日:週次タスクは通常通り実行されます。完了後、日次タスクが実行されます。
-
火曜日、水曜日、木曜日、土曜日、日曜日:週次タスクのドライランインスタンスが生成されます。それらのステータスは、コードを実行することなく直ちに成功に設定されます。日次タスクは通常通り実行されます。
適切な依存関係モードの選択
この表を使用して、一般的なシナリオに適した構成を特定してください。
| 目標 | 構成 |
|---|---|
| 日次タスクは実行前にすべての時間データが揃うのを待つ | 日次タスクは時間タスクに依存。時間タスクで自己依存なし |
| 日次タスクはスケジュール時刻前の最後の時間実行が完了するとすぐに開始する | 時間タスクで自己依存を有効にする |
| 日次タスク完了後、時間インスタンスは順次実行される (並行バーストなし) | 時間タスクで自己依存を有効にする |
| 日次タスク完了後、時間インスタンスはすべて開始する (並行バーストは許容される) | 時間タスクで自己依存なし |
| 日次タスクは前日のすべての時間データを待つ | 日次タスクは前日の時間タスクに依存。時間タスクで自己依存なし |
| 日次タスクは前日の時間タスクの最後の実行のみを待つ | 時間タスクで自己依存を有効にする |
次のステップ
-
同一サイクルおよび前サイクルのスケジューリング依存関係構成については、スケジューリング依存関係構成トピックをご参照ください。
-
DataWorksでは、ワークフロー全体の祖先ノードと子孫ノードを構成できます。ワークフローレベルの依存関係構成については、「定期的なワークフロー」をご参照ください。