全部產品
Search
文件中心

DataWorks:依賴關係

更新時間:Jun 19, 2024

本文為您介紹依賴關係的相關問題。

什麼是調度依賴

調度依賴就是節點間的上下遊依賴關係,在DataWorks中,上遊任務節點運行完成且運行成功,下遊任務節點才會開始運行。

說明

掛載依賴關係後,當前節點執行的必要條件之一為當前節點依賴的父節點需要執行成功。更多調度依賴內容,詳情請參見調度依賴配置指引

為什麼要設定調度依賴

配置調度依賴後,可保障調度任務在運行時能取到正確的資料(當前節點依賴的上遊節點成功運行後,DataWorks通過節點啟動並執行狀態識別到上遊表的最新資料已產生,此時,下遊節點再去取數)。避免下遊節點取資料時,上遊表資料還未正常產出,導致下遊節點取數出現問題。

DataWorks上如何設定調度依賴?

在DataWorks上,上遊節點的輸出作為下遊節點的輸入,形成節點依賴關係。

說明
  • SQL任務會以如下方式自動設定節點輸入輸出:

    • select一張表,將自動解析產出該表的節點作為本節點依賴的上遊。

    • insertcreate一張表,將自動解析該表為本節點的輸出。

  • Data Integration任務需手動將產出表以projectname.tablename格式作為節點輸出,下遊對同步產出表進行清洗時,自動解析才能解析到。

  • 因為需通過唯一的輸出定位到唯一的節點,以此形成節點依賴關係,所以節點輸出(projectname.tablename)需確保唯一。

哪些情境不支援設定調度依賴?

由於DataWorks的調度依賴主要保障的是調度節點定時更新的表資料,通過節點調度依賴保障下遊取數無誤。因此,不是DataWorks平台上調度更新的表,平台無法監控。

當存在非周期性調度生產資料的表,有節點select該類表資料時,需手動刪除通過select自動產生的依賴上遊節點配置。非周期性調度生產資料的表包括:

  • 從本地上傳到DataWorks的表

  • 維表

  • 非DataWorks調度產出的表

  • 手動任務產出的表

不需要依賴的表如何刪除?

按右鍵代碼中的表名稱,選擇刪除輸出,再重新自動解析。刪除輸入

提交節點報錯:當前節點依賴的父節點輸出名不存在

提交節點時,系統出現提示,當前節點依賴的父節點輸出名不存在。可能出現的原因及解決方案,詳情請參見提交節點報錯:當前節點依賴的父節點輸出名不存在

提交節點時提示:輸入輸出和代碼血緣分析不匹配

提交節點時,系統出現提示,輸入輸出和代碼血緣分析不匹配。可能出現的原因及解決方案,詳情請參見提交節點時提示:輸入輸出和代碼血緣分析不匹配

為什麼自動解析的父節點名會報依賴的父節點輸出(表)不存在?

提交失敗

此處報錯並不是指表不存在,只是未通過表找到產出表資料的節點掛載節點依賴。

出現上述情況有以下兩種原因

  • 上遊節點未提交,提交後可以再次嘗試。

  • 上遊節點已經提交,但上遊節點的輸出名不是workshop_yanshi.tb_2

說明
  • 如果tb_2為同步任務產出的表,請在產出tb_2表資料的同步任務節點輸出那手動以projectname.tablename的方式添加為節點輸出,詳情請參考文檔調度依賴配置指引

  • 如果tb_2為非調度節點每天更新的表,請在代碼中找到表右鍵刪除輸入,再重新自動解析。

非調度節點每天更新的表,請參見哪些情境不支援設定調度依賴?

為什麼有些節點的本節點的輸出中,下遊節點名稱、下遊節點ID有這些資料,有些為空白並且不能手動編輯。

節點依賴關係是下遊節點去掛上遊節點依賴。如果當前節點下遊無子節點,則無內容。待本節點下遊配置子節點後,便會自動解析出內容。

