このガイドでは、本番環境における DataWorks タスクの時間プロパティ設定の基準について説明します。基本的なスケジュール設定から、複雑なビジネスシナリオに対応する高度なロジックまでを網羅しています。時間プロパティは、データ出力の適時性を決定し、本番パイプラインの安定性と決定性に直接影響します。インスタンスのライフサイクル、スケジュール時刻、実行ポリシー、フォールトトレランスを慎重に設定することで、柔軟かつ堅牢な自動スケジューリングシステムを構築できます。これにより、ビジネスロジックと計算フローを分離します。
時間設定の基本原則
DataWorks のスケジューリングシステムは、依存関係駆動と時間制約という 2 つの原則に基づいています。ノードの実行時間は、これら両方の条件が満たされた時点で決定されます。この 2 つのモードを理解することが、スケジュールを設定する上での基本となります。
スケジュール依存関係の設定に関する詳細については、「スケジュール依存関係の設定ガイド」をご参照ください。
モード 1:依存関係駆動の実行
このモードは、ビジネスフロー全体を可能な限り迅速に完了させることがビジネス目標である場合に使用します。このモードでは、フロー内のすべてのノードは、入力データの準備が整い次第実行されます。このアプローチにより、フルパス計算を最短時間で完了させることができます。
-
設定方法:最初のノード (または上流依存関係のない複数のノード) にのみ、
02:00のような特定のスケジュール時刻を設定します。すべての子孫ノードのスケジュール時刻は00:00に設定します。 -
実行ロジック:子孫ノードは、上流依存関係が満たされていないため待機状態を維持します。先祖ノードが正常に実行されるとすぐに、その子孫ノードが即座にトリガーされて実行されます。
-
設定と実行の例:
ノード
スケジュール時刻設定
実際の実行時間 (推定)
トリガーロジック
A (最初のノード)
02:0002:00指定された時刻に実行がトリガーされます。
B (下流)
00:00~02:10(A の完了後)依存関係にあるノード A が正常に実行されると、即座にノード B がトリガーされます。
C (下流)
00:00~02:18(B の完了後)依存関係にあるノード B が正常に実行されると、即座にノード C がトリガーされます。
モード 2:時間制約の実行
このモードは、フロー内のノードが外部の依存関係やビジネスルールにより、特定の時刻以降に実行される必要がある場合に使用します。例えば、フロー内のノード B が、外部のビジネスルールやシステムウィンドウの制約により、午前 5:00 以降に計算を開始する必要がある場合などです。
-
設定方法:時間制約のあるノードに、
05:00のような特定のスケジュール時刻を設定します。 -
実行ロジック:ノードが実行されるには、上流依存関係が満たされていることと、自身のスケジュール時刻に達していることの 2 つの条件を満たす必要があります。先祖ノード A が
02:00に完了したとしても、ノード B は自身のスケジュール時刻である05:00になるまで待機し、その後実行を開始します。 -
設定と実行の例:
ノード
スケジュール設定
インスタンスのランタイム
トリガーロジック
A (最初のノード)
02:0002:00指定された時刻に実行がトリガーされます。
B (時間制約あり)
05:0005:00上流依存関係 A が満たされています。ノードは自身のスケジュール時刻に達するのを待ちます。
C (時間制約あり)
08:0008:00上流依存関係 B が満たされています。ノードは自身のスケジュール時刻に達するのを待ちます。
スケジュール時刻設定の計画
重要タスクの定時完了の保証
データ出力に厳格な配信時間要件がある場合 (例:ノード E は毎日 09:00 までに完了する必要がある)、エンドポイントから逆算してビジネスフロー全体のスケジュール時刻を計画する必要があります。
|
解決策 1:手動での時間設定 |
解決策 2:依存関係駆動実行によるインテリジェントな調整 (推奨) |
|
|
|
解決策 2 は、静的計画と動的スケジューリングを組み合わせたものです。この組み合わせにより、より低いメンテナンスコストと高い運用の柔軟性で配信時間を保証します。開始点と終了点のみに焦点を当てることで手動設定を最小限に抑え、システムが中間プロセスをインテリジェントに管理できるようにします。この解決策を強く推奨します。 |
|
|
|
|
図中のデフォルト時刻 00:00 は一例です。実際には、日次タスクのデフォルトスケジュール時刻は 00:00 から 00:30 の間にランダムに生成されます。
|
ノード |
スケジュール時刻 (解決策 1) |
スケジュール時刻 (解決策 2) |
実際の実行時間 |
|
A |
|
|
|
|
B |
|
|
|
|
C |
|
|
|
|
D |
|
|
|
|
E |
|
|
|
ベースライン優先度を使用したピークシフト
依存関係駆動方式は設定が簡単ですが、多くのタスクが 00:00 のような同じ時刻に開始される原因となり、計算リソースの競合やタスクのキューイングを引き起こす可能性があります。ベースライン管理の優先度設定を使用することで、コアタスクに高い実行優先度を与えることができます。
-
タスクの優先度を特定する:オペレーショナルデータストア (ODS) 層のデータ抽出などのコアタスクと、一部の内部レポートなどの非コアタスクを区別します。
-
タスクのスケジュール優先度を設定する:ベースラインを使用して、コアタスクがリソースを取得する優先度を高めます。
-
最適化比較図:
スケジュール時刻とベースラインを組み合わせることで、スケジューリングリソースの合理的な割り当てが実現できます。これにより、優先度に基づいたインテリジェントなスケジューリングが可能になり、各タスクに個別のスケジュール時刻を設定することに伴う運用保守 (O&M) コストや人為的ミスを削減できます。
|
シナリオ |
説明 |
|
最適化前:リソース競合 |
すべてのタスク (コア A/B、レポート C/D) が |
|
最適化後:時間差実行 |
コアタスク A/B は優先度が高いため、時間内にリソースを獲得して |
複雑なシナリオの実践
クロスサイクル依存の設定
タスクの実行が、その先祖タスクの前周期のインスタンスに依存する場合、クロスサイクル依存を設定する必要があります。例えば、T+1 日の集計タスクは、T 日のすべての時間単位タスクが完了するのを待つ必要があります。
-
シナリオ:日次集計タスク B は、毎朝
02:00に実行される必要があります。そのデータソースは時間単位のタスク A です。このタスクは、前日 (T) の00:00から23:00までのすべての時間単位のインスタンスが正常に実行された後にのみ実行されなければなりません。 -
設定方法:ノード B のスケジューリング依存関係を設定する際、先祖ノード A への依存関係をクロスサイクル依存として設定します。詳細については、「前周期への依存関係 (クロスサイクル依存) の設定」をご参照ください。
[依存モード] を [他のノード] に設定します。[上流タスクのドライランプロパティをスキップ] を [いいえ] に設定します。その後、下のリストに先祖ノード A を追加します。
-
実行結果:設定後、データタイムスタンプが
2025-12-02のノード B インスタンスは、データタイムスタンプが2025-12-01のすべてのノード A インスタンスが正常に実行されるのを待ってからトリガーされます。
-
このシナリオで、タスク B に他の先祖ノードがない場合、ワークスペースのルートノードをその先祖ノードとして設定できます。
-
異なる粒度と周期にまたがる依存関係に関するその他のシナリオについては、「複雑な依存関係スケジューリング設定の原則と例 (必須)」をご参照ください。
複雑な定期スケジュールの実装
四半期ごとや半期ごとの勘定締めタスクなど、特殊な周期的パターンを持つタスクについては、スケジューリング周期とスケジューリングパラメーターを組み合わせて使用できます。
-
シナリオ:財務締めタスクは、各四半期の最終締め日に実行する必要があり、過去の四半期全体のデータに依存します。
締め日を設定する際には、通常、月をまたぐ追加注文、返金処理の取り消し、手動監査などの月末の特別項目を処理するためのバッファー期間が設けられます。
-
設定方法:
-
スケジューリング周期の設定:タスクの時間プロパティで、スケジューリングに「年」を選択します。月を
1, 4, 7, 10と指定し、日付には月の最終日を選択します。DataWorks は、月の日数 (30/31 日) の違いやうるう年を自動的に処理します。 -
スケジューリングパラメーターの使用:コード内で、スケジューリングパラメーターまたはユーザー定義関数を使用して、必要なデータの日付範囲を動的に計算します。例えば、現在のデータタイムスタンプに対応する四半期の開始日と終了日を取得できます。詳細については、「サポートされているスケジューリングパラメーターのフォーマット」をご参照ください。
-
-
実行ロジック:DataWorks は、30 日か 31 日 (うるう年の場合は 2 月 29 日も) のどちらが「最終日」であるかを自動的に識別します。この期間中、月末でない日のインスタンスは自動的に「ドライラン」を実行します。これにより、依存関係ロジックの継続性と、財務計算の正確なトリガーの両方が保証されます。
取引日スケジュールへのスケジューリングカレンダーの使用
スケジュール時刻 (cron 式) は、タスクがスケジューリング周期内でいつ実行されるかを定義します。スケジューリングカレンダーは、実行日のフィルターとして機能します。これらの機能を組み合わせることで、取引日やプロモーション日などの特定の営業日にのみタスクを実行するように、正確に制御できます。
-
シナリオ:証券会社の取引決済タスクは、すべての取引日 (非祝日) の 22:00 に実行する必要があります。週末や祝日の場合、タスクは自動的に実行を停止し、無効なインスタンスの作成やドライランによるリソースの浪費を回避しなければなりません。
-
ソリューション:スケジューリングカレンダー + スケジュール時刻
-
カスタムカレンダーの作成:DataWorks のリソースセンターで、年間のすべての取引日を手動または自動で同期することにより、「取引カレンダー」を維持します。詳細については、「スケジューリングカレンダーの設定」をご参照ください。
-
スケジューリングプロパティの設定:タスクが毎日
22:00にトリガーされるように設定し、カスタムの「取引カレンダー」を選択します。
-
-
実行ロジック:
-
取引日:システムは現在の日付がカレンダーに含まれていることを検出します。タスクは定刻の 22:00 に実行を開始します。
-
非取引日 (祝日など):システムはこのタスクのインスタンス生成を自動的にスキップするか、生成されたインスタンスは「ドライラン」状態となり、実際のコンピューティングリソースを消費しません。
-
スケジューリングカレンダーは、実行日のフィルターと見なすことができます。時間単位または分単位のスケジューリングと組み合わせることで、日付と時刻の両方をフィルタリングできます。
例えば、毎日 08:00 と 18:00 に実行するように設定された時間単位のタスクが、月曜日と金曜日のみを含むスケジューリングカレンダーに関連付けられている場合、最終的には月曜日と金曜日の指定された時刻にのみ実行されます。
ベストプラクティス
1. 静的スケジューリングの計画と構成
目標:階層化戦略を用いて、スケジューリングロジックとビジネスロジックを分離します。
主要な戦略:
-
線形ビジネスフロー
最初のノードにのみスケジュール時刻を設定します。例えば、最初のノードのスケジュール時刻を
07:00に設定します。下流タスクは依存関係を通じて自動的にトリガーされ、実行効率を最大化します。 -
時間依存タスク
-
特定のタスクに対して、個別に正確なスケジュール時刻を設定します。時刻を設定する際、先祖ノードのスケジュール時刻を子孫ノードより後に設定しないようにしてください。これにより、子孫ノードが時間通りに実行できなくなる可能性があります。
-
スケジューリングカレンダーと有効期間を使用して、タスクがアクティブな期間をコントロールします。例えば、タスクを 2026 年 1 月 1 日から 2026 年 12 月 31 日までの平日のみ実行するように制御します。
-
-
動的スケジューリングパラメーター
${yyyymmdd}のようなスケジューリングパラメーターを使用して、時間パラメーターを動的に置き換えます。
2. インテリジェントベースラインによる動的コントロール
目標:コアタスクの配信時間を保証し、手動介入のコストを削減します。
前提条件:ベースラインを作成し、タスクの優先度分類を完了していること。
主要なメカニズム:
-
コミット時間と優先度の定義:
コアタスクに対して、09:00 のようなコミットされた完了時刻を定義し、高優先度ベースラインにアタッチします。システムは優先度に基づいてクリティカルパスを自動的に識別し、ODS レイヤーの抽出などの高優先度タスクがコンピューティングリソースへ優先的にアクセスできるようにします。
-
リソースの自動「ピークシフト」:
非コアタスクごとに手動で時差開始時刻を設定する必要はありません。スケジューリングエンジンは、ピークタイム中のリソース競合を避けるために、非コアのレポートタスクを自動的にキューに入れ、クリティカルパスへのリソース供給を優先します。
-
動的予測とリアルタイムアラート:
過去のランタイムに基づき、システムは早朝にその日のパイプラインが配信時間に間に合わないかどうかを動的に予測できます。07:00 の時点で 09:15 への遅延が予測された場合、システムは直ちにアラートをトリガーし、クリティカルパス上のボトルネックノードをハイライト表示します。これにより、アプローチが「事後復旧」から「事前介入」に変わります。
ベストプラクティスは、バックワードプランニングから導き出された最新開始時刻とインテリジェントベースラインを組み合わせることです。この方法では、静的計画によって開始点を設定し、その後ベースラインを使用してパス全体で優先度に基づいた動的スケジューリングを行います。これにより、手動メンテナンスのコストが削減され、計画から予測まで信頼性の高いシステムが構築され、コアデータの出力における高い決定性が保証されます。