全部產品
Search
文件中心

DataWorks:情境1:包含離線同步節點的商務程序,如何配置調度依賴

更新時間:Jun 19, 2024

DataWorks的離線同步節點不支援通過自動解析自動添加調度依賴,包含離線同步節點的商務程序,如果下遊節點依賴離線同步節點產生的表,您需手動添加產出表到離線同步節點的輸出中,下遊節點查詢離線同步節點資料時,自動解析可以通過錶快速找到產出該表資料的離線同步節點。

易錯點

如果您沒有將離線同步節點的產出表手動添加到離線同步節點的輸出中,自動解析無法找到此離線同步節點,提交引用此離線同步節點的SQL節點時,會出現如下錯誤提示。離線報錯
出現此種錯誤主要是下遊節點中自動解析出來的上遊依賴,無法匹配找到對應的上游離線節點,詳細原因分析可參見易錯原因詳解。為避免此類易錯點,建議包含離線同步節點的商務程序中,調度依賴配置參考以下兩種方式進行配置:

配置方法1:手動將離線節點產出表添加為本節點產出

通過上述報錯原因分析可見,如果要避免此類錯誤需保障下遊節點自動解析出來的上遊依賴,被添加至上遊節點的本節點的輸出中。因此,在完成上述幾個步驟後,您可以在離線節點的調度配置頁面,手動將產出表添加為節點輸出,如下圖所示。手動

配置方法2:離線節點名稱與產出表名稱保持一致

根據上述流程描述可知:
  • 建立離線同步節點時,會為節點自動產生一個命名規則為projectname.nodename本節點的輸出
  • SQL節點引用離線節點產出表時,會為SQL節點自動產生一個命名規則為projectname.tablename依賴的上遊節點
  • 為避免報錯,需要保障SQL節點中依賴的上遊節點名稱和離線節點的本節點的輸出名稱一致。
因此,您可以將離線節點的節點名稱(nodename)和離線節點產出的表名稱(tablename)保持一致,此種情況下即可滿是上述要求,提交節點時不會報錯。
說明 自動產生的projectname.nodename本節點的輸出是在建立節點時產生的,節點建立完成後,如果修改節點名稱,已自動產生的projectname.nodename本節點的輸出不會隨之改變名稱。因此本方法僅適用與建立離線節點時使用,後續修改節點名稱與產出表名稱一致的情境無法解決本文說明的問題。

易錯原因詳解

包含離線同步節點的商務程序,以下圖為例,常見節點建立和依賴配置操作如下:離線同步
步驟序號步驟詳情調度依賴配置結果
1根據商務程序規劃,建立各節點。

以上圖為例,即建立虛擬節點、離線同步節點、ODPS節點。

在DataWorks中建立節點後,DataWorks自動為各節點產生兩個本節點的輸出的配置資訊,其中一個本節點的輸出名稱的尾碼為_out,一個本節點的輸出名稱為projectname.nodename
以上圖中的離線節點user_1為例,建立節點後,節點即有:
  • 一個名稱為*******_out的本節點的輸出。
  • 一個名稱為doctest.user_1的本節點的輸出。
2根據商務程序規劃,為各個節點拉線,明確各節點的運行邏輯順序上的上下遊依賴關係。在商務程序頁面為各節點拉線後,DataWorks根據拉線的結果,自動為各個父節點添加依賴的配置資訊。

以上圖中的ODPS節點sql_1為例,拉線完成後,離線節點user_1在sql_1的上遊,DataWorks自動將user_1的名稱為*******_out的輸出添加為sql_1的依賴的上遊節點

3為各節點開發工作單位代碼。在各個節點中開發工作單位代碼時,DataWorks會根據業務代碼自動解析,通過代碼中的部分輸入、輸出命令,自動為節點添加本節點的輸出依賴的上遊節點

以上圖中的ODPS節點sql_1為例,如果sql_1節點需要取用離線節點user_1產出的表table_1的資料時,例如出現了類似select * from table_1這類的語句,DataWorks會自動為sql_1添加一條依賴的上遊節點,且自動添加的父節點輸出名稱的命名規則為projectname.tablename,本樣本即為doctest.table_1

完成上述步驟後,如果您沒有關注到離線節點無法自動解析,為離線節點自動將輸出表添加為節點的本節點的輸出,您直接提交商務程序節點時,系統會報錯,提示您依賴的父節點輸出名不存在。離線報錯
出現此種錯誤的原因是:
  • 由於離線節點不支援自動解析,所以離線節點的產出表table_1沒有被自動添加為離線節點的本節點的輸出。即離線節點user_1沒有doctest.table_1這條輸出。
  • 離線節點的下遊節點sql_1因為自動解析,添加了一條命名規則為projectname.tablename依賴的上遊節點,本樣本即為doctest.table_1,但是由於doctest.table_1沒有作為user_1的輸出,所以sql_1中添加的這條父節點依賴無法匹配到user_1的節點ID。
  • 提交sql_1節點時,系統檢測到sql_1有doctest.table_1這個上遊依賴,但是因為這條上遊依賴沒有關聯到節點ID,系統無法通過這條依賴找到對應的上遊節點,出現報錯,提示依賴的父節點輸出名不存在。