不需要依賴的依賴關係如何刪除?

代碼中找到表右鍵刪除輸入再重新選擇自動解析刪除輸入

下遊任務依賴上遊任務的運行規則是什嗎?

在DataWorks調度系統中,節點設定上下遊依賴關係是為了保障資料有效產出和擷取。所以是否設定依賴關係可以從資料是否存在強相關性去判斷。詳情請參見調度依賴配置指引

節點的輸出名稱的作用是什嗎?

節點的輸出名稱用於建立節點間的依賴關係。假設節點A的輸出名稱是ABC,而節點B將ABC作為它的輸入,則節點A與節點B之間便建立了上下遊關係。

一個節點可以有多個輸出名稱嗎?

可以。節點輸出相當於當前節點的定義,下遊節點如果需要依賴當前節點,可以通過引用本節點的任何一個輸出名稱作為下遊節點的父節點輸出名稱,即可與當前節點建立依賴關係。

多個節點往同一張表寫資料,自動解析報錯節點輸出名相同且提交報錯,可以有相同的輸出名稱嗎?

不可以。節點輸出名和節點、表一樣,需要在租戶層級唯一。這樣自動解析可以根據唯一的輸出找到唯一的節點掛上節點依賴關係,所以如果實際情境有多個節點產出資料至同一張表,那麼需要確定下遊節點自動解析這張表時應該掛哪個節點依賴(哪個節點最晚寫入這張表資料,確保下遊節點取數無問題即可),並且修改其他節點的輸出,確保輸出唯一。

若同一個工作空間中,兩個調度節點往同一張表插入資料,自動解析情境下將導致其中一個節點產生報錯:當前工作空間${projectname}的節點${nodename1}和${projectname}的節點${nodename2}的輸出名稱相同:${node_outputname},不能多個節點使用同一個輸出名

使用自動解析依賴關係時,如何不解析到中間表?

在SQL代碼中選中中間表名並按右鍵刪除輸入刪除輸出,再次執行自動解析輸入輸出即可。

商務程序最上遊節點的父節點配置應該如何配置?

如果是商務程序的業務開始節點,您可以選擇在商務程序內添加一個虛擬節點作為商務程序的開始節點。虛擬節點的上遊可以設定為工作空間根節點。虛擬節點的使用,詳情請參見虛擬節點

為什麼在節點A搜尋上遊節點輸出名時,搜尋到了節點B不存在的輸出名?

因為依賴關係解析是基於已經提交和發布的節點資訊來進行搜尋,如果節點B提交成功後,您又刪除了節點B的輸出名稱且未提交至調度系統,則在節點A上仍然能搜到節點B已刪除的輸出名。

為什麼節點刪除報錯當前節點存在子節點,下線失敗,但是在調度配置介面看已經沒有該節點的依賴?

當前節點在開發環境和生產環境都沒有節點依賴當前節點時,當前節點才能被下線。您可以分別進入開發環境營運中心生產環境營運中心進行確認。

為什麼營運中心有些依賴線是虛線?

虛線是設定了跨周期依賴,跨周期依賴介紹,詳情請參見情境2:依賴上一周期的結果時,如何配置調度依賴

小時任務設定自依賴對自身及下遊節點有什麼影響?

  • 對當前節點執行影響:上遊節點上一周期執行個體運行成功後下一周期執行個體才會運行。

    即時情境:假設小時任務0點開始每小時調度一次,1點的執行個體需要等待0點的執行個體執行成功,1點的執行個體才會執行。

  • 對下遊節點執行影響:假設下遊節點為天調度任務,下遊天節點依賴由直接依賴多個小時執行個體變為直接依賴上遊某一個小時執行個體,小時執行個體由於存在自依賴,所以下遊天任務實際上為間接依賴了上遊多個小時執行個體。

