プロジェクトディレクトリ内のノードとワークフローは、多くの場合、定期的なスケジューリングが必要です。ノードまたはワークフローのスケジューリング設定パネルで、スケジューリング期間、依存関係、パラメーターなどのスケジューリングプロパティを設定できます。このトピックでは、スケジューリングプロパティの設定方法について説明します。
前提条件
ノードが作成されている必要があります。DataWorks では、タスクはノードに基づいて開発されます。異なるエンジンタイプのタスクは、異なるノードタイプとしてカプセル化されています。要件に基づいてノードタイプを選択できます。詳細については、「ノード開発」をご参照ください。
定期スケジューリングスイッチがオンになっている必要があります。DataWorks ワークスペース内のタスクは、[定期スケジューリングを有効にする] スイッチがオンになっている場合にのみ、その設定に基づいて自動的にスケジューリングされます。このスイッチは、ワークスペースの [スケジューリング設定] ページでオンにできます。詳細については、「システム設定」をご参照ください。
注意事項
タスクのスケジューリング設定は、実行時のプロパティを定義するだけです。タスクは、本番環境に公開された後にのみ、これらの設定に基づいてスケジューリングされます。
スケジューリング時間は、タスクの期待される実行時間のみを指定します。実際の実行時間は、先祖ノードの実行ステータスに依存します。タスクの実行条件の詳細については、「実行中のタスクの診断」をご参照ください。
DataWorks では、異なるタイプのタスク間に依存関係を作成できます。先に進む前に、「複雑な依存関係のスケジューリング設定の原則と例」のドキュメントを読み、このシナリオにおける DataWorks の事前設定された依存関係を理解することを推奨します。
DataWorks では、指定したスケジューリングタイプと期間に基づいて、スケジューリングノードの定期インスタンスが生成されます。例えば、ノードを 1 時間ごとに実行するように設定すると、毎日対応する数の時間単位のインスタンスが生成されます。ノードはこれらの定期インスタンスを使用して自動的に実行されます。詳細については、「定期インスタンスの表示」をご参照ください。
スケジューリングパラメーターを使用する場合、DataWorks スケジューリングノードの各サイクルのコード内のリクエストパラメーターは、そのサイクルのスケジュールされた時間と指定したスケジューリングパラメーター式によって決定されます。リクエストパラメーターがスケジューリングパラメーターの設定と置換にどのように関連するかについての詳細は、「スケジューリングパラメーターのソースと式」をご参照ください。
ワークフローには、ワークフローノードと内部ノードが含まれます。これらの依存関係は複雑です。このトピックでは、個々のノードの依存関係とスケジューリングについてのみ説明します。ワークフローのスケジューリング依存関係の詳細については、「定期ワークフロー」をご参照ください。
スケジューリング設定ページへの移動
DataWorks コンソールの [ワークスペース] ページに移動します。トップナビゲーションバーで、目的のリージョンを選択します。目的のワークスペースを見つけ、[操作] 列の を選択します。
スケジューリング設定ページに移動します。
DataStudio ページで、ノードを見つけてその設定タブを開きます。
ノード設定タブの右側のナビゲーションバーで、[スケジューリング設定] をクリックして、ノードのスケジューリング設定ページを開きます。
ノードのスケジューリングプロパティの設定
ノードのスケジューリング設定ページでは、ノードの [スケジューリングパラメーター]、[スケジューリングポリシー]、[スケジューリング時間]、[スケジューリング依存関係]、および [ノード出力パラメーター] を設定する必要があります。
(任意) スケジューリングパラメーター
ノードの編集時にコード内で変数を定義した場合、このセクションで変数に値を割り当てる必要があります。
スケジューリングパラメーターは、スケジュールされたタスクのビジネス時間とスケジューリングパラメーターの値のフォーマットに基づいて、特定の値に自動的に置き換えられます。これにより、タスクのスケジューリング時間内でパラメーターを動的に置き換えることができます。
スケジューリングパラメーターの設定
スケジューリングパラメーターは、以下のいずれかの方法で定義できます。
方法 | 説明 | 設定図 |
パラメーターの追加 | スケジューリングノードに複数のスケジューリングパラメーターを設定できます。複数のスケジューリングパラメーターを使用する場合は、[パラメーターの追加] をクリックします。
|
|
コードからパラメーターを読み込む | この方法は、現在のノードのコードで定義されている変数名を自動的に検出し、検出された変数名を後で使用するためにスケジューリングパラメーターとして追加するために使用されます。 説明 ほとんどの場合、変数名はコード内で PyODPS および一般的な Shell ノードの変数名の定義方法は、他のタイプのノードとは異なります。異なるタイプのノードのスケジューリングパラメーターのフォーマットの詳細については、「異なるタイプのノードのスケジューリングパラメーター設定例」をご参照ください。 |
|
サポートされているスケジューリングパラメーターのフォーマット
詳細については、「スケジューリングパラメーターのソースと式」をご参照ください。
本番環境でのタスクのスケジューリングパラメーター設定の確認
定期タスクの実行時に予期しないスケジューリングパラメーターによる問題を防ぐため、タスクが公開された後、オペレーションセンターの [定期タスク] ページに移動して、本番環境の定期タスクのスケジューリングパラメーター設定を確認することを推奨します。定期タスクの表示方法の詳細については、「定期タスクの管理」をご参照ください。
スケジューリングポリシー
スケジューリングポリシーは、定期タスクのインスタンス生成モード、スケジューリングタイプ、計算リソース、およびリソースグループを定義します。
パラメーター | 説明 |
インスタンス生成モード | ノードが送信され、本番環境の CDN マッピングシステムに公開されると、プラットフォームはノードに設定された [インスタンス生成モード] に基づいて、自動スケジューリング用の [定期インスタンス] を生成します。
|
スケジューリングタイプ |
|
タイムアウト期間 | タイムアウト期間を設定すると、実行時間が指定されたタイムアウト期間を超えた場合にタスクは自動的に実行を停止します。設定の詳細は次のとおりです:
|
再実行プロパティ | 特定の状況でノードが再実行されるように設定します。 再実行プロパティは空にできません。サポートされているタイプとその適用シナリオは次のとおりです:
|
失敗時の自動再実行 | この機能を有効にすると、タスクの実行が失敗した場合 (ユーザーがタスクを能動的に停止した場合を除く)、CDN マッピングシステムは再試行回数と再試行間隔に基づいて自動的に再実行をトリガーします。
説明
|
計算リソース | タスクの実行に必要な DPI エンジンリソースを設定します。新しいリソースを作成するには、計算リソース管理を通じて行うことができます。 |
計算クォータ | MaxCompute SQL ノードまたは MaxCompute Script ノードでタスクを実行するために必要な計算クォータを設定して、計算ジョブに計算リソース (CPU とメモリ) を提供できます。 |
スケジュールリソースグループ | タスクの実行に使用するスケジュールリソースグループを設定します。必要に応じて選択してください。
|
データセット |
|
スケジューリング時間
スケジューリング時間は、スケジューリングノードの自動実行の期間、時間、およびその他の情報を設定するために使用されます。
ノードがワークフロー内にある場合、[スケジューリング時間] に関連するパラメーターは、ワークフローページの [スケジューリング設定] で設定されます。ノードがワークフロー内にない場合、[スケジューリング時間] は各ノードの [スケジューリング設定] で設定されます。
注意事項
タスクのスケジューリング頻度は、その先祖タスクのスケジューリング期間とは独立しています
タスクのスケジューリング頻度は、自身のスケジューリング期間に依存し、その先祖タスクのスケジューリング期間には依存しません。
DataWorks は、異なるスケジューリング期間を持つタスク間の依存関係をサポートします
DataWorks では、指定したスケジューリングタイプと期間に基づいて、スケジューリングノードの定期インスタンスが生成されます。例えば、ノードを 1 時間ごとに実行するように設定すると、毎日対応する数の時間単位のインスタンスが生成されます。ノードはこれらのインスタンスを使用して実行されます。定期タスクに設定された依存関係は、本質的にタスクが生成するインスタンス間の依存関係です。先祖ノードと子孫ノードのスケジューリングタイプが異なる場合、生成される定期インスタンスの数とその依存関係も異なります。異なるスケジューリング期間を持つ先祖ノードと子孫ノード間の依存関係の詳細については、「依存関係タイプの選択 (クロスサイクル依存)」をご参照ください。
毎日スケジュールされないタスクはドライランを実行します
DataWorks では、週次や月次など、毎日スケジュールされないタスクは、スケジュールされた時間外にドライランを実行します。タスクのスケジュールされた時間に達すると、すぐに成功ステータスを返します。下流に日次スケジューリングタスクが存在する場合、下流タスクの実行をトリガーします。この場合、先祖ノードはドライランを実行し、子孫スケジューリングノードはスケジュールどおりに実行されます。
タスク実行時間の説明
この設定は、タスクの期待されるスケジューリング時間を定義するだけです。タスクの実際の実行時間は、先祖ノードのスケジュールされた時間、タスク実行リソースの可用性、タスクの実際の実行条件など、複数の要因に影響されます。詳細については、「タスクの実行条件」をご参照ください。
スケジューリング時間の設定
パラメーター | 説明 |
スケジューリング期間 | スケジューリング期間は、スケジューリングシナリオでタスクが自動的に実行される期間です。これは、本番環境の CDN マッピングシステムでノード内のコードロジックが実際に実行される頻度を定義するために使用されます。指定したスケジューリングタイプと期間に基づいて、スケジューリングノードの定期インスタンスが生成されます。例えば、ノードを 1 時間ごとに実行するように設定すると、毎日指定された数の時間単位のインスタンスが生成されます。定期タスクは、定期インスタンスを使用して自動的に実行されます。
重要 週次、月次、および年次のスケジューリングでは、スケジューリング時間外でもインスタンスは毎日生成されます。インスタンスは成功状態を示しますが、実際にはドライランを実行し、タスクを実際には実行しません。 |
有効日 | スケジューリングノードは有効日範囲内で有効になり、自動的にスケジューリングされます。有効日を超えたタスクは自動的にスケジューリングされません。これらのタスクは期限切れタスクです。[O&M ダッシュボード] で期限切れタスクの数を確認し、必要に応じて非公開にすることができます。 |
Cron 式 | この式は時間プロパティの設定に基づいて自動的に生成されるため、設定する必要はありません。 |
スケジューリング依存関係
DataWorks におけるタスクのスケジューリング依存関係とは、スケジューリングシナリオにおけるノード間の有向非巡回グラフ (DAG) を指します。子孫ノードタスクは、その先祖ノードタスクがすべて正常に実行された後にのみ実行を開始します。スケジューリング依存関係を設定することで、スケジューリングタスクが実行時に正しいデータを取得できるようになります。先祖ノードが正常に実行されると、DataWorks は先祖テーブルの最新データが生成されたことを検出し、子孫ノードがデータを取得できるようになります。これにより、先祖テーブルのデータが生成されていないために子孫ノードがデータの取得に失敗するのを防ぎます。
注意事項
ノードの依存関係を設定した後、子孫ノードの実行条件は、依存するすべての先祖ノードが正常に実行されていることです。そうでない場合、現在のタスクはデータの取得時にデータ品質の問題に遭遇する可能性があります。
タスクの実際の実行時間は、自身のスケジュールされた時間と先祖タスクの完了時間の両方に依存します。先祖タスクがまだ実行を完了していない場合、そのスケジュールされた時間が先祖タスクよりも早くても、子孫タスクは実行されません。タスクの実行条件の詳細については、「実行中のタスクの診断」をご参照ください。
スケジューリング依存関係の設定
DataWorks におけるタスク依存関係の主な目的は、子孫ノードがデータを正しく取得できるようにすることです。これは本質的に、先祖テーブルと子孫テーブルの間のデータリネージ依存関係です。ビジネスニーズに応じて、テーブルのデータリネージに基づいてスケジューリング依存関係を設定するかどうかを選択できます。ノードのスケジューリング依存関係を設定するプロセスは次のとおりです。
ノードの依存関係を設定した後、デフォルトでは先祖ノードと子孫ノードの出力テーブル間に強い依存関係が存在します。したがって、タスクのスケジューリング依存関係を設定する際には、強いデータリネージ依存関係が存在するかどうかを確認する必要があります。子孫ノードのデータ出力が先祖ノードのデータ出力に依存する場合、強いデータリネージ依存関係が存在します。この確認により、先祖データが生成されていないために現在のタスクがデータを取得できないという問題を回避できます。
順序 | 説明 |
① | 現在のタスクが予期しない時間に実行されるのを防ぐために、まずテーブル間に強い依存関係があるかどうかを評価し、データリネージに基づいてスケジューリング依存関係を設定する必要があるかどうかを確認できます。 |
② | 現在のシナリオに、定期タスクによって生成されたテーブルデータが含まれているかどうかを確認します。DataWorks で定期スケジュールによって生成されないテーブルデータの場合、DataWorks はタスクの実行ステータスを通じてデータ出力を監視できません。そのため、一部のテーブルはスケジューリング依存関係の設定をサポートしていません。 DataWorks で定期スケジュールによって生成されないデータを持つテーブルには、以下のようなタイプが含まれますが、これらに限定されません:
|
③④ | 先祖ノードの昨日または今日のデータに依存する必要があるか、また、時間単位または分単位のタスクが自身の前の時間または分のインスタンスに依存する必要があるかに基づいて、先祖ノードの同一サイクルまたは前のサイクルに依存するかを選択します。
説明 データリネージに基づくスケジューリング依存関係シナリオの設定の詳細については、「依存関係タイプの選択 (同一サイクル依存)」をご参照ください。 |
⑤⑥⑦ | 依存関係が設定され、本番環境に公開された後、オペレーションセンターの [定期タスク] セクションでタスクの依存関係が期待どおりであるかを確認できます。 |
カスタムノード依存関係の設定
DataWorks のタスク間に強いデータリネージ依存関係が存在しない場合、または依存するデータが定期スケジューリングノードによって生成されたテーブルからのものでない場合は、ノードの依存関係をカスタマイズできます。例えば、タスクが先祖データの特定のパーティションに強く依存せず、現在の時間に最新のパーティションからデータを取得するだけの場合などです。別の例として、データがローカルにアップロードされたテーブルからのものである場合です。次の方法でカスタム依存関係を設定できます:
ワークスペースのルートノードに依存する
同期タスクの入力データが他のビジネスデータベースから取得されるシナリオや、SQL タイプのタスクがリアルタイム同期タスクによって生成されたテーブルデータを処理するシナリオでは、依存関係をワークスペースのルートノードに直接アタッチできます。
ゼロロードノードに依存する
ワークスペースに多数または複雑なビジネスプロセスが含まれている場合は、ゼロロードノードを使用してそれらを管理できます。中央管理が必要なノードの依存関係を特定のゼロロードノードにアタッチして、ワークスペース内のデータ転送パスを明確にすることができます。例えば、ビジネスプロセスの全体的なスケジューリング時間を制御したり、凍結 (スケジューリングの無効化) を含む全体的なスケジューリングを制御したりできます。
ノード出力パラメーター
先祖ノードの出力パラメーターとその値を定義した後、子孫ノードの入力パラメーターを定義し、その値を先祖ノードの出力パラメーターを参照するように設定できます。これにより、子孫ノードはこのパラメーターを使用して、先祖ノードから渡された値を取得できます。
注意事項
ノードの [出力パラメーター] は、子孫ノードの入力パラメーターとしてのみ使用されます。子孫ノードのスケジューリングパラメーターセクションにパラメーターを追加し、[操作] 列の
をクリックして先祖パラメーターに関連付けることができます。一部のノードは、先祖ノードのクエリ結果を子孫ノードに直接渡すことはできません。先祖ノードのクエリ結果を子孫ノードに渡すには、代入ノードを使用できます。詳細については、「代入ノード」をご参照ください。ノード出力パラメーターをサポートするノードは、
EMR Hive、EMR Spark SQL、ODPS Script、Hologres SQL、AnalyticDB for PostgreSQL、およびMySQLノードです。
ノード出力パラメーターの設定
[ノード出力パラメーター] の値は、[定数] または [変数] にすることができます。
出力パラメーターを定義し、現在のノードを送信した後、子孫ノードのスケジューリングパラメーターを設定する際に、[先祖ノードの出力パラメーターをバインド] を選択して、子孫ノードの入力パラメーターとして使用できます。

