ブランチノードのバックグラウンド

DataWorks を毎日使用している間に、次のような問題が頻繁に発生する可能性があります。各月の最終日に実行する必要があるノードがあります。 どのように設定すベきでしょうか。

回答: ブランチノードが提供される前は、Cron 式ではこのシーンを表現できないため、一時的にサポートすることはできません。

現在、DataWorks は正式にブランチノードをサポートしています。 ブランチノードでは、上記の要件を完全に満たすため、スイッチケースプログラミングモデルを適用できます。

ブランチノードと他のコントロールノード

[Data Development]ペ ージには、割り当てノード、ブランチノード、マージノードなど、DataWorksで現在サポートされているさまざまなコントロールノードが表示されます。

各種コントロールノードの機能:
  • 自ノードでの結果を下流の割り当てノードに渡します。

    割当ノードは、ノードコンテキストが依存する特性を再利用します。 既存の 2 つの定数 / 変数ノードコンテキストに基づいて、割り当てノードではカスタムコンテキスト出力が用意されます。 DataWorks は、割り当てノードの選択結果または印刷結果をキャプチャします。 この結果は、下流ノードが参照する出力フォームのコンテキスト出力パラメーターの値として使用されます。

  • どの下流ブランチノードが正常に実行されているかを確認します。

    ブランチノードは、DataWorks への依存関係に設定された入力と出力の特性を再利用します。

    共通ノードでは、ノードの出力はグローバルに一意の文字列にすぎません。 下流で依存関係を設定する必要がある場合、このグローバルに一意な文字列をノードへの入力として検索すると、下流ノードのリストに入れられることになります。

    ただし、ブランチノードの場合、出力ごとに条件を関連付けることができます。下流が依存関係を設定している場合、特定の条件の出力をブランチノードの出力として選択的に使用できます。 このようにして、ノードがブランチノードの下流になると、そのノードはブランチノードの条件にも関連付けられます。すなわち、条件が満たされ、出力に対応する下流が正常に実行されます。 基準を満たしていない出力に対応する他の下流ノードは空の実行と設定されます。

  • 上流が正常に動作するかどうかにかかわらず、正常にスケジュールされるマージノード:

    ブランチノードによって選択されていないブランチの場合、DataWorks はこのブランチリンク上のすべてのノードインスタンスを空の実行インスタンスとして配置します。 つまり、あるインスタンスの上流が空の実行になると、このインスタンス自体も空になります。

    Dataworks は現在、マージノードによる制限なしでこの空の実行属性が渡っていくのを防ぐことができます。マージノードインスタンスの場合、上流に空の実行インスタンスがいくつあっても、Dataworks は直接処理し、下流の空の実行を残すことはありません。

下の図から、ブランチノードがある場合の依存関係ツリーの論理的な関係がわかります。
  • ASN: 割り当てノード。ブランチノードの条件付き選択に備えてより複雑な状況を計算するために使用されます。
  • X/Y: ブランチノード。割り当てノード ASN の下流にあり、割り当てノードの出力に従ってブランチ選択を行います。 図の緑色の線で示すように、ノード X は左側のブランチを選択し、ノード Y は左側の 2 つのブランチを選択します。
    • ノード A/C は、ノード X/Y によって選択された出力の下流にあるので、正常に実行されます。
    • ノード B はノード Y によって選択されたブランチの下流にあるが、ノード X はこの出力を選択しないので、ノード B は空の実行に設定される。
    • ノード E はノード Y によって選択されないため、ノード Z という名前の通常の上流がある場合でも、空の実行に設定されます。
    • ノード G の上流ノード E は空の実行になるので、ノード C/F がともに正常に実行されたとしても、ノード E も空の実行になる。
    • どうすれば、空の実行中のプロパティを渡さないようにできますか。

      JOIN ノードマージノードです。 その特別な機能は、空の実行プロパティの転送を止めることです。 ノード D が JOIN ノードの下流にあるため、ノード B の空の実行属性がブロックされ、ノード D が正常に実行を開始できることがわかります。

