問題の説明
ノードをコミットすると、依存関係にある親ノードの出力名が存在しないというエラーが報告されます。
上の図に示すように、このエラーは、現在のノードに設定されている [親ノードの出力名] の依存関係を使用して、システムが xc_ods_user_info_d_133 テーブルを生成する先祖ノードを検出できないことを示します。
エラー [ノード出力名が存在しません] は、スケジューリング依存関係の構成からノード出力名が欠落していることを示します。これは、この出力名が設定されたノードが存在しないことを意味し、テーブル自体が存在しないわけではありません。また、ノードによってテーブルが生成されるものの、そのノードの出力として追加されていない場合にも、このエラーが発生します。
考えられる原因 1: このテーブルを生成するノードがない
考えられる原因
このエラーは、このテーブルを生成するノードがないために発生する可能性があります。
ほとんどのシナリオでは、DataWorks はコードを自動的に解析し、出力テーブルをノードの出力として追加します。ただし、定期的なスケジュールによって生成されないテーブルの場合、自動解析はサポートされていません。定期的なスケジュールによって生成されないテーブルには、次のものがあります。
ローカルマシンから DataWorks にアップロードされたテーブル
ディメンションテーブル
DataWorks のスケジューリングによって生成されないテーブル
ワンタイムタスクによって生成されるテーブル
ノードが定期的なスケジュールによって生成されないテーブルに対して SELECT 文を実行すると、このエラーが発生します。
ソリューション
定期的なスケジュールによって生成されていないテーブルについては、依存関係の構成を手動で削除する必要があります。この例では、[親ノードの出力名] が
xc_ods_user_info_d_133であるスケジューリングの依存関係の構成を削除する必要があります。詳細については、「定期的なスケジュールの依存関係を構成する」をご参照ください。
考えられる原因 2: ノードがテーブルを生成するが、そのテーブルがそのノードの出力として追加されていない
考えられる原因
このエラーは、ノードがテーブルを生成するが、そのテーブルがそのノードの出力として追加されていない場合にも発生する可能性があります。
ほとんどのシナリオでは、DataWorks はコードを自動的に解析し、出力テーブルをノードの出力として追加します。ただし、一部の種類のノードでは自動解析はサポートされていません。自動解析では、オフラインノード、AnalyticDB for PostgreSQL ノード、AnalyticDB for MySQL ノード、または EMR ノードのスケジューリング依存関係を追加できません。これらのノードの出力テーブルは、手動で出力として追加する必要があります。
ノードがこれらのノードタイプのいずれかによって生成されるテーブルに対して SELECT 文を実行するが、そのテーブルが生成元ノードの出力として手動で追加されていない場合に、このエラーが発生します。
ソリューション
テーブルを、それを生成するノードの出力として手動で追加する必要があります。この例では、
xc_ods_user_info_d_133を [このノードの出力] として手動で追加する必要があります。詳細については、「定期的なスケジュールの依存関係を構成する」をご参照ください。
不正確な依存関係の構成によるデータの問題を防ぐため、DataWorks はノードをコミットする際に、テーブルのデータリネージからの入力と出力と、スケジューリング構成の入力と出力を比較します。それらが一致しない場合、プロンプトが表示されます。詳細については、「ノードコミットのプロンプト: 入力と出力がコードデータリネージ分析と一致しません」をご参照ください。
定期的な DataWorks スケジュールによって生成されないテーブルの場合、ノードの依存関係は必要ありません。これらの依存関係は削除できます。依存関係を削除した後、ノードをコミットすると、データリネージとスケジューリング依存関係の不一致を示すプロンプトが表示されます。削除した非定期テーブルの依存関係以外に不一致がないことを確認してください。その他すべてが正しい場合は、コミットを強制できます。
考えられる原因 3: 重複するノード出力名が存在する
考えられる原因
この問題は、複数のノードが同じ [ノード出力] 名を持つことでも発生する可能性があります。これは、2つのシナリオで発生する可能性があります:
複数のノードが同じテーブルを生成する。
複数のノードが同じテーブルを生成する場合、別のノードがそのテーブルに対して SELECT 文を実行するときに、システムはテーブルを生成する一意のノードを見つけることができません。これにより、ノードをコミットする際にエラーが発生します。
同じプロジェクト内に同じ名前のノードが存在する。
ノードが作成されると、システムは自動的に 2 つの [ノード出力] を追加します。これらの出力の 1 つは、
projectname.nodenameの命名規則に従って名付けられます。したがって、同じプロジェクト内の 2 つのノードが同じ名前を持つ場合、それらの自動生成された [ノード出力] も同じ名前になります。これにより、ノードをコミットする際にエラーが発生します。
ソリューション
この問題を解決するには、コード開発標準と推奨される命名規則に厳密に従ってください。
各テーブルはシングルノードによって生成される必要があります。ノードの出力テーブルは、そのノードの出力として追加する必要があります。
ノード名が同じプロジェクト内で一意であることを確認してください。
変更を加えた後は、複数のノードで同じ[このノードの出力]の名前が使用されないよう確認してください。