現象
ノードをコミットすると、システムに、設定された入出力がデータリネージと一致しないという警告が表示されます。表示される[新しいバージョンをコミット] ダイアログボックスでは、ピンク色の警告エリアに、「Input and data lineage do not match」などのより具体的なメッセージが表示されます。これは、送信した入力が workshop0423.ods_log_info_d であるのに対し、データリネージから派生した入力が workshop0423.ods_log_info_d;workshop0423.ods_user_info_d_1 であることを示しています。[確認] ボタンを有効にするには、[コミットの続行を確認] チェックボックスを選択する必要があります。このシナリオでは、DataWorks の開発ページで、左側の ODPS SQL コードが INSERT OVERWRITE TABLE dw_user_info_all_d を使用して ods_log_info_d テーブルと ods_user_info_d_1 テーブルを結合し、その結果を宛先テーブルに書き込みます。右側のスケジューリング設定パネルには、[親ノード] と [出力] の 2 つのセクションがあります。[親ノード] では、システムは入力テーブル workshop0423.ods_log_info_d を自動的に解析します。[出力] セクションには、システムのデフォルト出力 workshop0423.500889455_out と、手動で追加された出力テーブル workshop0423.dw_user_info_all_d が含まれています。この不一致は、データリネージから解析されたテーブルが、スケジューリング設定パネルで設定した依存関係と競合するために発生します。
考えられる原因
この警告は、コードの SELECT 文で指定されたテーブルが 親ノードの設定と一致しない場合、または INSERT 文や CREATE 文のテーブルが 出力 の設定と一致しない場合に表示されます。
例:
-
送信したノードコードは
table2からデータを選択しますが、table2はこのノードの先祖ノードとして設定されていません。 -
ノードの
出力にdoc_testを設定しましたが、コードはそこに書き込みを行いません。
解決策
-
定期的に生成されないテーブルの場合、警告を無視してノードをコミットできます。
DataWorks のスケジューリング依存関係は、主に、定期的に更新されるテーブルのデータがスケジュールされたノードで利用できるように設計されています。プラットフォームは、自身のスケジューリングサービスによって更新されないテーブルを監視できません。ノードのコードが定期的に生成されないテーブルからデータを選択する場合、親ノードの設定から自動的に解析された上流の依存関係を削除する必要があります。定期的に生成されないテーブルには、次のものがあります:
-
ローカルマシンから DataWorks にアップロードされたテーブル
-
ディメンションテーブル
-
DataWorks の自動トリガーノードによって生成されないテーブル
-
手動トリガーノードによって生成されたテーブル
-
-
定期的に生成されるテーブルの場合、データリネージとスケジューリング依存関係が一致していることを慎重に確認する必要があります。
この確認を行わずにコミットを強制すると、次の問題が発生する可能性があります:
-
子孫ノードが最新のデータを取得できない可能性があります。たとえば、コードがテーブル A からデータを選択し、そのテーブル A がスケジュールされた自動トリガーノードによって毎日生成されるとします。テーブル A を生成するノードを現在のノードの
親ノードに追加してスケジューリング依存関係を確立せず、テーブル A を生成するノードが失敗した場合、子孫ノードは前回成功した実行の古いデータを使用するため、不整合が生じる可能性があります。 -
「Dependent ancestor output name not found」というエラーが発生する可能性があります。たとえば、コードがテーブル B にデータを作成または挿入するにもかかわらず、
出力セクションでテーブル B を出力として設定しない場合を考えます。別のノードがテーブル B からデータを選択すると、システムはこの関係を自動的に解析し、そのノードの入力としてテーブル B を追加して依存関係を作成します。しかし、システムはこの依存関係をテーブル B を生成するノードまで遡って追跡できません。ノードをコミットしようとすると、「Node commit error: Dependent ancestor output name not found」というエラーが発生します。詳細については、「ノードのコミットエラー:依存する祖先ノードの出力名が見つかりません」をご参照ください。
-