定期実行ワークフローは、あらかじめ設定されたスケジュール (日次、月次など) に基づいてタスクインスタンスを生成し、定期的なデータ処理を自動化します。各タスクは、スケジュールされた時刻に達し、かつすべての上流依存関係が満たされた場合にのみ実行されるため、複雑なデータパイプラインを安定的かつ秩序正しく維持できます。典型的なユースケースは以下の通りです。
定期的なデータ処理の自動化:日次、時次、または週次の間隔でデータを同期、クレンジング、または集計します。
複雑な DAG 依存関係フローの構築:MaxCompute SQL、Hologres、EMR、Python などのノードを視覚的に統合し、上流と下流の依存関係を定義して、自動スケジューリングを有効にします。
複数のサブタスクの一元管理とスケジューリング:論理的に関連するタスクを単一のワークフローにグループ化し、1つのユニットとしてスケジューリング、保守、監視を行います。
クイックスタート
この機能は、DataWorks Data Studio の新バージョンで利用できます。新旧バージョンの見分け方については、「新旧 Data Studio の見分け方」をご参照ください。
このセクションでは、すぐに実行可能な定期実行ワークフローを例に説明します。仮想ノード (開始点) が MaxCompute SQL ノード (データ処理用) をトリガーする単純なパイプラインを構築します。このワークフローは、前日の注文総数を自動的に計算し、毎朝その結果をテーブルに書き込みます。
ステップ 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 コンソールの [ワークスペース] ページに移動します。上部のナビゲーションバーで、目的のリージョンを選択します。対象のワークスペースを見つけ、[操作] 列の を選択します。
ボタンのラベルが [データ開発] の場合、レガシー版の Data Studio が開きます。クリックしないでください。
左側のナビゲーションバーで
アイコンをクリックし、プロジェクトディレクトリ の右側にある をクリックして、ワークフローの作成 ページを開きます。ワークフローの作成 ダイアログボックスで、スケジューリングタイプ を 定期スケジュール に設定し、必要な情報 (例:[名前] を
minimal_daily_demoに設定) を入力して作成を完了します。
ステップ 3:ワークフローのオーケストレーション:ノードのドラッグと依存関係の接続
ワークフローキャンバスで、左側のコンポーネントパネルから仮想ノードをドラッグし、
start_nodeと名付けます。ゼロ負荷ノードは、ビジネスプロセスの開始点を定義するためにのみ使用され、実際には実行されません。
MaxCompute SQL ノードをドラッグし、
count_ordersという名前を付けます。start_nodeの下部にある円をクリックし、count_ordersの上部まで線をドラッグして、単純な処理パイプラインを構築します。
ステップ 4:ノードコードの開発
Data Agent を有効にして、インテリジェントなコード補完の提案を受け、開発効率を向上させることを推奨します。
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) ベースのモデルは、状態駆動の自動フローを可能にします。上流ノードが成功すると、即座に下流タスクがトリガーされ、エンドツーエンドの処理が線形的で安定的かつ秩序正しく行われることを保証します。この段階では、オーケストレーションは最も単純な形式、つまり静的で線形、かつ不可逆な DAG です。
複雑なオーケストレーション:フロー制御
分岐/結合ノードおよび For-Each/Do-While ノードは、DataWorks Standard Edition 以降でのみ利用可能です。
フロー制御ノードは、データ開発をタスク統合からビジネスオーケストレーションへと昇華させます。これらは、一連の精密な制御ノードを通じて高度なロジックを追加することで、従来の DAG の単一の線形依存モデルを超えています。
ノード名 | ノードの説明 |
仮想ノード | 仮想ノードは実際の計算を行いません。複数のサブタスクを一元管理し、ワークフローの開始ノードとして機能します。例えば、製品注文分析ワークフローで、 説明 スタンドアロンノード開発の場合、ワークスペースのルートノードを開始依存ノードとして使用する必要があります。 |
分岐ノード | 上流の結果に基づいて、異なる下流ロジックにルーティングします。例えば、日次の注文合計が 0 の場合はアラートノードをトリガーして後続の計算を停止し、合計が 0 より大きい場合はレポート生成ノードに進みます。 |
結合ノード | 複数の分岐の実行結果をマージして、下流の依存関係の問題を解決します。例えば、財務決済タスクが「通常決済」と「調整ロジック」の2つの分岐に依存している場合、結合ノードはどちらかの分岐が正常に完了すれば、最終的なレポートのアーカイブがトリガーされることを保証します。 |
For-Each ノード | 代入ノードからの結果セットを反復処理し、各要素に対して下流の操作を実行します。例えば、代入ノードによって取得された 31 の省名に対して、For-Each ノードはデータクレンジングタスクを 31 回実行し、毎回1つの省のデータパーティションを処理します。 |
Do-While ノード | 条件が満たされるまで実行を繰り返します。例えば、外部 API を 10 分ごとに呼び出してデータ同期ステータスを照会します。返された値が「処理中」であればループを継続し、「完了」であればループを終了して後続の処理を開始します。 |
詳細については、「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で、ワークフローの プロパティ プロパティを リファレンス可能 に設定します。これにより、ワークフローがサブワークフローに変換されます。メインワークフローで、サブプロセス ノードをドラッグし、参照するワークフローを
child_workflowに設定します。
サブワークフローには以下の制約があります。
内部性:ワークフローとそのすべての内部ノードは、外部タスクへの依存関係を持つことはできません。
隔離:ワークフローは、外部タスクから直接依存関係として設定されることはできません。
受動的なトリガー:デプロイ後、ワークフローは自動的に定期実行インスタンスを生成しません。別のワークフローの
SUB_PROCESSノードによって呼び出された場合にのみ実行されます。詳細については、「サブワークフローの作成」をご参照ください。
ワークフローの分割とモジュラー設計の推奨事項
ワークフローの保守性とパフォーマンスを維持するため、100 ノードを超える大規模なワークフローは分割してください。
ビジネスドメインによる分割:異なるビジネストピック (トランザクション、ユーザー、製品など) の処理パイプラインを別々のワークフローに分割します。
共通ロジックのカプセル化に SUB_PROCESS を使用:共通で再利用可能な処理ステップ (データクレンジングやフォーマットなど) を参照可能なワークフローとしてカプセル化します。
スケジューリング依存関係の設定
スケジューリング依存関係は、スケジュール時刻の達成と上流の成功という2つの条件を通じて、独立したタスクを秩序あるデータ生成パイプラインに接続します。ワークフロー内でノードをオーケストレーションすると、スケジューリング依存関係が自動的に確立されます。また、スケジューリング依存関係の設定を通じて、より複雑な依存関係を構成することもできます。
詳細については、「スケジューリング依存関係の構成」をご参照ください。
ワークフローレベルの依存関係ワークフロー全体が開始する前に、他のタスク (別のワークフローまたはスタンドアロンノード) の完了を待つ必要がある場合に使用します。これは、ワークフローが独立したビジネスモジュールとして機能するシナリオに適しています。例えば、販売ワークフローは、基本データワークフローの出力が完了するのを待ってから開始します。 | ノードレベルの依存関係ワークフロー内の特定のノードが、現在のワークフロー外の外部タスクの完了を待つ必要がある場合に使用します。これにより、詳細なクロスワークフローのオーケストレーションが可能になります。例えば、レポートワークフローの集計ノードは、外部の財務システム内の特定のノードが出力を生成するのを待ちます。依存タスクが時間通りに完了することを保証するために、上流に依存関係チェックノードを構成することを推奨します。 |
周期をまたぐ依存関係周期をまたぐ依存関係とは、タスクの現在の周期のインスタンスが異なる周期のインスタンスに依存することを意味し、同一ノードの自己依存またはクロスノードの依存関係をサポートします。例えば、INSERT OVERWRITE を使用してテーブルのパーティションを上書きするタスクや、累積計算を含むシナリオなどです。自己依存を有効にすると、当日のインスタンスは前日のインスタンスが成功するのを待ってから実行されます。 | ワークスペースをまたぐ依存関係別の DataWorks ワークスペースのタスクに依存するには、ワークスペース名とノードの 出力名、名前、または ID を使用してノードを一意に識別します。これは、部門間やプロジェクト間のデータコラボレーションに適しています。例えば、マーケティングワークスペースのタスクが、会計ワークスペースの主要なデータを参照する場合などです。 |
パラメーターの設計とフロー
ワークスペースパラメーターは、DataWorks Professional Edition 以降でのみ利用可能です。
DataWorks Data Studio は4つのレベルのパラメーター渡しをサポートし、ノードコンテキストパラメーターを通じて柔軟なクロスノードの動的データ転送を可能にします。スコープが低い順にリストされています。
ノードパラメーター同じ SQL コードが毎日異なるパーティションデータを処理する必要がある場合、ノードパラメーターを使用して日付を動的に定義します。定数、組み込み変数、およびカスタム時間式がサポートされています。 詳細については、「スケジューリングパラメーターの構成」をご参照ください。 | コンテキストパラメーター上流の出力パラメーターを通じて、下流ノードに値を動的に渡します。定数、変数、および上流の実行結果がすべてサポートされています。 詳細については、「コンテキストパラメーターの構成」をご参照ください。 |
ワークフローパラメーターワークフロー内の数十のノードが特定のビジネス識別子を共有する必要がある場合、ワークフローパラメーターはワークフロー内のすべてのノードに適用され、ノードパラメーターを一つずつ変更する必要がなくなります。 詳細については、「ワークフローパラメーター」をご参照ください。 説明 ワークフロー内のサブワークフローは、ワークフローパラメーターを直接参照できます。 | ワークスペースパラメーターコードが異なる環境で実行される場合、通常、データベース名やリソースパスは異なります。ワークスペースレベルのパラメーターは環境を区別し、ワークスペース内のすべてのノードに適用されます。例えば、開発環境ではワークスペースパラメーター 詳細については、「ワークスペースパラメーターの構成」をご参照ください。 |
スケジュール設定
定期実行ワークフローとレガシーなビジネスプロセスの主な違いは、ワークフローが全体としてスケジュールを設定するのに対し、ビジネスプロセスは単なる物理的なグループ化であり、全体としてのスケジュール設定をサポートしない点です。
スケジュールはワークフローレベルで設定されます。内部ノードは遅延実行時間のみを設定でき、これはワークフローで定義されたスケジュール時刻に遅延時間を加算して計算されます。
ディメンション | ワークフローレベルの構成 | 内部ノードレベルの動作 |
時間属性 | 絶対時間 (例:02:00) | 相対時間 (ワークフローのスケジュール時刻に基づく遅延) |
周期属性 | 日次/時次/分次/週次/月次/年次サイクルを定義 | ワークフローのサイクルを継承し、変更不可 |
トリガーロジック | 物理的な時間到達 + 上流の成功 | 物理的な時間 + 遅延時間 + 上流の成功 |
デバッグと実行
ノードとワークフローの開発を完了した後、個々のノードをデバッグし、ワークフロー全体を実行して、デプロイ前に正当性を検証します。
単一ノードのデバッグ
単一ノードのデバッグは、SQL ステートメント、Python スクリプト、またはデータ統合同期タスクの検証など、1つのノード内のコードロジックを検証します。このモードは現在のノードのみを実行し、上流または下流の依存関係をトリガーしません。
ノードの右側にある デバッグ設定 パネルで、以下のパラメーターを構成します。
パラメーター名
説明
計算リソース
関連付けられた計算リソースを選択します。利用可能な計算リソースがない場合は、ドロップダウンリストから [計算リソースの作成] を選択します。
重要計算リソースとリソースグループが接続されていることを確認してください。詳細については、「ネットワーク接続性」をご参照ください。
リソースグループ
計算リソースが関連付けられた際に接続性テストに合格したリソースグループを選択します。一部のノードは、リソースグループに 依存パッケージを構成して実行環境を拡張することをサポートしています。
(オプション) データセット
一部のノード (Shell や Python など) は、OSS や NAS に保存されている非構造化データにアクセスするためにデータセットをマウントすることをサポートしています。
(オプション) スクリプトパラメーター
${parameter_name}形式を使用してノードコンテンツを構成し、変数を定義する場合、スクリプトパラメーター で パラメーター名 と パラメーター値 を構成する必要があります。実行時に、変数は実際の値に動的に置き換えられます。詳細については、「スケジューリングパラメーターの構成」をご参照ください。(オプション) 関連付けられたロール
一部のノード (Shell や Python など) は、他の Alibaba Cloud サービスのリソースにアクセスするために関連付けられたロールを構成することをサポートしています。
ノードの上にあるツールバーで、保存 をクリックし、次に 実行 をクリックしてノードタスクを実行します。
ノードの下部でランタイムログと実行結果を表示します。
ワークフローのデバッグ
ワークフローのデバッグは、パイプライン内の複数のノードにまたがるデータ依存関係、パラメーターの受け渡し、実行順序が正しいかどうかを検証します。単一ノードのデバッグ後、部分的なパイプラインまたはワークフロー全体をデバッグできます。
ワークフローの DAG キャンバスページで、上部ツールバーの 実行 ボタンをクリックします。また、ノードを選択して右クリックし、このノードまで実行 または このノードから実行 を選択して部分的な検証を行うこともできます。
表示されるダイアログボックスで、このデバッグ実行のためにワークフロー内のすべてのノード変数 (例:
${bizdate}) に一時的な値を割り当てます。システムは、DAG で定義された依存関係に従って、上から下へと厳密にノードを実行します。キャンバス上でノードのステータスをリアルタイムで監視し、任意のノードをクリックしてランタイムログを表示できます。
キャンバスの左側にある 戻る ボタンをクリックして、ワークフローの開発状態に戻ることができます。
右側の実行履歴には、ワークフローのすべてのデバッグ実行記録が表示されます。
フロー制御に関わるすべての共通ノード (Do-While、分岐、結合) は、ワークフロー内に配置し、上流および下流のノードと連携して初めて効果的にデバッグおよび実行できます。
管理と運用
ワークフローノードの管理
DataWorks では、既存のスタンドアロンノードをワークフローにインポートしたり、ワークフローからノードを削除したり、ワークフロー間でノードを移動したりして、効率的な再利用とモジュラー管理が可能です。
既存のノードをワークフローにインポートする
どのワークフローにも属していない既存のスタンドアロンノードを、[ノードのインポート] を通じて現在のワークフローキャンバスに追加して再利用できます。
対象のワークフローをダブルクリックして、キャンバス編集ページを開きます。
左側のコンポーネントパネルで、[ノードのインポート] タブに切り替えます。
パネルには追加可能なすべてのスタンドアロンノードがリストされます。ノードタイプ、パス、または ノード名 でフィルタリングおよび検索して、対象のノードをすばやく見つけることができます。
ノードを見つけたら、キャンバスにドラッグしてインポートを完了します。
ワークフローからノードを削除する
ワークフローからノードを削除してスタンドアロンノードにしたり、直接別のワークフローに移動したりできます。
スタンドアロンノードとしてワークフローから削除する
ノードをワークフローから切り離し、ワークフローの一部でなくす必要がある場合に使用します。
プロジェクトディレクトリツリーまたはワークフローキャンバスで、対象のノードを右クリックします。
コンテキストメニューで、[ワークフローから削除] を選択します。
確認ダイアログで、削除後にノードが保存される対象パスを選択し、確認します。
別のワークフローに移動する
ビジネスプロセスを再構築し、ノードを現在のワークフローから別のワークフローに移行する必要がある場合に使用します。
プロジェクトディレクトリツリーまたはワークフローキャンバスで、対象のノードを右クリックします。
コンテキストメニューで、[別のワークフローに移動] を選択します。
表示されるリストで、対象のワークフローを選択し、確認します。
ノードを選択して対象のワークフローに直接ドラッグして移動することもできます。
この操作を実行する前に、既存のビジネスプロセスへの潜在的な影響を慎重に評価し、新しい場所で依存関係を速やかに再構成してください。
ワークフローからノードを削除または移動すると、元のワークフロー内でそのノードに構成されていた上流および下流の依存関係は切断されます。
ノードに構成されていたワークフローパラメーターも無効になります。
ワークフローのクローン
クローンは、既存のワークフロー (すべての内部ノード、コード、依存関係を含む) をコピーして、独立したワークフローを生成します。クローンするには、プロジェクトディレクトリ に移動し、対象のワークフローを右クリックして クローン を選択します。
クローンはほぼすべての構成をコピーするため、リスクが生じる可能性があります。クローンしたワークフローをデプロイする前に、以下の点 (「環境分離」チェック) を確認してください。
出力テーブルとターゲットデータソース:クローンされたワークフローのコードは、元のワークフローと同じターゲットテーブルに書き込みます。複数のタスクが同じテーブルを操作してデータ競合を引き起こすのを防ぐため、コード内のターゲットテーブル名を変更する (例:
ods_user_tableをdev_ods_user_tableに変更) か、ノードの出力構成を変更する必要があります。上流依存関係:ワークフローの上流依存関係の構成を確認します。クローンされたワークフローは、デフォルトで元のの上流タスクに依存したままです。これが期待通りであるか確認してください。そうでない場合、データパイプラインの混乱やタスクのドライランが発生する可能性があります。
パラメーター構成:ワークフローとその内部ノードのカスタムパラメーター、特に日付パーティションに関連するパラメーター (例:
${bizdate})、入出力パス、その他のパラメーターを確認します。新しい環境でこれらが正しいことを確認してください。
ワークフローのクローンに加えて、ワークフロー内のノードをクローンすることもできますが、ワークフローをまたいだノードのコピーはサポートされていません。
バージョン管理
内部ノードが個別にデプロイされた場合でも、ワークフローの新しいバージョンが生成されます。
バージョン管理は、すべてのワークフローの変更を自動的に記録し、履歴バージョンの表示と比較をサポートし、必要な場合には任意の履歴状態へのロールバックを可能にします。
ワークフローキャンバスの右側にある バージョン パネルには、2種類のレコードが表示されます。
開発記録:キャンバスで [保存] をクリックするたびに生成されます。このスナップショットは、開発中の偶発的なコード損失を防ぎ、本番環境で実行中のタスクには影響しません。
デプロイ記録:ワークフローが本番環境にデプロイされた後に生成されます。これは、本番スケジューラが実行するバージョンです。本番タスクで問題が発生した場合は、ロールバックのためにデプロイ記録に注目してください。
典型的なユースケース
障害時の迅速なロールバック:コード変更により本番タスクが失敗した場合、[復元] を使用してワンクリックでワークフローを最後の安定したデプロイバージョンに戻し、ダウンタイムを最小限に抑えます。
変更の監査と追跡:いつ、誰によってロジックが変更されたかを調査するには、バージョンリストと [差分] 機能を使用して各コード変更を追跡します。
コードの回復:保存せずに誤ってコードロジックを削除してしまった場合、最新の開発記録から復元します。
重要な考慮事項
復元は現在の開発エリアを上書きします:[復元] は、選択した履歴バージョンを使用して、現在のキャンバス上のすべてのコードと構成を上書きします。復元する前に、コミットされていない変更をローカルのテキストエディタにコピーしてバックアップしてください。
復元後には再デプロイが必要です:[復元] はコードを開発状態に戻すだけです。ロールバックを本番環境で有効にするには、手動でデプロイする必要があります。
デプロイと運用
ノード/ワークフローのデプロイ:ワークフロー開発を完了した後、ノード/ワークフローを本番環境にデプロイします。この時点で、開発環境のノードは、本番環境に対応する定期タスクを生成します。詳細については、「ノードとワークフローのデプロイ」をご参照ください。
ノード/ワークフローの運用:本番環境のワークフローは、スケジュール設定に基づいて定期的にスケジューリングされます。オペレーションセンター に移動して、定期実行ワークフローのスケジューリングステータスを表示し、関連する操作を実行します。詳細については、「定期タスク」および「定期実行インスタンス」をご参照ください。
タスク実行メカニズム
スケジューリングシナリオでは、ワークフロー全体の成功は、その内部タスクの実行ステータスに依存します。
ワークフロー全体の成功は、その内部ノードの最終ステータスによって決まります。
失敗:いずれかの重要なノードが失敗した場合、通常、ワークフローインスタンス全体が失敗とマークされます。
凍結/一時停止:ワークフロー内のノードが手動で凍結または一時停止され、そのノードが後続ノードの上流ノードである場合、パイプラインは中断され、ワークフロー全体も失敗とマークされます。
結合ノード:ワークフローが結合ノードを使用している場合、上流の分岐のノードが失敗しても、結合ノード自体のロジックが成功と判断すれば、ワークフロー全体が「成功」を返すことがあります。したがって、タスクがエラーを検出されずに実行されるのを防ぐために、結合ノードの上流チェックを慎重に設計してください。
特殊なシナリオ:
ワークフロータスクのバックフィルデータインスタンスを凍結すると、ワークフローインスタンスは成功ステータスに設定されます。
バックフィルデータシナリオで、システムがタスクを実行できないと判断した場合、ワークフローは失敗ステータスに設定されます。
インスタンスステータスの更新と、実際の障害イベントの発生との間には遅延があります。
割り当てと制限
ノード数の制限:単一のワークフローは最大 400 の内部ノードをサポートします。キャンバスの読み込みパフォーマンスと保守性を確保するため、ノード数は 100 未満に保ってください。より大規模なシナリオでは、モジュラー分割を使用してください。
サブワークフローの制限:
参照可能オプションが有効になっているワークフローは、そのノードが外部タスクに依存することはできず、また外部タスクから直接依存されることもできません。そうでない場合、デプロイ中にエラーが発生します。
このようなワークフローが本番環境にデプロイされた後、デフォルトでは定期実行インスタンスは自動的に生成されません。ワークフローは、別のワークフローの SUB_PROCESS ノードによって参照された場合にのみ、サブタスクとして実行されます。
最大並列インスタンス数:定期実行ワークフローは、ワークフローレベルでの最大並列インスタンス数の設定をサポートしていません。これは、ワークフロー内の内部タスクに対してのみ設定できます。同時実行を制限するには、個々のノードのスケジューリングポリシーで 最大並列インスタンス数 を構成します。詳細については、「スケジューリングポリシーの構成」をご参照ください。
サポートされていないノードタイプ:EMR Spark Streaming、Flink SQL Streaming、Flink JAR Streaming、および Flink Python Streaming はワークフローではサポートされていません。これらはスタンドアロンノードとしてのみ開発および実行できます。
よくある質問
Q:ワークフローとビジネスプロセスの違いは何ですか?
A:ワークフローは統一されたスケジューリングエンティティですが、ビジネスプロセスは単なるフォルダベースのグループ化です。
Q:デバッグは成功するのに、定期スケジューリングが失敗するのはなぜですか?
A:最も一般的な原因は環境の不一致です。以下の点に注目してください。
リソースグループの違い:デバッグ中は個人用またはデバッグ用のリソースグループを使用していた可能性がありますが、本番スケジューリングでは本番用のリソースグループを使用します。本番リソースグループが有効で、十分な容量があり、正しい権限を持っていることを確認してください。
権限の違い:本番環境の実行アカウントが、特定のテーブル、関数、またはリソースへのアクセス権限を持っていない可能性があります。
依存関係の違い:本番環境の依存関係が開発環境の依存関係と一致していないか、上流の依存関係の出力が本番環境に存在しない可能性があります。
Q:インスタンスが常に待機中/実行されないのはなぜですか?
A:インスタンスは、スケジュール時刻、利用可能なスケジューリングリソース、上流依存関係の完了というすべての条件が満たされた場合にのみ実行されます。
上流依存関係が完了していない:運用保守センターで、インスタンスの依存関係ビューを表示して、どの上流タスクがまだ成功していないかを確認します。
リソース待機:計算リソースグループのキューがいっぱいで、タスクがリソースを待機しています。
ワークフロー/ノードの凍結:ワークフローまたはその上流ノードが手動で凍結または一時停止されていないか確認します。
インスタンスが生成されない:現在の時刻がワークフローのスケジュール時刻に達しているか確認します。タスクがデプロイされたばかりの場合、インスタンスが生成されるまで次のスケジュールサイクルを待つ必要があります。詳細については、「スケジューリング時間とインスタンス生成」をご参照ください。
Q:一部のノードが成功しているのに、ワークフロー全体が失敗と表示されるのはなぜですか?
A:これは、ワークフローのステータス評価ルールによって決まります。
クリティカルパスの失敗:下流の依存関係が不完全なノードが失敗した場合、他の並列ブランチが成功していても、ワークフロー全体が失敗とマークされます。
ノードの凍結:内部ノードが凍結されると、ワークフロー全体が失敗します。