日調度任務依賴小時調度任務啟動並執行不同情境,依賴關係如何配置?

  • 情境一:日調度任務依賴小時調度任務當天的所有小時執行個體。

    天調度任務直接依賴小時調度任務時,會依賴小時調度任務當天所有執行個體。天任務直接依賴小時任務

  • 情境二:日調度任務依賴小時調度任務當天具體某個執行個體。

    • 小時調度任務配置:小時調度任務設定自依賴,即小時任務調度配置介面依賴的上一周期處選擇本節點。

    • 日調度任務配置:天調度任務直接依賴小時任務。即天調度任務的輸入(依賴的上遊節點)配置小時任務。

    小時任務設定自依賴

  • 情境三:日調度任務依賴小時調度任務昨天所有的小時執行個體。

    • 日調度任務調度配置跨周期依賴小時調度,即日調度任務調度配置介面選擇依賴上一周期,選擇自訂,填小時任務節點id。

    • 日調度任務調度配置去掉小時任務同周期依賴,即同周期依賴(依賴的上遊節點)處,去掉小時任務同周期依賴。

說明

如果日調度任務對小時調度任務做過跨周期依賴,那需要檢查是否同周期依賴已經去掉。否則日調度任務會同時依賴小時調度任務當天所有執行個體和昨天所有執行個體。

天任務依賴小時任務時,直接設定依賴關係,天任務幾點會運行?

原理說明:當天任務直接依賴小時任務時:天任務會依賴小時任務當天所有執行個體,即等到小時任務當天最後一個執行個體執行成功,天任務才會執行。

即時情境:

  • 假設小時任務0點開始,每小時調度一次。那麼天任務需要等待24個小時任務全部運行完成才能開始運行天任務。

  • 營運中心依賴關係查看:天任務右鍵查看父節點會顯示依賴小時任務當天所有執行個體,即依賴24個小時執行個體。(依賴線:實線)

天任務依賴小時任務時,如何?天任務依賴小時任務當天具體某個執行個體,而非依賴所有的小時執行個體?

原理說明:當天任務依賴小時任務當天具體某個小時執行個體時,小時任務只需要設定自依賴,天任務定時時間與具體某個小時執行個體定時時間保持一致即可。

即時情境:當天任務需要依賴小時任務當天定時時間12點的執行個體時

  • 依賴關係設定:

    • 上遊小時任務配置:小時任務需要設定自依賴,即在調度配置,在時間屬性地區,選中依賴上一周期 > 本節點

    • 下遊天任務配置:天任務設定定時時間為12點。

  • 營運中心依賴關係查看:

    • 天執行個體右鍵查看父節點會顯示依賴小時任務當天定時時間為12:00的執行個體。(依賴線:實線)

    • 小時執行個體右鍵查看父節點會顯示上遊父節點為上一個小時執行個體,定時時間12:00的執行個體依賴定時時間11:00的執行個體(依賴線:虛線,小時任務設定了跨周期依賴,依賴項:本節點)

天任務依賴小時任務時,如何?天任務依賴小時任務昨天所有的小時執行個體。而非當天所有小時執行個體?

原理說明:天任務依賴小時任務昨天所有小時執行個體,天任務需要跨周期依賴小時任務。

即時情境:當天任務需要依賴小時任務當天所有執行個體。

  • 依賴關係設定:

    • 下遊天任務配置:跨周期依賴小時任務,即在調度配置時間屬性地區,選擇依賴上一周期 > 小時任務節點id。

    • 上遊小時任務配置:無需配置

  • 營運中心依賴關係查看:

    下遊天執行個體右鍵查看父節點會顯示依賴小時任務昨天所有小時執行個體。(依賴線:虛線,天任務設定了跨周期依賴小時任務)

什麼情況下配置依賴上一周期的依賴項為本節點?