パラメーター名:定義された出力パラメーターの名前。
パラメーター値:出力パラメーターの値。値のタイプは定数または変数にすることができます:
定数は固定の文字列です。
変数は、システムでサポートされているグローバル変数、組み込みのスケジューリングパラメーター、またはカスタムパラメーターにすることができます。
関連ドキュメント
スケジューリングパラメーター:詳細については、「スケジューリングパラメーターのフォーマット」をご参照ください。
スケジューリングポリシー:
詳細については、「公開後すぐにインスタンスを生成」をご参照ください。
詳細については、「タスクのドライラン」をご参照ください。
スケジューリング時間:詳細については、「スケジューリング時間」をご参照ください。
スケジューリング依存関係:
詳細については、「クロスサイクル依存」をご参照ください。
詳細については、「同一サイクル依存」をご参照ください。
詳細については、「複雑なシナリオでの依存関係」をご参照ください。
詳細については、「特別なシナリオでの依存関係」をご参照ください。
その他のリファレンス:
詳細については、「夏時間切り替えがスケジューリングタスクの実行に与える影響」をご参照ください。
ノード関連付けロールの設定
DataWorks の関連付けロール機能を使用すると、特定のタスクノードに事前設定された RAM ロールを指定できます。タスクの実行時に、Alibaba Cloud Security Token Service (STS) を通じてロールの一時的なアクセス認証情報を動的に取得します。これにより、コードに永続的な AccessKey ペアをハードコーディングすることなく、他のクラウドリソースにアクセスできます。
リソースグループの制限:この機能は、Serverless リソースグループで実行されるノードでのみサポートされます。
ノードタイプの制限:この機能は、Python、Shell、Notebook、PyODPS 2、および PyODPS 3 ノードでのみサポートされます。
1. DataWorks ノードでの関連付けロールの設定
ノード編集ページの右側のナビゲーションウィンドウで、[デバッグ設定] を見つけてクリックします。
スケジューリング設定パネルで、[関連付けロール] タブに切り替えます。
[RAM ロール] ドロップダウンリストから、準備した RAM ロールを選択します。
重要ドロップダウンリストが空であるか、必要なロールが見つからない場合は、「STS を使用して他の Alibaba Cloud サービスにアクセスするための関連付けロールの設定」をご参照ください。
設定が完了したら、ノードを送信します。この設定はデバッグ実行にのみ有効です。
2. コードでの一時的な認証情報の取得と使用
関連付けロールを設定すると、タスクの実行時に DataWorks は取得した一時的な認証情報を実行環境に注入します。コード内で次の 2 つの方法で認証情報を取得できます。
方法 1:環境変数の読み取り (Shell および Python に推奨)
システムは自動的に次の 3 つの環境変数を設定し、コード内で直接読み取ることができます。
LINKED_ROLE_ACCESS_KEY_ID:一時的な AccessKey ID。LINKED_ROLE_ACCESS_KEY_SECRET:一時的な AccessKey Secret。LINKED_ROLE_SECURITY_TOKEN:一時的なセキュリティトークン。
コード例 (Python):
この場合、実行には oss2 がインストールされたカスタム Python イメージを選択する必要があります。詳細については、「カスタムイメージ」をご参照ください。
import os
import oss2
# 1. 環境変数から一時的な認証情報を取得します。
access_key_id = os.environ.get('LINKED_ROLE_ACCESS_KEY_ID')
access_key_secret = os.environ.get('LINKED_ROLE_ACCESS_KEY_SECRET')
security_token = os.environ.get('LINKED_ROLE_SECURITY_TOKEN')
# 認証情報が取得されたか確認します。
if not all([access_key_id, access_key_secret, security_token]):
raise Exception("環境変数から関連付けロールの認証情報を取得できませんでした。")
# 2. 一時的な認証情報を使用して OSS クライアントを初期化します。
# 'your-bucket-name' へのアクセス権限がロールに付与されていると仮定します。
auth = oss2.StsAuth(access_key_id, access_key_secret, security_token)
bucket = oss2.Bucket(auth, 'http://oss-<regionID>-internal.aliyuncs.com', 'your-bucket-name')
# 3. クライアントを使用して OSS リソースにアクセスします。
try:
# バケット内のオブジェクトをリストアップします。
for obj in oss2.ObjectIterator(bucket):
print('object name: ' + obj.key)
print("関連付けロールで OSS に正常にアクセスしました。")
except oss2.exceptions.OssError as e:
print(f"OSS へのアクセス中にエラーが発生しました: {e}")コード例 (Shell):
#!/bin/bash
access_key_id=${LINKED_ROLE_ACCESS_KEY_ID}
access_key_secret=${LINKED_ROLE_ACCESS_KEY_SECRET}
security_token=${LINKED_ROLE_SECURITY_TOKEN}
# OSS にアクセスします。regionID、bucket_name、file_name を実際の情報に置き換えてください。
echo "ID: "$access_key_id
echo "token: "$security_token
ls -al /home/admin/usertools/tools/
/home/admin/usertools/tools/ossutil64 cp --access-key-id $access_key_id --access-key-secret $access_key_secret --sts-token $security_token --endpoint http://oss-<regionID>-internal.aliyuncs.com os://<bucket_name>/<file_name> test_dw.py
echo "************************ 正常に取得しました ************************, 結果を出力します"
cat test_dw.py方法 2:Credentials クライアントの使用 (Python に推奨)
コード例 (Python):
この場合、実行には oss2 と alibabacloud_credentials がインストールされたカスタム Python イメージを選択する必要があります。詳細については、「カスタムイメージ」をご参照ください。
from alibabacloud_credentials.client import Client as CredentialClient
import oss2
# 1. SDK を使用して自動的に認証情報を取得します。
# 環境変数内の LINKED_ROLE_* などの認証情報を自動的に見つけます。
cred_client = CredentialClient()
credential = cred_client.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
if not all([access_key_id, access_key_secret, security_token]):
raise Exception("SDK 経由で関連付けロールの認証情報を取得できませんでした。")
# 2. 認証情報を使用して OSS クライアントを初期化します。
auth = oss2.StsAuth(access_key_id, access_key_secret, security_token)
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'your-bucket-name')
# 3. OSS にアクセスします。
print("バケット内のオブジェクトをリストアップしています...")
for obj in oss2.ObjectIterator(bucket):
print(' - ' + obj.key)
print("SDK 経由で関連付けロールを使用して OSS に正常にアクセスしました。")3. 実行と検証
Shell と Python:タスクの実行時に、指定された RAM ロールを使用して他のクラウドプロダクトにアクセスします。
PyODPS:OSS などの他のクラウドプロダクトにアクセスする場合、タスクは設定した RAM ロールの ID を使用します。ただし、MaxCompute データにアクセスする場合は、プロジェクトレベルで計算リソースに設定されたアクセス ID を自動的に使用します。
スケジューリングプロパティの設定
ノードをデバッグした後、[デバッグ設定] の [関連付けロール] を [スケジューリング] の 設定に同期する必要があります。ノードを公開すると、タスクはこのロールとして実行されます。
デバッグ設定でカスタムイメージを設定した場合は、その設定をスケジューリング設定にも同期する必要があります。
オペレーションセンターでの実行ロールの表示
タスクの実行後、[オペレーションセンター] に移動してタスクインスタンスの詳細を表示し、指定されたロールが使用されたかどうかを確認できます。
に移動します。
実行したノードインスタンスを見つけ、その名前をクリックして詳細ページに移動します。
インスタンス詳細ページの [プロパティ] セクションで、[実行 ID] フィールドを表示します。このフィールドには、実行に使用された関連付けロールの ARN が表示されます。
Alibaba Cloud リソースネーム (ARN) は、リソースの一意の識別子です。詳細については、「アクセスポリシーの基本要素」をご参照ください。
関連ドキュメント
スケジューリングパラメーター:スケジューリングパラメーターのフォーマット。
スケジューリングポリシー:
スケジューリング時間:スケジューリング時間。
スケジューリング依存関係:
ノード出力パラメーター:ノードコンテキストパラメーターの設定と使用。
その他のリファレンス:夏時間切り替えがスケジュールされたタスクの実行に与える影響。


をクリックして、