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

DataWorks:シナリオ 1:ワークフローのバッチ同期ノードのスケジューリング依存関係を設定する

最終更新日:Jan 11, 2025

自動解析機能に基づいて、ワークフローのバッチ同期ノードにスケジューリング依存関係を自動的に追加することはできません。ノードが、その祖先バッチ同期ノードによって生成されたテーブルに依存している場合は、テーブルをバッチ同期ノードの出力に手動で追加する必要があります。このようにして、ノードがテーブルデータにクエリを実行すると、自動解析機能によってバッチ同期ノードをすばやく見つけることができます。

エラーメッセージ

バッチ同期ノードによって生成されたテーブルをバッチ同期ノードの出力に手動で追加しないと、システムは自動解析機能を使用してバッチ同期ノードを見つけることができません。この場合、バッチ同期ノードの出力に依存する SQL ノードをコミットすると、次の図に示すエラーメッセージが表示されます。An error that is reported for a batch synchronization node
このエラーは、自動的に解析された上流の依存関係に基づいて、SQL ノードが依存するバッチ同期ノードをシステムが見つけることができないために発生します。詳細については、「エラー分析」をご参照ください。このエラーを防ぐために、次のいずれかの方法を使用して、バッチ同期ノードのスケジューリング依存関係を設定することをお勧めします。

方法 1:バッチ同期ノードによって生成されたテーブルをその出力に手動で追加する

上記のエラーを防ぐために、自動的に解析された上流の依存関係をバッチ同期ノードの出力に手動で追加できます。この操作は、バッチ同期ノードの[プロパティ] パネルで実行できます。次の図は例を示しています。Manually add the table

方法 2:バッチ同期ノードの名前を、生成されたテーブルの名前と同じにする

上記の記述に基づいて、次の情報を取得できます。
  • バッチ同期ノードを作成すると、システムは、ノードに対して 出力projectname.nodename 形式で名前が付けられた を自動的に生成します。
  • SQLノードがバッチ同期ノードの生成テーブルを使用する場合、システムはSQLノードに対して依存関係のある上位ノードprojectname.tablename 形式の名前を持つ[依存関係の上位ノード] を自動的に生成します。
  • エラーを防ぐため、[依存関係のある祖先ノード] の名前がバッチ同期ノードの [出力] の名前と同じであることを確認する必要があります。
したがって、SQL ノードをコミットするときに上記のエラーを防ぐには、バッチ同期ノードの名前を、バッチ同期ノードによって生成されたテーブルの名前と同じにする必要があります。
説明 ノードを作成すると、システムは、ノードに対して 出力projectname.nodename 形式で名前が付けられた [出力] を自動的に生成します。ノードの作成後にノードの名前を変更しても、[出力] の名前は変更されません。したがって、この方法は、バッチ同期ノードを作成する場合にのみ使用できます。後続の操作でノードまたはバッチ同期ノードによって生成されたテーブルの名前を変更して名前の一貫性を確保しても、このエラーは解決されません。

エラー分析

次の図は、バッチ同期ノードを含むワークフローで設定されたノードとスケジューリング依存関係を示しています。Batch synchronization
ステップ番号詳細ステップ設定済みのスケジューリング依存関係
1ワークフローの計画に基づいて、ワークフローにノードを作成します。

前の図では、仮想ノード、バッチ同期ノード、および MaxCompute ノードが作成されています。

DataWorks でノードが作成されると、システムは各ノードに対して 2 つの [出力] を自動的に生成します。1 つは projectname.nodename 形式で名前が付けられ、もう 1 つの名前には _out というサフィックスが付きます。
たとえば、前の図は、バッチ同期ノード user_1 が作成された後、システムがノードに対して次の出力を自動的に生成することを示しています。
  • *******_out という名前の出力
  • doctest.user_1 という名前の出力
2ワークフローの計画に基づいて線を描画してノードを接続し、ノードの依存関係を決定します。ノードが接続されると、システムは接続に基づいて各祖先ノードの依存関係設定を自動的に追加します。

たとえば、ノードを接続した後、前の図の MaxCompute ノード sql_1 はバッチ同期ノード user_1 の子孫ノードになります。この場合、システムは、user_1 の *******_out という名前の出力を sql_1 の [依存祖先ノード] として自動的に設定します。

3各ノードのタスクコードを開発します。各ノードのタスクコードを開発すると、システムはコード内の一部の入力コマンドと出力コマンドを自動的に解析し、各ノードの [出力] または [子孫祖先ノード] を追加します。

たとえば、MaxCompute ノード sql_1 は、バッチ同期ノード user_1 によって生成された table_1 テーブルのデータを使用する必要があり、sql_1 のタスクコードには select * from table_1 などのステートメントが含まれています。この場合、システムは sql_1 の [依存祖先ノード] を自動的に追加します。自動的に追加された祖先ノードの出力には、projectname.tablename 形式で名前が付けられます。この例では、出力名は doctest.table_1 です。

上記の操作を実行した後、バッチ同期ノードによって生成されたテーブルがバッチ同期ノードの [出力] に自動的に追加されないことに気付かないと、ワークフローでノードをコミットしたときにエラーが報告されます。エラーは、依存祖先ノードの出力名が存An error that is reported for a batch synchronization node
このエラーは、次の理由で発生します。
  • バッチ同期ノード user_1 は自動解析をサポートしていません。そのため、user_1 によって生成された table_1 テーブルは、user_1 の[出力]に自動的に追加されません。これは、user_1 に doctest.table_1 という名前の出力がないことを示しています。
  • システムは、子孫ノード sql_1 用に 依存関係のある上位ノードprojectname.tablename 形式で名前が付けられた[依存関係のある祖先ノード]を自動的に追加します。この例では、依存関係のある祖先ノードの名前は doctest.table_1 です。ただし、システムは doctest.table_1 を user_1 の出力に追加しません。そのため、システムは user_1 の ID を見つけることができません。
  • sql_1 をコミットすると、システムは sql_1 に上流の依存関係 doctest.table_1 があることを検出します。ただし、システムは上流の依存関係を祖先ノードの ID に関連付けることができず、sql_1 の依存関係のある祖先ノードの出力名が存在しないことを示すエラーを報告します。