業務情境:如果當前節點本周期任務運行需要依賴上一周期當前節點產出的節點資料時,當前節點可以設定自依賴。即當前節點上一周期執行個體執行完成後,當前節點下一周期的執行個體才去執行,避免當前執行個體取數時,上一周期執行個體還在執行(資料還未產出)。

  • 本節點依賴自己上一周期產出的資料,如果您需要確認上一周期產出資料的時間,請在任務的調度配置 > 時間屬性地區,配置依賴上一周期 > 本節點

  • 小時任務依賴天任務,當上遊天任務運行完成時,已到下遊小時任務的多個周期定時時間,導致小時任務多周期並發調度。此時您可以在任務的調度配置 > 時間屬性地區,配置依賴上一周期 > 本節點

下遊節點同時依賴多個任務運行時,依賴關係如何配置?

如果下遊節點同時配置上了依賴多個任務,是否需要依賴所有節點需要您進行業務判斷,如果表資料有強相關依賴的,建議將所有節點都設定上依賴關係。節點是否需要設定依賴關係,請參考為什麼要設定調度依賴

例如,下遊節點C同時依賴日調度任務B及當天的小時調度任務A,小時調度任務輸出結果為表A,日調度任務輸出結果為表B,下遊節點C需要依賴表A及表B運行。

假設下遊節點C中涉及查詢表A及表B的相關資料,當您僅配置依賴的上遊節點為小時調度任務A,而未配置依賴的上遊節點為日調度任務B,則可能在上遊節點的日調度任務B未執行完成時,下遊節點C便開始執行節點任務,導致擷取日調度任務的輸出表B的資料失敗,任務運行報錯。因此,該樣本中,您需要將日調度任務及小時調度任務均配置為下遊節點C依賴的上遊節點

如果下遊節點對上遊表沒有強依賴關係,即下遊節點取任何時候上遊表資料都沒有問題(即使上遊節點最新表資料也未產出),這種情況下,可以不設定節點依賴關係。

上遊A是小時任務,下遊B是日任務,任務每天在A任務全部執行完成後要匯總執行一次,小時任務運行到第二天,天任務是否會運行,參數是否會影響

日任務B直接依賴小時任務A當天的執行個體,日任務B會匯總當天的小時任務。如果小時任務完成最後一個執行個體的運行,已經到了第二天,則下遊的日任務仍會執行。只是已耗用時間不同,調度參數替換不受影響。

節點A每天每小時整點執行一次,節點B每天運行一次。如何設定節點A每天第一次運行成功後,節點B便開始執行?

配置節點A時,需要勾選依賴上一周期,並選擇本節點。節點B的定時時間配置為0點,則每天自動調度執行個體中,節點B的執行個體僅依賴節點A在0點產生的執行個體,即節點A的第一個執行個體。

有A、B、C三個任務,如何?每個小時執行一次A->B->C(A執行完了B再執行,B執行完了C再執行)的任務流程?

  1. 依賴關係設定:將A、B、C的依賴關係設定為A的輸出為B的輸入,B的輸出為C的輸入。

  2. 調度頻率設定:由於調度配置為節點維度配置,所以如果3個節點都需要小時調度,需要A、B、C的調度周期均設定為小時才可。

如何設定跨商務程序,同地區跨專案依賴?

原理說明:上遊節點的輸出作為下遊節點的輸入形成節點依賴關係。在需要設定依賴關係的節點輸入處添加需要依賴的節點(跨專案,跨商務程序)的節點輸出即可。

已配置失敗重跑的任務在運行失敗後未重跑,並報錯Task Run Timed Out, Killed by System!!!

  • 報錯內容:

    當目標任務調度配置時間屬性中,重跑屬性配置為運行成功或失敗後皆可重跑運行成功後不可重跑,運行失敗後可以重跑,實際執行任務時,該任務在運行失敗後未重跑,併產生Task Run Timed Out, Killed by System!!!報錯。

  • 可能原因:

    該任務調度配置時間屬性中,配置了逾時時間。當任務的運行時間長度超過逾時時間,任務自動終止運行。由於逾時導致運行失敗的任務不會觸發任務重跑。

  • 解決方案:

    當任務運行出現逾時失敗時,失敗重跑機制不生效,您需手動重啟相關任務。