本文為您介紹依賴關系的相關問題。
配置調度依賴前您需先了解以下內容
調度依賴配置常見問題
節點刪除、變更常見問題
跨周期依賴配置實時場景
調度依賴配置實時場景
其他常見問題
什么是調度依賴
調度依賴就是節點間的上下游依賴關系,在DataWorks中,上游任務節點運行完成且運行成功,下游任務節點才會開始運行。
掛載依賴關系后,當前節點執行的必要條件之一為當前節點依賴的父節點需要執行成功。更多調度依賴內容,詳情請參見調度依賴配置指引。
為什么要設置調度依賴
配置調度依賴后,可保障調度任務在運行時能取到正確的數據(當前節點依賴的上游節點成功運行后,DataWorks通過節點運行的狀態識別到上游表的最新數據已產生,此時,下游節點再去取數)。避免下游節點取數據時,上游表數據還未正常產出,導致下游節點取數出現問題。
DataWorks上如何設置調度依賴?
在DataWorks上,上游節點的輸出作為下游節點的輸入,形成節點依賴關系。
SQL任務會以如下方式自動配置節點輸入輸出:
select
一張表,將自動解析產出該表的節點作為本節點依賴的上游。insert
或create
一張表,將自動解析該表為本節點的輸出。
數據集成任務需手動將產出表以
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再執行)的任務流程?
依賴關系設置:將A、B、C的依賴關系設置為A的輸出為B的輸入,B的輸出為C的輸入。
調度頻率設置:由于調度配置為節點維度的配置,所以如果3個節點都需要小時調度,需要A、B、C的調度周期均設置為小時才可。
如何設置跨業務流程,同地域跨項目依賴?
原理說明:上游節點的輸出作為下游節點的輸入形成節點依賴關系。在需要設置依賴關系的節點輸入處添加需要依賴的節點(跨項目,跨業務流程)的節點輸出即可。
已配置失敗重跑的任務在運行失敗后未重跑,并報錯Task Run Timed Out, Killed by System!!!
報錯內容:
當目標任務調度配置的時間屬性中,重跑屬性配置為運行成功或失敗后皆可重跑或運行成功后不可重跑,運行失敗后可以重跑,實際執行任務時,該任務在運行失敗后未重跑,并產生
Task Run Timed Out, Killed by System!!!
報錯。可能原因:
該任務調度配置的時間屬性中,配置了超時時間。當任務的運行時長超過超時時間,任務自動終止運行。由于超時導致運行失敗的任務不會觸發任務重跑。
解決方案:
當任務運行出現超時失敗時,失敗重跑機制不生效,您需手動重啟相關任務。