ブランチノードを使用して他のコントロールノードと連携することで、ノードが各月の最終日にのみ実行されるという要件シナリオを満たすことができます。

ブランチノードの使用

タスク依存関係の定義

最初に、一連のタスク依存関係を定義する必要があります。
  1. ルート割り当てノードは、SKYNET_CYCTIME で時間を計って、当日が月の最終日であるかどうかを計算します。 そうであれば、出力は 1 で、そうでなければ、出力は 0 です。 この出力は DataWorks によってキャプチャされ、下流に渡されます。
  2. ブランチノードは、割り当てノードの出力に従ってブランチを定義します。
  3. 2 つのシェルノードはブランチノードの下にぶら下がっており、異なるブランチロジックを実行します。

割り当てノードの定義

新しい割り当てノードには出力が用意されています。割り当てノードのコードとして、SQL/SHELL/Python の 3 種類がサポートされます。
  • SQL タイプの場合、DataWorks は最後の SELECT 文の SQL を出力値としてキャプチャします。
  • SHELL/Python タイプの場合、DataWorks は標準出力の最後の行を出力値としてキャプチャします。

本ページでは、Python タイプが割り当てノードのコードとして使用されており、スケジューリングプロパティとコード設定は次のとおりです。

  • コードは次の通りです。
  • スケジュール設定

ブランチの定義

ブランチノードは簡単な Python の構文式で条件を定義することができ、それぞれが出力にバインドされます。 つまり、この出力の下にある下流ノードは条件が満たされたときに実行され、他のノードは空の実行に設定されています。

  • スケジュール設定
  • ブランチ設定
  • スケジュール設定は条件付きバインドの出力を生成します。

実行タスクノードを別のブランチにぶら下げます。

最後に、実際にタスクを実行するノードに依存関係を設定するときに注意することが重要です。過去の依存関係設定のロジックによると、ブランチノードにはすでに 3 つの出力があります。 これら 3 つの出力のどれでも入力と見なすことができます。 ただし、ブランチノードの出力は現在条件に関連付けられているため、慎重に選択する必要があります。

  • 毎月最終日に実行されるノード依存関係
  • 毎月他の時間に実行されるノード依存関係

結果検証

上記の設定をすべて完了したら、タスクを送信して公開できます。 公開後、パッチデータを実行して効果をテストできます。営業日 2018-12-30 と 2018-12-31 が選択されています。つまり、それぞれタイミングは 2018-12-31 と 2019-01-01 です。 パッチデータの最初のバッチは "最終日" のロジックをトリガーする必要があり、2 番目のバッチは "最終日以外" のロジックをトリガーします。 両者の違いを見てみましょう。

営業日 2018-12-30 (タイミング2018-12-31)
  • ブランチノードのブランチ選択結果
  • ノード "RunOnLast" は正常に実行されます。
  • ノード "RunExceptLast" は空の実行に設定されます。
営業日 2018-12-31 (タイミング2019-01-01)
  • ブランチノードのブランチ選択結果
  • ノード "RunOnLast" は空の実行に設定されます。
  • ノード "RunExceptLast" は正常に実行されます。

まとめ

ブランチノードに基づいて、毎月最終日に実行する目標を達成しました。 もちろん、これがブランチノードを使う最も簡単な方法です。 割り当てノードとブランチノードを使用することで、ビジネスニーズを満たすためにさまざまな条件を組み合わせることができます。

最後に、ブランチノードを使用する主なポイントについて説明します。
  • DataWorks は、割り当てノードの最後の SELECT 文または標準出力ストリームの最後の行を、下流参照用の割り当てノードの出力としてキャプチャします。
  • ブランチノードの各出力は条件に関連付けられ、下流ブランチノードは上流として使用されます。 選択する前に、各出力に関連付けられる条件の意味を理解する必要があります。
  • 選択されていないブランチは空の実行に設定され、空の実行プロパティはマージノードに遭遇するまで渡されます。
  • 空の実行プロパティをブロックすることに加えて、マージノードにはマイニングに適したより強力な機能があります。