ワークフローは、タスクの依存関係に基づいてプロセスを自動化するツールです。定期ワークフローは、日次や月次のジョブなど、定期的なデータ処理シナリオ向けに設計されており、事前定義されたスケジュールに基づいてタスクインスタンスを自動的に生成します。これは、「スケジュールされた時刻に到達」し、かつ「すべての上流依存関係が満たされる」というデュアルトリガーロジックに従います。これにより、複雑なデータパイプラインが安定的、秩序的、かつ自己完結的に実行されることが保証されます。定期ワークフローの典型的なユースケースは次のとおりです:
固定スケジュールでのデータ処理タスクの自動化:日次、時間単位、または週次の間隔で、データ同期、データクレンジング、または集約タスクを実行します。
複雑な有向非循環グラフ (DAG) の依存関係フローの構築:視覚的なドラッグアンドドロップキャンバスを使用して、MaxCompute SQL、Hologres、E-MapReduce (EMR)、Python などのさまざまなノードタイプを統合し、タスク間の依存関係を確立して自動スケジューリングを実現します。
複数のサブタスクの一元的なスケジューリングと管理:論理的に関連する一連のタスクを単一のワークフローにグループ化し、全体としてスケジューリングすることで、メンテナンスとモニタリングを簡素化します。
クイックスタート
この機能は新しい Data Studio で利用できます。新旧バージョンの見分け方については、よくある質問をご参照ください。
このセクションでは、定期ワークフローの基本的な実行可能な例を紹介します。仮想ノード (制御開始点) が SQL ノード (データ処理) をトリガーする単純なパイプラインを構築し、定期スケジューリング用に設定します。シナリオ:毎日 00:05 に、前日の注文総数を自動的に計算し、その結果をテーブルに書き込みます。
ステップ 1:コンピュートエンジンとデータの準備
ターゲットワークスペースで、MaxCompute をコンピュートエンジンとしてバインドします。
MaxCompute で、結果を保存するために次のテーブルを作成します。
-- 簡単な結果テーブルを作成 CREATE TABLE IF NOT EXISTS dw_order_count_test ( order_date STRING, total_count BIGINT ) PARTITIONED BY (ds STRING); -- ds でパーティション分割し、日次統計を保存
ステップ 2:定期ワークフローの作成
DataWorks コンソールの[ワークスペース] ページに移動します。 上部のナビゲーションバーで目的のリージョンを選択し、目的のワークスペースを見つけて、[アクション] 列で を選択します。
ボタンに「データ開発」と表示されている場合は、古いバージョンが開きます。クリックしないでください。
左側のナビゲーションウィンドウで
をクリックし、[ワークスペースディレクトリ] の右側にある と、[新規ワークフロー] ページが開きます。[新規ワークフロー] ダイアログボックスで、[スケジューリングタイプ] を [定期スケジューリング] に設定し、名前に
minimal_daily_demoを入力するなど必要な情報を入力して、ワークフローを作成します。
ステップ 3:ワークフローのオーケストレーション
開いているワークフローキャンバスに、左側のコンポーネントパネルから[仮想ノード]をドラッグし、
start_nodeという名前を付けます。仮想ノードはビジネスプロセスの開始点を定義するもので、実際の実行は行いません。
[MaxCompute SQL] ノードをドラッグし、
count_ordersと名付けます。start_nodeの下部にあるドットをクリックし、count_ordersの上部まで線をドラッグして、簡単な処理リンクを構築します。
ステップ 4:ノードコードの開発
DataWorks Copilot を有効にして、インテリジェントなコード補完の提案を受け、開発効率を向上させることを推奨します。
count_ordersノードをダブルクリックして、ノードコードエディタを開きます。ノードのビジネスロジックを入力します。この例では、シミュレートされたデータを使用します。
-- bizdate はスケジューリング変数であり、スケジューリング設定で定義する必要があります。 INSERT OVERWRITE TABLE dw_order_count_test PARTITION (ds='${bizdate}') SELECT '${bizdate}' as order_date, COUNT(*) as total_count FROM (SELECT 1 as id UNION ALL SELECT 2 as id) t; -- シミュレートされたデータノード開発の詳細については、「MaxCompute SQL ノード」をご参照ください。
ノードエディターの上部にある[保存] ボタンをクリックします。
ステップ 5:スケジューリングとパラメーターの設定
ワークフローキャンバスに戻り、右側のパネルで[スケジューリング設定] > [スケジューリング時間] タブをクリックします:
[スケジューリング周期] を [日次] に設定します。
[スケジュール時刻] を
00:05に設定します (毎日 00:05 に実行)。
count_ordersノードのエディターの右側にある セクションで、[パラメーター名] をbizdateに、対応する [パラメーター値] を$[yyyymmdd-1]に設定します (これは、現在の日付から 1 日を引いた昨日を意味します)。
ステップ 6:ノードとワークフローのデバッグ
count_ordersノードのデバッグ:デバッグパラメーターの設定: ノード編集ページの右側で、[実行設定] をクリックします。
[コンピュートエンジン] で、ステップ 1 で準備した MaxCompute コンピュートエンジンを選択します。
[スクリプトパラメータ] で、[今回の実行値] を入力します。デフォルト値は現在の日付の前日です。
デバッグタスクの実行: ツールバーで、[実行] をクリックします。ノードは、[実行設定] で設定したパラメーターで実行されます。
実行が成功し、結果が期待どおりになったら、右上隅にある[スケジューリング構成に同期]をクリックして、実行構成をスケジューリング構成に適用します。
ワークフロー全体のデバッグ:
ワークフローキャンバスに戻り、上部のツールバーにある
アイコンをクリックします。表示されるダイアログボックスに、ワークフローの [今回の実行の値] を入力します(たとえば、現在の日付が 20260120 の場合は、
bizdateを20260119に置き換えます)。
ステップ 7:本番環境へのデプロイ
ワークフローキャンバスに戻り、上部のツールバーにある
ボタンをクリックします。「デプロイメント」パネルで、システムが依存関係と構成のチェックを実行します。 チェックに合格すると、[本番環境にデプロイ] をクリックし、デプロイメント方法として [完全デプロイメント] を選択します。
デプロイメントが成功したら、[オペレーションセンター] に移動して、ワークフローが定期タスクリストに表示されるかどうかを確認します。
これで、毎朝早くに実行される簡単な定期ワークフローの開発が完了しました。
コア設計と設定
ワークフローオーケストレーションのコアロジックは、視覚的な DAG キャンバスを使用して、制御ノード (結合ノードや分岐ノードなど) と統合ノード (HTTP トリガーなど) でタスク構造を編成することです。また、スケジューリングパラメーターを介してコンテキストを渡し、スケジューリング依存関係を介して実行順序を定義することで、複雑なデータ処理フローの自動化された秩序あるスケジューリングを可能にします。
ノードとワークフローのオーケストレーション
シンプルなプロセスオーケストレーション
データ開発には、多ソース統合から ODS や DWD レイヤーの構築といった階層的なモデリングまで、複雑なパイプラインがしばしば含まれます。DataWorks は、複雑なロジックを異なる機能を持つサブノードに分解し、標準化された処理フローを作成するための視覚的なオーケストレーション機能を提供します。有向非循環グラフ (DAG) に基づくこのオーケストレーションモデルは、状態駆動の自動実行を可能にします:上流ノードが正常に実行されると、即座に下流タスクがトリガーされ、処理パイプライン全体が線形で安定的、かつ自己完結的であることが保証されます。この段階では、プロセスオーケストレーションはシンプルで、静的、線形、かつ一方向です。
複雑なオーケストレーション:フロー制御
分岐、結合、for-each、do-while ノードは、DataWorks Standard Edition 以降でのみ利用可能です。
フロー制御ノードは、データ開発をタスク統合からビジネスオーケストレーションへと昇華させます。これらは、単純な線形依存関係しか表現できない従来の有向非循環グラフ (DAG) の限界を克服します。一連の高度な論理制御ノードを提供することで、データワークフローの論理表現能力を強化します。
ノード名 | 説明 |
仮想ノード | ダミーノードであり、実際の計算は行いません。複数のサブタスクをオーケストレーションし、ワークフローの開始ノードとして機能します。例えば、製品注文分析ワークフローでは、 説明 単一ノード開発の場合、ワークスペースのルートノードを初期依存ノードとして使用する必要があります。 |
分岐ノード | 上流の結果に基づいて、実行を異なるブランチにルーティングします。例えば、日次の注文総額を確認できます。合計が 0 の場合はアラートノードをトリガーし、後続の計算を停止します。合計が 0 より大きい場合は、レポート生成ノードの実行に進みます。 |
結合ノード | 複数のブランチの実行結果をマージして、下流の依存関係の問題を解決します。例えば、財務決済タスクが「通常決済」ブランチと「バックビリングロジック」ブランチの両方に依存している場合、結合ノードは、どちらのブランチが実行されたかに関わらず、ブランチのロジックが完了した後に最終的なレポートアーカイブがトリガーされることを保証します。 |
for-each ノード | 代入ノードから渡された結果セットを反復処理し、各要素に対して下流の操作を実行します。例えば、代入ノードから取得した 31 の省名に対して、データクレンジングタスクを 31 回実行し、一度に 1 つの省のデータパーティションを処理します。 |
do-while ノード | 条件が満たされるまでループを継続し、その後次のステップに進むループを制御します。例えば、外部 API を 10 分ごとに呼び出してデータ同期のステータスを確認できます。返された値が「processing」の場合はループを継続し、「completed」が返された場合はループを終了して後続の処理を開始します。 |
詳細については、「新しい Data Studio の一般ノード」をご参照ください。
複雑なオーケストレーション:状態認識と外部連携
チェックノードは DataWorks Professional Edition 以降でのみ利用可能です。このセクションの他のノードは DataWorks Enterprise Edition でのみ利用可能です。
これらのノードは、状態認識と条件付きチェックのためのコアコンポーネントです。ワークフローが依存する物理リソースや前提タスクが準備完了しているかどうかを正確に判断するだけでなく、サードパーティシステムとの対話を通じて、データプラットフォームと業務システム間のコミュニケーションの壁を打ち破ります。
ノード名 | 説明 |
HTTP トリガー | 外部システムからの HTTP リクエストを受信して DataWorks タスクをトリガーします。例えば、上流の業務システムが日次決済を完了した後、HTTP API を呼び出して DataWorks の T+1 データ処理フローをトリガーできます。 |
チェックノード | OSS ファイルや MaxCompute パーティションなどの外部リソースが準備完了しているかを監視し、その後下流タスクをトリガーします。例えば、日次ログファイルが OSS にアップロードされるのを待機できます。チェックノードがファイルの存在を検出した後、ログ解析タスクを開始します。 |
依存関係チェックノード | 周期をまたぐ依存関係やワークスペースをまたぐ依存関係が、アクティブなポーリングと論理的な組み合わせによって満たされているかを確認し、その後下流タスクをトリガーします。これにより、複雑なスケジューリングトリガー条件を正確に制御できます。例えば、日次スケジューリングノードは、前日の 24 個の毎時タスクがすべて完了するのを待つことができます。 |
詳細については、「新しい Data Studio の一般ノード」をご参照ください。
サブワークフローによるロジックの再利用
定期ワークフローでは、SUB_PROCESS ノードを使用して、安定的で共通のサブタスクパイプラインを再利用可能なサブワークフローとしてカプセル化できます。その後、他のワークフローがこのサブワークフローを参照できます。例えば、e コマース、広告、IoT の事業部門は、データクレンジング、サマリー統計、データ品質チェックを含む標準化された処理フローを共有できます。このフローを参照可能なサブワークフローとしてカプセル化することで、開発効率を向上させることができます。
手順:
child_workflowワークフローの [プロパティ] を [参照可能] に設定します。そうすると、このワークフローはサブワークフローになります。メインワークフローでは、[SUB_PROCESS] ノードをドラッグし、参照ワークフローとして
child_workflowを選択します。
サブワークフローには以下の制約があります:
内部のみの依存関係:サブワークフローとそのすべての内部ノードは、外部タスクへの依存関係を持つことはできません。
隔離:サブワークフローは、外部タスクの直接の依存関係になることはできません。
受動的トリガー:公開後、スケジューリングインスタンスは自動的に生成されません。別のワークフローの
SUB_PROCESSノードによって呼び出された場合にのみ実行されます。詳細については、「SUB_PROCESS ノード」をご参照ください。
ワークフローの分割とモジュール化
ワークフローの保守性とパフォーマンスを維持するために、100 ノードを超える大規模なワークフローは分割することを推奨します:
ビジネスドメインによる分割:トランザクション、ユーザー、製品など、異なるビジネスサブジェクトの処理パイプラインを独立したワークフローに分離します。
SUB_PROCESS ノードを使用した共通ロジックのカプセル化:データクレンジングやフォーマットなど、共通で再利用可能な処理ステップを参照可能なワークフローにカプセル化します。
スケジューリング依存関係
スケジューリング依存関係は、データ処理の順序、一貫性、精度を保証するためのコアメカニズムです。スケジュールされた時刻に到達することと、上流タスクの成功によってトリガーされるというデュアルロジックを通じて、孤立したタスクを秩序あるデータ生産ラインに接続します。ワークフロー内でノードをオーケストレーションすると、それらの間にデフォルトでスケジューリング依存関係が確立されます。ワークフロー内のノードの上流および下流の依存関係に加えて、より複雑な依存関係を設定できます。
詳細については、「スケジューリング依存関係」をご参照ください。
ワークフローレベルの依存関係ワークフロー全体が開始する前に、別のタスク (別のワークフローまたはスタンドアロンノード) の完了を待つ必要がある場合に使用します。これは、ワークフローが独立したビジネスモジュールとして扱われる場合に適しています。例えば、基盤となるデータワークフローが出力を生成した後にのみ開始される販売ビジネスワークフローなどです。 | ノードレベルの依存関係ワークフロー内の特定のノードが、外部タスク (同じワークフロー内にないタスク) の完了を待つ必要がある場合に使用します。これにより、より詳細なクロスプロセスオーケストレーションが可能になります。例えば、レポーティングワークフローのサマリーノードは、外部の財務システムの特定のノードが出力を生成するのを待つ必要がある場合があります。依存タスクが時間通りに完了することを保証するために、上流に依存関係チェックノードを設定することを推奨します。 |
周期をまたぐ依存関係周期をまたぐ依存関係とは、タスクの現在の周期のインスタンスが異なる周期のインスタンスに依存することを意味します。これは、同じノードまたは異なるノードへの依存関係をサポートします。例としては、INSERT OVERWRITE 操作を使用してパーティションテーブルを上書きするタスクや、累積計算を含むシナリオなどがあります。周期をまたぐ依存関係を有効にすると、当日のインスタンスは前日のインスタンスが成功するのを待ってから実行される必要があります。 | ワークスペースをまたぐ依存関係タスクが別の DataWorks ワークスペースのタスクに依存する必要がある場合、そのワークスペース名とノードの [出力名]、[名前]、または [ID] によってノードを一意に関連付けることができます。これは、部門横断的およびプロジェクト横断的なデータコラボレーションに適しています。たとえば、マーケティングワークスペースのタスクが会計ワークスペースの主要なデータを参照する必要がある場合などです。 |
パラメーターの設計とフロー
ワークスペースパラメーターは、DataWorks Professional Edition 以降でのみ利用可能です。
新しい Data Studio は、4 段階のパラメーター渡しメカニズムをサポートし、コンテキストパラメーターを通じてノード間で柔軟かつ動的なデータ渡しを可能にします。スコープが狭い順から広い順に、レベルは次のようになります:
ノードパラメーターバッチ処理タスクで、同じ SQL コードが毎日異なるパーティションデータを処理する必要がある場合、ノードパラメーターを使用してコード内の日付を動的に定義できます。これらは定数、組み込み変数、およびカスタム時間式をサポートします。 詳細については、「スケジューリングパラメーターのソースと式」をご参照ください。 | コンテキストパラメーターこれらは、上流ノードの出力パラメーターを通じて下流ノードに渡され、動的な値渡しを可能にします。これらは定数、変数、および上流の実行結果をサポートします。 詳細については、「ノードコンテキストパラメーターの設定と使用」をご参照ください。 |
ワークフローパラメーターワークフローには、特定のビジネス識別子を共有する必要がある数十のノードが含まれることがあります。ノードパラメーターを一つずつ手動で変更するのはエラーが発生しやすくなります。ワークフローパラメーターを使用すると、これらの共有値を一度定義し、ワークフロー内のすべてのノードに適用できます。 詳細については、「ワークフローパラメーター」をご参照ください。 説明 ワークフロー内のサブワークフローは、ワークフローのパラメーターを直接参照できます。 | ワークスペースパラメーター開発環境でコードをデバッグし、本番環境で実行する場合、通常、データベース名とリソースパスは異なります。これらの設定をワークスペースレベルで定義することで、ワークスペース内のすべてのノードに適用できます。例えば、開発環境では 詳細については、「ワークスペースパラメーターの使用」をご参照ください。 |
スケジューリング周期
定期ワークフローと古いビジネスプロセスの主な違いは、ワークフローのスケジューリング周期が単一のユニットとして設定されるのに対し、ビジネスプロセスは単なるタスクの物理的なコレクションであり、全体としてスケジューリングできない点です。
スケジューリング周期はワークフローレベルでのみ設定できます。ワークフロー内のノードは、ワークフローのスケジュール時刻からのオフセットである遅延実行時間のみを持つことができます。
ディメンション | ワークフローレベルの設定 | 内部ノードの動作 |
時間プロパティ | 絶対時間 (例:02:00) | 相対時間 (ワークフローのスケジュール時刻からの遅延) |
周期プロパティ | 日次、時間単位、分単位、週次、月次、または年次の周期を定義 | ワークフローの周期を継承し、変更不可 |
トリガーロジック | 物理的な時間に到達 + 上流タスクが成功 | 物理的な時間 + 遅延時間 + 上流タスクが成功 |
デバッグと実行
ノードとワークフローを開発した後、単一ノードのデバッグとワークフロー全体のデバッグを実行して、期待される結果が生成されることを確認します。
単一ノードのデバッグ
単一ノードのデバッグは、SQL ステートメント、Python スクリプト、またはデータ統合タスクを迅速に検証するなど、単一ノードの内部コードロジックの検証に焦点を当てます。このモードでは現在のノードのみが実行され、上流または下流の依存関係はトリガーされません。
ノード右側の[実行設定] パネルで、以下のパラメーターを設定します。
パラメーター
説明
コンピュートエンジン
バインドされたコンピュートエンジンを選択します。利用可能なものがない場合は、ドロップダウンリストから [コンピュートエンジンの作成] を選択します。
重要コンピュートエンジンとリソースグループが接続されていることを確認してください。詳細については、「ネットワーク接続ソリューション」をご参照ください。
リソースグループ
コンピュートエンジンがバインドされたときに接続性テストに合格したリソースグループを選択します。一部のノードでは、リソースグループにカスタムイメージを設定して実行環境を拡張できます。
(オプション) データセット
Shell や Python などの一部のノードは、OSS や NAS に保存されている非構造化データにアクセスするためにデータセットの使用をサポートします。
(オプション) スクリプトパラメーター
ノードコンテンツを設定する際、
${parameter_name}というフォーマットで変数を定義できます。[スクリプトパラメーター] セクションで [パラメーター名] と [パラメーター値] を設定する必要があります。タスクが実行されると、変数はその実際の値に動的に置き換えられます。詳細については、「スケジューリングパラメーターのソースとその式」をご参照ください。(オプション) 関連付けられたロール
Shell や Python などの一部のノードは、他のクラウド製品のリソースにアクセスするために関連付けられたロールの設定をサポートします。
ノードの上部ツールバーで、[保存] をクリックし、次に [実行] をクリックします。
ノードの下部で実行ログと結果を表示します。
ワークフローのデバッグ
ワークフローのデバッグは、ビジネスパイプライン全体における複数のノード間のデータ依存関係、パラメーター渡し、および実行順序の検証に焦点を当てます。単一ノードのデバッグを完了した後、ワークフローの一部または全体をデバッグできます。
ワークフローの DAG キャンバスページで、上部のツールバーにある[実行]ボタンをクリックします。また、ノードを選択して右クリックし、[このノードまで実行] または [このノードから実行] を選択して、部分的に検証することもできます。
表示されるダイアログボックスで、このデバッグ実行のためにワークフロー内のすべてのノード変数 (例えば
${bizdate}) に一時的な値を割り当てます。システムは、DAG で定義された依存関係に従って、ノードを上から下に順次実行します。キャンバス上でノードのステータスをリアルタイムで監視し、任意のノードをクリックしてその実行ログを表示できます。
この時点では、キャンバスの左側にある[戻る] ボタンをクリックして、ワークフローの開発状態に戻ることができます。
右側の実行履歴には、ワークフローのすべてのデバッグ実行レコードが表示されます。
フロー制御 (ループ、分岐、結合) を伴うすべての一般ノードは、ワークフロー内に配置し、その上流および下流ノードと一緒にデバッグして初めて有効になります。
管理と運用
ワークフローノードの管理
データ開発の柔軟性と効率を向上させるために、DataWorks では、既存のスタンドアロンノードをワークフローにインポートしてオーケストレーションしたり、ノードをワークフローから移動したり、異なるワークフロー間で転送したりすることができます。これにより、ノードの再利用、ワークフローのリファクタリング、およびモジュラー管理がより簡単かつ効率的になります。
既存のノードをワークフローにインポートする
[ノードのインポート] 機能を使用して、プロジェクト内のどのワークフローにも属していない既存のスタンドアロンノードを現在のワークフローのキャンバスに追加し、迅速なノードの再利用を可能にします。
ターゲットワークフローをダブルクリックして、そのキャンバスエディタを開きます。
左側のコンポーネントパネルで、[ノードのインポート] タブに切り替えます。
このパネルには、追加できるすべてのスタンドアロンノードが一覧表示されます。[ノードタイプ]、[パス]、または[ノード名]でフィルターや検索を行い、目的のノードを素早く見つけることができます。
ノードを見つけたら、キャンバスにドラッグしてインポートを完了します。
ノードをワークフローから移動する
ノードをワークフローから移動してスタンドアロンノードにしたり、直接別のワークフローに移動したりできます。
スタンドアロンノードに変換する
ノードをワークフローから切り離し、そのワークフローの一部でなくす必要がある場合に使用します。
ワークスペースのディレクトリツリーまたはワークフローキャンバスで、ターゲットノードを右クリックします。
表示されたコンテキストメニューで、[ワークフローから移動] を選択します。
確認ダイアログボックスで、ノードのターゲットパスを選択し、確認します。
別のワークフローに移動する
ノードを現在のワークフローから別のワークフローに移行してビジネスプロセスをリファクタリングする必要がある場合に使用します。
ワークスペースのディレクトリツリーまたはワークフローキャンバスで、ターゲットノードを右クリックします。
表示されたコンテキストメニューで、[別のワークフローに移動] を選択します。
表示されるリストで、ターゲットワークフローを選択して確認します。
ノードを選択してターゲットワークフローにドラッグして移動することもできます。
この操作を実行する前に、既存のビジネスプロセスへの潜在的な影響を慎重に評価し、新しい場所で依存関係を速やかに再設定してください。
ノードがワークフローから削除または移動されると、元のワークフロー内でそのノードに設定されていた上流および下流の依存関係は壊れます。
ノードに設定されていたワークフローパラメーターは無効になります。
ワークフローのクローン
ワークフローをクローン作成すると、すべての内部ノード、コード、依存関係を含む既存のワークフローをすばやく完全にコピーして、新しい独立したワークフローを作成できます。これを行うには、[ワークスペースディレクトリ] に移動し、対象のワークフローを右クリックして、[クローン作成] を選択します。
クローンは、ほぼすべての設定を複製するため、潜在的なリスクをもたらす可能性があります。クローンしたワークフローをコミットして公開する前に、以下の設定を確認して「環境分離」チェックを必ず実行してください:
出力テーブルとターゲットデータソース:クローンされたワークフローは、元のワークフローと同じターゲットテーブルに書き込みます。複数のタスクが同じテーブルに書き込んでデータ競合を引き起こすのを防ぐために、コード内のターゲットテーブル名を変更する (例えば、
ods_user_tableをdev_ods_user_tableに変更する) か、ノードの出力設定を変更する必要があります。上流の依存関係:ワークフローの上流依存関係の設定を確認します。デフォルトでは、クローンされたワークフローは依然として元の上流タスクに依存します。これが意図した動作であるかを確認してください。そうしないと、データパイプラインが混乱したり、目的のないタスクが実行されたりする可能性があります。
パラメーター設定:ワークフローとその内部ノードのカスタムパラメーター、特に日付パーティション (例えば
${bizdate}) や入出力パスに関連するものを確認し、新しい環境でそれらが正しいことを確認してください。
ワークフローのクローンに加えて、ワークフロー内のノードをクローンすることもできますが、異なるワークフロー間でノードをコピーすることはできません。
バージョン管理
内部ノードを個別に公開しても、ワークフローの新しいバージョンが作成されます。
バージョン管理は、ワークフローへのすべての変更を自動的に記録し、履歴バージョンを表示および比較し、必要に応じて以前の状態に迅速にロールバックすることを可能にします。これは、タスクの安定性を確保し、チームコラボレーションをサポートするための重要な機能です。
ワークフローキャンバスの右側にある [バージョン] パネルには 2 種類のレコードが表示され、それらの違いを理解することが重要です。
開発レコード:キャンバスで [保存] をクリックするたびに生成されます。これらは単に開発プロセスのスナップショットであり、誤ってコードを失うのを防ぐためのものです。本番環境で現在実行中のタスクには影響しません。
デプロイレコード:ワークフローが本番環境に正常に公開されたときに生成されます。これは、オンラインのスケジューリングシステムが実行するバージョンです。本番タスクで問題が発生した場合は、ロールバック時にデプロイレコードに注目する必要があります。
典型的なユースケース
迅速な障害復旧:コードの変更により本番タスクが失敗した場合、[ロールバック] 機能を使用して、ワークフローを最後の安定したデプロイバージョンにワンクリックで復元し、ダウンタイムを最小限に抑えることができます。
変更の監査とトレーサビリティ:特定のロジックがいつ、誰によって変更されたかを調査する必要がある場合、[バージョンリスト] と [比較] 機能を使用して、すべてのコード変更を明確に追跡できます。
コードの回復:誤って一部のコードロジックを削除し、保存していなかった場合、最新の開発レコードにロールバックすることで回復できます。
重要な注意点
ロールバックは現在の開発ワークスペースを上書きします:ロールバック操作は、現在のキャンバス上のすべてのコードと設定を選択した履歴バージョンの内容で直接上書きします。現在のキャンバスにコミットされていない有効な変更がある場合は、ロールバックする前に、手動でローカルのテキストエディタにコピーしてバックアップすることを強く推奨します。
ロールバック後に再公開する必要があります:ロールバック操作は、コードを開発状態に戻すだけです。この復元されたバージョンは、自動的に本番環境に同期されません。変更を本番環境で有効にするには、ワークフローを再公開する必要があります。
デプロイと運用
ノード/ワークフローのデプロイ:ワークフローを開発した後、ノードまたはワークフローを本番環境に公開します。この時点で、開発環境のノードは、本番環境に対応する定期タスクを生成します。詳細については、「ノードまたはワークフローの公開」をご参照ください。
ノード/ワークフローの操作:本番環境のワークフローは、その構成に基づいて定期的にスケジューリングされます。[オペレーションセンター] に移動して、定期的なワークフローのスケジューリングステータスを表示し、関連する運用タスクを実行します。詳細については、「定期タスクの基本的な運用タスク」および「Data Backfill インスタンスの運用タスク」をご参照ください。
タスク実行メカニズム
スケジューリングシナリオでは、ワークフローが成功ステータスを返すかどうかは、その内部タスクの実行ステータスに依存します。
ワークフロー全体の成功は、以下のルールに従って、その内部ノードの最終状態によって決定されます:
失敗:単一のクリティカルなノードが失敗した場合、通常、ワークフローインスタンス全体が失敗に設定されます。
フリーズ/一時停止:ワークフロー内のノードが手動でフリーズまたは一時停止され、そのノードが後続ノードの上流依存関係である場合、パイプラインは中断され、ワークフロー全体も失敗に設定されます。
結合ノード:ワークフローが結合ノードを使用する場合、結合ノードのロジックが成功を許容する限り、一部の上流ブランチノードが失敗しても、ワークフロー全体は「成功」を返すことがあります。したがって、「エラーありで実行」を防ぐために、結合ノードの上流チェックを慎重に設計する必要があります。
特別なシナリオ:
ワークフロータスクのデータ補完インスタンスをフリーズすると、ワークフローインスタンスは成功状態に設定されます。
データ補完シナリオで、システムがタスクを実行できないと判断した場合、ワークフローは失敗状態に設定されます。
インスタンスステータスが更新されてから実際の障害イベントが発生するまでには遅延があります。
クォータと制限
ノード数の制限:単一のワークフローには最大 400 の内部ノードを含めることができます。ただし、キャンバスの読み込みパフォーマンスと保守性を確保するために、ノード数を 100 未満に保つことを推奨します。より複雑なシナリオでは、ワークフローをモジュール化して分割することをお勧めします。
サブワークフローの制限:
「参照可能」スイッチが有効になっているワークフローとその内部ノードは、外部タスクに依存することはできず、また外部タスクの直接の依存関係になることもできません。そうしないと、デプロイ中にエラーが発生します。
このようなワークフローが本番環境に公開された後、デフォルトではスケジューリングインスタンスを自動的に生成しません。別のワークフローの SUB_PROCESS ノードによって参照された場合にのみ、サブタスクとして実行されます。
最大並列インスタンス数: 定時ワークフローは、ワークフローレベルでの最大並列インスタンス数の設定をサポートしていません。 ワークフロー内の個々のタスクに対してのみ設定できます。 タスクの同時実行を制限するには、ワークフロー内の特定のノードのスケジューリングポリシーで[最大並列インスタンス数]を構成します。 詳細については、「ノードスケジューリング構成」をご参照ください。
サポートされていないノードタイプ:E-MapReduce (EMR) Spark Streaming、Flink SQL Streaming、Flink JAR Streaming、および Flink Python Streaming はワークフローではサポートされていません。これらはスタンドアロンノードとしてのみ開発および実行できます。
よくある質問
Q:ワークフローとビジネスプロセスの違いは何ですか?
A:ワークフローはスケジューリング可能なユニットですが、ビジネスプロセスはタスクを整理するための単なるフォルダです。
Q:デバッグモードではタスクが成功するのに、スケジュール実行では失敗するのはなぜですか?
A:最も一般的な理由は環境の不一致です。以下を確認してください:
リソースグループの違い:デバッグには個人用またはデバッグ用のリソースグループを使用している可能性がありますが、本番スケジュールは本番用のリソースグループで設定されています。本番用のリソースグループが有効で、十分な容量があり、正しい権限を持っていることを確認してください。
権限の違い:本番実行に使用されるアカウントが、特定のテーブル、関数、またはリソースへのアクセス権を持っていない可能性があります。
依存関係の違い:本番環境の依存関係が開発環境のものと一致していないか、上流の依存関係の出力が本番環境に存在しない可能性があります。
Q:インスタンスが常に待機中で実行されないのはなぜですか?
A:インスタンスは、スケジュールされた時刻、スケジューリングリソース、上流の依存ノードなど、すべての条件が満たされた場合にのみ実行できます。
上流の依存関係が満たされていない:オペレーションセンターで、インスタンスの「依存関係」ビューを確認し、どの上流タスクがまだ成功していないかを確認します。
リソースを待機中:コンピュートリソースグループのキューがいっぱいで、タスクが利用可能なリソースを待っています。
ワークフロー/ノードがフリーズしている:ワークフローまたはその上流ノードが手動で「フリーズ」または「一時停止」されていないか確認します。
インスタンスが生成されていない:現在の時刻がワークフローのスケジュールされた時刻に達しているか確認します。タスクが公開されたばかりの場合、インスタンスが生成されるまで次のスケジューリングサイクルを待つ必要があります。詳細については、「インスタンス生成方法:デプロイ後すぐに生成」をご参照ください。
Q:一部のノードが成功しているのに、ワークフロー全体が失敗と表示されるのはなぜですか?
A:これはワークフローのステータス決定ルールによって決まります:
クリティカルパスの失敗:クリティカルパス上のノードが失敗した場合、他の並列ブランチが成功していても、ワークフロー全体が失敗とマークされます。
ノードがフリーズしている:内部ノードがフリーズしている場合、ワークフロー全体が失敗する原因となります。