すべてのプロダクト
Search
ドキュメントセンター

DataWorks:ブランチノードを使用した特定時刻のタスク実行

最終更新日:Mar 27, 2026

cron 式では、月末などの相対的な日付を直接指定できません。ブランチノードは、ランタイム時に Python 条件を評価し、スイッチケースモデルを使用して正しいダウンストリームパスに実行をルーティングすることで、この問題を解決します。これにより、cron 単独では表現できないスケジューリングパターンを実装できます。

仕組み

時間ベースの条件付きスケジューリングを実装するために、3 種類のコントロールノードタイプが連携して動作します。

ノードタイプ 機能
[代入ノード] スクリプト (SQL、SHELL、または Python) を実行し、その出力をノードコンテキスト機能を通じてダウンストリームノードに渡します。
ブランチノード 代入ノードの出力に対して Python 条件を評価し、実行を 1 つ以上のブランチにルーティングします。選択されていないブランチ上のノードはドライランとなります。
マージノード 先祖ノードがドライランであるかどうかにかかわらず実行されます。ドライラン状態がさらにダウンストリームに伝播するのを停止します。

ドライランの伝播方法: ブランチが選択されていない場合、DataWorks はそのブランチ上のすべてのインスタンスをドライランとしてマークします。このドライラン状態は、マージノードに到達するまで、すべてのダウンストリームノードに伝播します。マージノードは常に成功し、そのダウンストリームノードはドライランになりません。

下図は、2 つのブランチノード (X と Y) と 1 つのマージノード (JOIN) を持つ依存関係ツリーを示しています。

逻辑关系
  • ASN: ブランチノード X と Y に出力を提供する代入ノード

  • ノード X と Y: ブランチノード。X は左ブランチを選択し、Y は左の 2 つのブランチを選択します (緑色の線)。

  • ノード A: 期待どおりに実行されます (X によって選択されます)。

  • ノード C: 期待どおりに実行されます (Y によって選択されます)。

  • ノード B: ドライラン (Y によって選択されますが、X によっては選択されません)。

  • ノード E: ドライラン (共通ノード Z を先祖として持っているにもかかわらず、Y によって選択されません)。

  • ノード G: ドライラン (C と F が正常に実行されていても、その先祖 E がドライランであるため)。

  • ノード D: 期待どおりに実行されます (ドライランの伝播を停止する JOIN マージノードの子孫であるため)。

マージノードは、その境界でドライラン状態を停止します。マージノードの子孫ノードは、先祖ノードのいくつがドライランであったかに関わらず、常に実行されます。

共通ノードとブランチノード: 共通ノードの場合、出力はグローバルに一意な文字列のみです。共通ノードの子孫ノードを設定するには、そのグローバルに一意な文字列を子孫ノードの入力として指定します。ブランチノードの場合、各出力は条件に関連付けられています。子孫ノードは条件に関連付けられた出力を選択し、条件が満たされたもののみが期待どおりに実行され、残りはドライランとなります。

毎月末日のタスクのスケジュール設定

cron 式では、月末を直接指定することはできません。以下の手順は、代入ノード、ブランチノード、および Shell ノードを組み合わせてこのパターンを実装する方法を示しています。

前提条件

開始する前に、以下を確認してください。

  • DataStudio アクセス権を持つ DataWorks ワークスペース

  • ノードを作成およびデプロイする権限

ステップ 1: ノードの依存関係の定義

以下のノード構造を設定します。

任务依赖
  1. 代入ノード (ルート)SKYNET_CYCTIME パラメーターを使用して、当日が月末であるかどうかを判断します。 月末である場合は 1 を、それ以外の場合は 0 を返します。 DataWorks はこの出力を取得し、ブランチノードに渡します。

  2. [ブランチノード]: 代入ノードの出力に基づいて 2 つのブランチを定義します。

  3. Shell ノード (2 つ): 1 つは月末ロジック用、もう 1 つはその他の日用です。それぞれが異なるブランチ上のブランチノードの子孫となります。

ステップ 2: 代入ノードの設定

代入ノードのコードは Python で記述されています。DataWorks は、標準出力の最終行outputs パラメーターの値として取得し、その後、ブランチノードがこれを読み取ります。

キャプチャルールは言語によって異なります。

言語 キャプチャされた出力
SQL 最後の SELECT 文
SHELL 標準出力の最終行
Python 標準出力の最終行

スケジューリングプロパティを設定し、Python コードを貼り付けます。

代码设置调度属性

ステップ 3: ブランチ条件の定義

ブランチ条件は Python 式です。各条件はブランチノードの特定の出力にリンクされています。条件が満たされると、その出力に依存する子孫ノードは期待どおりに実行され、他のすべての子孫ノードはドライランとなります。

スケジューリングプロパティとブランチ条件を設定します。

调度配置分支配置

ブランチノードは、各条件に関連付けられた出力を生成します。

输出

ステップ 4: Shell ノードと特定のブランチの関連付け

ブランチノードには 3 つの出力があります。各 Shell ノードの依存関係入力として、適切な出力を選択します。各出力は条件に結びついているため、慎重に選択してください。

  • 毎月末日に実行される Shell ノードの依存関係:

    节点依赖

  • その他の日に実行される Shell ノードの依存関係:

    节点依赖

ステップ 5: ブランチロジックのデプロイと検証

すべてのノードをコミットしてデプロイします。次に、データバックフィルを使用してブランチロジックをテストします。データバックフィルを使用すると、過去の日付を含む任意のスケジューリング時間をシミュレートできるため、ライブスケジューリングサイクルを待つことなく、各ブランチが正しく起動するかどうかを確認できます。

データタイムスタンプを **2018 年 12 月 30 日**と **2018 年 12 月 31 日**に設定します。これらは、それぞれ 2018 年 12 月 31 日と 2019 年 1 月 1 日のスケジューリング時間に対応します。

テストケース 1 — 月末ロジック (データタイムスタンプ: 2018 年 12 月 30 日 → スケジューリング時間: 2018 年 12 月 31 日)

ブランチノードは月末ブランチを選択します。

选择结果
  • 月末の Shell ノードは期待どおりに実行されます。

  • その他の日の Shell ノードはドライランとなります。

テストケース 2 — 月末以外のロジック (データタイムスタンプ: 2018 年 12 月 31 日 → スケジューリング時間: 2019 年 1 月 1 日)

ブランチノードは月末以外のブランチを選択します。

选择结果
  • 月末の Shell ノードはドライランとなります。

  • その他の日の Shell ノードは期待どおりに実行されます。

主要なルール

ルール 詳細
代入ノードの出力 DataWorks は、最後の SELECT 文 (SQL) または標準出力の最終行 (SHELL または Python) をキャプチャします。これがダウンストリームノードが参照する値です。
ブランチ出力の選択 ブランチノードの各出力は条件に関連付けられています。ノードをブランチノードの子孫として設定する前に、選択する出力にどの条件が結びついているかを確認してください。
ドライランの伝播 ブランチが選択されていない場合、そのブランチ上のすべての子孫ノードはドライランとなります。ドライラン状態は、マージノードに到達するまでダウンストリームに伝播します。

次のステップ