DataWorks のスケジューリング依存関係とは、先祖と子孫の自動トリガーノード間の依存関係です。ノードは、スケジューリング依存関係に基づいて順番に実行されるようにスケジュールされます。子孫ノードは、先祖ノードの実行が完了した後に実行を開始します。これにより、有効なビジネスデータが可能な限り早く生成されることが保証されます。このトピックでは、スケジューリング依存関係の構成が正しくないためにデータ例外が発生しないように、ノードのスケジューリング依存関係を構成する方法について説明します。ノードのスケジューリング依存関係を構成する前に、このトピックを読むことをお勧めします。
背景情報
DataWorks のスケジューリング依存関係は、スケジューリングシナリオにおけるノード間の関係を定義します。ノードのスケジューリング依存関係を構成すると、ノードは先祖ノードが正常に実行された後にのみ実行を開始できます。スケジューリング依存関係は、ノードが先祖ノードから実行に必要なデータを取得できるようにするのに役立ちます。ノードの先祖ノードが正常に実行されると、DataWorks は先祖ノードのステータスに基づいて、先祖ノードによって最新のデータが生成されたことを検出します。次に、ノードは生成されたデータを取得します。これにより、ノードが必要なデータを取得できないことを防ぎます。
注意事項
ノードのスケジューリング依存関係を構成すると、ノードは先祖ノードが正常に実行された後にのみ実行を開始できます。そうでない場合、ノードが先祖ノードからデータを取得する際にデータ品質の問題が発生する可能性があります。
ノードが実行される時間は、スケジューリング時間(スケジューリングシナリオにおけるノードの予想実行時間)と、先祖ノードの実行が完了した時間によって決まります。つまり、ノードの実際の実行時間は、先祖ノードのスケジューリング時間にも依存します。先祖ノードの実行が完了しない場合、ノードのスケジューリング時間が先祖ノードのスケジューリング時間よりも早くても、ノードはスケジューリング時間に実行を開始できません。ノードの実行条件については、「インテリジェント診断機能を使用する」をご参照ください。
スケジューリング依存関係の設定ガイド
DataWorks のノード間のスケジューリング依存関係により、子孫ノードは先祖ノードから有効なデータを取得できます。これは、先祖ノードと子孫ノードによって生成されたテーブル間に強力なリネージが存在することを示しています。ビジネス要件に基づいて、ノードと先祖ノードによって生成されたテーブル間のリネージに基づいて、ノードのスケジューリング依存関係を構成するかどうかを決定できます。次の図は、ノードのスケジューリング依存関係を構成する手順を示しています。
方法 1: カスタムスケジューリング依存関係を構成する
ビジネス要件に基づいて、次のシナリオでノードのスケジューリング依存関係を構成できます。シナリオ 1: ノードとその先祖ノードの間に強力なリネージが存在しません。たとえば、ノードは先祖ノードの出力テーブルの特定のパーティションのデータに強く依存していませんが、パーティションキーの値が最大のパーティションのデータのみに依存しています。シナリオ 2: ノードは、自動トリガーノードによって生成されないテーブルデータに依存しています。たとえば、ノードはオンプレミス マシンからアップロードされたテーブルデータに依存しています。ビジネス要件に基づいて、次の方法を使用してノードのスケジューリング依存関係を構成できます。
ワークスペースのルートノードを先祖ノードとして指定する
たとえば、データ同期ノードが他のビジネスデータベースのデータに依存している場合、または SQL ノードがリアルタイム同期ノードによって生成されたテーブルデータを処理する場合、ワークスペースのルートノードを先祖ノードとして使用できます。
ゼロロードノードを先祖ノードとして指定する
ワークスペースで、ワークフローに多数のノードが含まれている場合、またはノード間の関係が複雑な場合は、ゼロロードノードを使用して、ワークフロー内のノードを一元管理できます。管理するノードの先祖ノードとして、ゼロロードノードを指定できます。このようにして、ワークスペース内のデータ転送パスがより明確になります。たとえば、ゼロロードノードを使用して、ワークフロー内のノードのスケジューリング時間を決定し、ワークフロー内のノードを一元的にスケジュールまたはフリーズできます。
方法 2: テーブルデータリネージに基づいてノードのスケジューリング依存関係を構成する
テーブルデータリネージに基づいてノードのスケジューリング依存関係を構成する場合、システムはテーブルデータ間に強力なリネージが存在すると判断します。これは、ノードによって生成されたテーブルデータが、先祖ノードによって生成されたテーブルデータに依存していることを示しています。テーブルリネージに基づいてノードのスケジューリング依存関係を構成する前に、ノードによって生成されたテーブルデータとその先祖ノードの間に強力なリネージが存在するかどうかを確認する必要があります。強力なリネージが存在するかどうかを確認するには、先祖ノードがデータを生成できなかった場合にノードが有効なデータを取得できるかどうかを確認します。ノードが有効なデータを取得できない場合は、強力なリネージが存在します。
番号 | 目標 | 説明 |
1 と 2 | 現在のノードとその先祖ノードによって生成されたテーブルデータの間に強力なリネージが存在するかどうかを確認します。 | 現在のノードがスケジューリング時間に実行できるように、現在のノードとその先祖ノードによって生成されたテーブルデータの間に強力なリネージが存在するかどうかを確認し、テーブルデータ間のリネージに基づいて現在のノードのスケジューリング依存関係を構成するかどうかを決定できます。 |
3 | 現在のノードが依存するテーブルデータが自動トリガーノードによって生成されるかどうかを確認します。 | DataWorks は、自動トリガーノードのテーブルデータがノードのステータスに基づいて生成されるかどうかを判断します。ただし、DataWorks は、自動トリガーではないノードのテーブルデータがノードのステータスに基づいて生成されるかどうかを判断できません。自動トリガーノードによって生成されないテーブルを使用する場合、スケジューリング依存関係の構成はサポートされていません。 |
4、5、および 6 | テーブルデータリネージに基づいて、現在のノードのスケジューリング依存関係を決定および構成します。 | 次の条件に基づいて、現在のノードとその先祖ノードの間に同一サイクルまたは前サイクルのスケジューリング依存関係を構成するかどうかを決定できます。現在のノードが前日または当日に先祖ノードによって生成されたデータに依存する必要があるかどうか、および現在のノードが時間または分でスケジュールされている場合に、現在のサイクルで現在のノードに対して生成されたインスタンスが前のサイクルでノードに対して生成されたインスタンスに依存する必要があるかどうか。 |
7、8、および 9 | スケジューリング依存関係をプレビューします。 | スケジューリング依存関係を構成した後、次の操作を実行して、本番環境でのノードのスケジューリング依存関係がビジネス要件を満たしているかどうかを確認できます。スケジューリング依存関係の構成後に現在のノードのスケジューリング依存関係をプレビューする、ノードをデプロイする前にコード解析結果比較機能を使用する、ノードを本番環境にデプロイした後、オペレーションセンターの [自動トリガーノード] ページで現在のノードを表示する。 |
テーブルデータリネージに基づいてノードのスケジューリング依存関係を構成する
DataWorks では、テーブルデータリネージは、テーブルデータを生成するノード間のスケジューリング依存関係によって示されます。ノードによって生成されたテーブルデータとその先祖ノードの間に強力なリネージが存在することを確認した後、次の条件に基づいて、ノード間に同一サイクルまたは前サイクルのスケジューリング依存関係を構成するかどうかを決定できます。現在のノードが前日または当日に先祖ノードによって生成されたデータに依存する必要があるかどうか、および現在のノードが時間または分でスケジュールされている場合に、現在のサイクルで現在のノードに対して生成されたインスタンスが前のサイクルでノードに対して生成されたインスタンスに依存する必要があるかどうか。
DataWorks では、スケジューリング頻度の異なるノード間にスケジューリング依存関係を構成できます。ノードのインスタンスの数は、スケジューリング頻度とノードのスケジューリングサイクルの数によって決まります。先祖ノードのスケジューリングサイクルの数は、子孫ノードのスケジューリングサイクルの数と異なる場合があります。異なるスケジューリングサイクルでは、先祖インスタンスと子孫インスタンス間のスケジューリング依存関係が異なる場合があります。スケジューリング依存関係がビジネス要件を満たしていることを確認するために、先祖インスタンスのスケジューリングサイクルの数とスケジューリング時間が子孫インスタンスのスケジューリングサイクルの数とスケジューリング時間と異なる場合は、プレビュー機能を使用して先祖インスタンスと子孫インスタンス間のスケジューリング依存関係をプレビューすることをお勧めします。詳細については、「複雑な依存関係シナリオにおけるスケジューリング構成の原則とサンプル」をご参照ください。
シナリオ固有のスケジューリング依存関係の選択と構成
ノードがスケジュールされると、ノードコードのノードのスケジューリングパラメーターを使用して、現在のノードインスタンスが依存する特定の先祖インスタンスが決定されます。次の図は、決定ロジックを示しています。
ノードのスケジューリングパラメーターは、ノードのデータタイムスタンプとスケジューリング時間、およびスケジューリングパラメーターの値の形式に基づいて、特定の値に自動的に置き換えられます。このようにして、スケジューリングパラメーターの値は、ノードのスケジューリング時に動的に置き換えられます。これにより、クエリされたデータと生成されたパーティションデータの変更も実装されます。
テーブルデータリネージに基づいてノードのスケジューリング依存関係を構成するには、次の操作を実行します。
テーブルデータリネージを確認する
ノードによって生成されたテーブルデータがビジネス要件を満たしていることを確認するには、先祖ノードが当日に必要なビジネスデータを生成していることを確認する必要があります。これは、ノードが当日に取得するデータが、先祖ノードによって当日に生成されたデータであることを示しています。
ノードが時間または分でスケジュールされている場合は、ノードの各インスタンスが必要なテーブルパーティションデータを生成していることを確認する必要があります。
別のワークスペースにある先祖ノードへの依存関係など、先祖ノードのスケジューリングパラメーターの構成を表示できないシナリオでテーブルデータリネージを確認する方法については、「テーブルのリネージを確認する」をご参照ください。
テーブルリネージに基づいてスケジューリング依存関係タイプを選択する
次の表に、テーブル間のリネージに基づいて選択できるスケジューリング依存関係タイプを示します。
スケジューリング依存関係タイプ
リネージ
子孫ノードは、当日に先祖ノードによって生成されたテーブルデータに依存します。
子孫ノードは、前日に先祖ノードによって生成されたテーブルデータに依存します。
時間と分でスケジュールされたノードの特別な依存関係シナリオ:
現在のサイクルで時間または分でスケジュールされたノードに対して生成されたインスタンスは、前のサイクルで同じノードに対して生成されたインスタンスに依存します。詳細については、「前のサイクルで現在のノードに対して生成されたインスタンスへの依存関係」をご参照ください。
時間でスケジュールされたノード A は、時間でスケジュールされたノード B に依存し、ノードのスケジューリング時間は同じです。ノード A のクロスサイクルのスケジューリング依存関係を構成して、02:00 に生成されたノード A のインスタンスが 01:00 に生成されたノード B のインスタンスに依存するようにすることができます。同じロジックが、分でスケジュールされ、分でスケジュールされた別のノードに依存するノードにも適用されます。
スケジューリング依存関係を構成できないシナリオ
DataWorks の自動トリガーノード間のスケジューリング依存関係は、ノードによって生成されたテーブルが特定の時点で定期的に更新され、子孫の自動トリガーノードが先祖の自動トリガーノードから有効なデータを取得するように構成されています。したがって、DataWorks は、DataWorks の自動トリガーノードによって生成されないテーブルを監視できません。DataWorks での定期的なスケジューリングに基づいて生成されないデータを持つテーブルには、次のテーブルが含まれますが、これらに限定されません。
リアルタイム同期ノードによって生成されたテーブル
オンプレミス マシンから DataWorks にアップロードされたテーブル
ディメンションテーブル
手動でトリガーされたノードによって生成されたテーブル
データが定期的に更新されるが、DataWorks の自動トリガーノードによって生成されないテーブル
テーブルデータが DataWorks での定期的なスケジューリングに基づいて生成されないノードの場合、ノードのカスタムスケジューリング依存関係を構成できます。詳細については、このトピックのスケジューリング依存関係を構成するセクションをご参照ください。
スケジューリング依存関係を確認する
ノードのスケジューリング依存関係を構成した後、次の表に示す方法を使用して、スケジューリング依存関係がビジネス要件を満たしているかどうかを確認できます。
方法 | 説明 |
プレビュー機能を使用して、ノードの現在のスケジューリング依存関係がビジネス要件を満たしているかどうかを確認できます。 DataWorks では、分、時間、日、週、月、または年でスケジュールされたノード間にスケジューリング依存関係を構成できます。ノードのスケジューリングサイクルの数は、ノードのスケジューリング頻度によって異なります。 各スケジューリングサイクルで、ノードのインスタンスが生成されます。先祖インスタンスと子孫インスタンス間の依存関係は、インスタンスを生成する先祖ノードと子孫ノードのスケジューリング頻度によって異なります。この方法は、日単位でスケジュールされたノードが時間単位でスケジュールされたノードに依存する場合、時間単位でスケジュールされたノードが分単位でスケジュールされたノードに依存する場合、またはクロスサイクルのスケジューリング依存関係を構成する場合に使用できます。この方法により、ノードが期待どおりにスケジュールされ、予期しないスケジューリング依存関係によってノードの実行が遅延するのを防ぎます。複雑な依存関係シナリオでスケジューリング依存関係を構成する方法については、「複雑な依存関係シナリオにおけるスケジューリング構成の原則とサンプル」をご参照ください。 | |
コード解析結果比較機能を使用して、ノードの現在のスケジューリング依存関係に加えた変更がビジネス要件を満たしているかどうかを確認し、本番環境のデータへの変更の影響を確認できます。 自動解析機能を有効にしていて、自動解析機能に基づいて取得されたノードのスケジューリング依存関係を変更する場合は、ノードをコミットするときに加えた変更を確認する必要があります。これにより、本番環境でデータが期待どおりに生成されます。この方法により、スケジューリング依存関係の変更が本番環境でのノードのデータの生成に影響を与えないことが保証されます。 | |
この方法を使用して、ノードをデプロイした後に、オペレーションセンターの本番環境でのノードのスケジューリング依存関係がビジネス要件を満たしているかどうかを確認できます。
|
追加情報
このセクションでは、一般的なスケジューリング依存関係シナリオについて説明します。スケジューリング依存関係に関するよくある質問については、「スケジューリング依存関係」をご参照ください。
ノードの一意性
ノードは、開発環境と本番環境で異なるスケジューリング依存関係の構成を持つことができますが、ノードは一意である必要があります。
ノードをアンデプロイする前に、開発環境と本番環境の両方からノードのすべての子孫ノードを削除する必要があります。ノードの一意性のため、DataWorks でノードをアンデプロイする前に、ノードのすべての子孫ノードを削除し、子孫ノードの先祖ノードとしてノードを再構成してから、操作をコミットしてデプロイする必要があります。これにより、子孫ノードが有効なデータを取得し、期待どおりに実行されることが保証されます。ノードをアンデプロイする前に、開発環境と本番環境の両方でノードのスケジューリング依存関係が削除されていることを確認してください。
インスタンス生成モード
ノードを作成するときは、インスタンス生成モードパラメーターがノードとその先祖ノードで同じ値に設定されていることを確認してください。先祖ノードのパラメーターを [デプロイ直後] に設定し、ノードのパラメーターを [翌日] に設定すると、ノードが孤立ノードになる可能性があります。
既存のノードのスケジューリング頻度を変更し、[インスタンス生成モード] パラメーターを [デプロイ直後] に設定します。ノードのスケジューリング依存関係を変更した後、生成されたノードのインスタンスを自動的に削除することはできません。その結果、当日に生成されたノードのインスタンスのスケジューリング依存関係は複雑になります。詳細については、「インスタンス生成モードパラメーターの値を [デプロイ直後] に変更した場合の、当日に生成されたノードのインスタンスのスケジューリング依存関係への影響」をご参照ください。
API 操作を呼び出してジョブを更新するときに 200 を超えるアップストリーム依存関係
エラーメッセージ: '1 つのファイルに入力は 200 個までしか設定できません 1 つのファイルに入力は 200 個までしか設定できません。'
DataStudio を使用して先祖ノードと子孫ノードの間にゼロロードノードを追加し、現在のノードの直接のアップストリーム依存関係の数を減らします。ゼロロードノードの構成方法については、「ゼロロードノードを作成して使用する」をご参照ください。