一、為什麼需要設定排程依賴
設定排程依賴是為了保障業務資料有效、适時地産出,形成規範化的資料研發場景。
換句話說就是為了保障下遊節點執行時上遊資料已經正确産出,避免下遊節點取上遊資料時上遊資料還未産出導緻出現資料品質問題。
規範的依賴關系配置後,您無需關心目前節點需要依賴表由哪個節點産出,通過DataWorks自動解析将一鍵為您設定任務依賴。
那dataworks上是怎麼知道上遊資料什麼事後産出的呢,我們再來具體看下排程依賴在dataworks上的具體實作。
1.1排程依賴在DataWorks上的具體實作
在DataWorks上,産出table_B資料的節點B任務執行完成,平台預設資料已經準備就緒,下遊需要依賴該表資料的節點(表)可以開始取數了。
這裡有個觀念的轉變需要注意:
“表之間依賴”轉換為“産出表資料的節點之間依賴”
那如何通過表找到産出該表資料的節點,
挂上節點依賴呢?
我們先來看下節點是如果設定上下遊依賴。
二、如何設定節點排程依賴
節點依賴是在下遊節點去依賴上遊節點,Dataworks上通過節點輸出來挂依賴的。
上遊節點的輸出作為下遊節點的輸入,這樣形成依賴關系
【場景示例】
目前節點B産出table_B資料, table_B資料依賴table_A,那麼我們将産出表table_A資料的節點作為目前節點B的上遊依賴。
我知道需要依賴這個表資料,也知道這個表資料由哪個節點産出,但是我不可能每次需要依賴表的時候,都打開這個節點找到他的輸出設定依賴關系,
團隊協同開發的時候,也不可能因為需要依賴這個節點,而将該使用者加入到項目,這也是不可能的。那怎麼辦呢?我們繼續往下看
三、依賴關系設定的幾種方式
我們先來了解一下導讀依賴設定的幾種方式:
- 自動解析(推薦★)
- 自定義依賴
- 拉線設定依賴
四、自動解析
從上面我們知道了,為了目前節點取數時上遊資料已經準備好,目前節點才去取上遊資料,為了解決上面說到的問題,我們需要表和節點輸出有更直接的關系。而自動解析就是來自動實作表和節點(友善下遊用到該表時挂依賴)的關系。
我們先來了解一下 自動解析。
【自動解析】
預設将代碼中select的表自動解析将作為節點輸入;
預設将代碼中insert的表自動解析将作為節點輸出。
【示例】
insert overwrite table table_a
as select * from project_b_name.table_b;
血緣關系:
查詢project_b_name.table_b的資料寫入table_a。
自動解析:
project_b_name.table_b會作為該節點輸入,格式為project_b_name.table_b;
table_a會作為該節點的輸出,格式為project_a_name.table_a

4.1自動解析和依賴關系
自動解析助您一鍵設定任務依賴關系。
上遊産出該表資料,自動将該表作為節點輸出,下遊節點再去查這個表資料的時候,自動解析會通過該表找到産出該表資料的節點(一定要注意是否有解析出父節點id),挂上節點依賴關系。
(在這裡,我們也可以知道有些自動解析的表依賴送出時候報錯的原因,
是因為沒有通過該表找到産出該表資料的節點
(沒有解析出父節點id)。
為什麼沒有找到該表資料的節點呢,
因為沒有一個節點将這個表作為節點輸出了。)
4.2推薦自動解析的原因
1.根據代碼的邏輯,判斷您在目前節點需要産出某張表。當您以project_name.tablename的方式将其作為本節點輸出時,後續其它節點需要查詢該表時,您無需關注要依賴哪個節點,您隻需要關注要依賴該表目前周期産出的資料。
2.當您無法确定目前工作空間産出該表資料的具體節點時,您可以使用自動解析,幫助您快速開發業務流程。
3.使用自動解析該操作的前提是遵循自動解析規範,也就是産出一個表資料,一定要将這個表作為節點的輸出。
4.同地域的工作空間支援自動解析依賴關系,即支援同地域跨工作空間配置節點排程依賴關系(遵循自動解析規範)
【場景】
這個表資料是我本地上傳的,自動解析将他解析出來了,但是送出報錯依賴的父節點輸出不存在
(依賴的父節點那沒有解析出父節點),自動解析的依賴關系這裡不能删除,該怎麼辦?
我們先來看一下dataworks上可以手動編輯依賴的幾種方式。
五、自定義依賴
1.代碼編輯輸入輸出
2.手動添加上遊依賴
3.自動推薦
我們再回到剛剛的問題上:
這個表資料是我本地上傳的,自動解析将他解析出來了,
但是送出報錯依賴的父節點輸出不存在,
自動解析的依賴關系這裡不能删除,該怎麼辦?
5.1代碼中編輯輸入輸出
自動解析的依賴再右側父節點依賴那塊删除按鈕是置灰的,但是這個表沒有解析出父節點id,因為這個表是我本地上傳的表資料,而DataWorsk上隻有節點産出的表才能挂節點依賴。
(因為DataWorks是通過挂依賴的目的是保障下遊取數時候,上遊資料已經準确産出,
通過産出表資料的節點執行完成預設資料已經産出,下遊節點可以正常取數了,
如果是本地上傳的表資料或者不在DataWorks上産出的表,DataWorks是監控不了的哦,是以這裡就隻能将這個依賴删除了)。
--@extra_input=表名 --添加輸入
--@extra_output=表名 --添加輸出
--@exclude_input=表名 --删除輸入
--@exclude_output=表名 --删除輸出
手動添加上遊依賴
【場景一】
需要依賴某個表資料。
【場景二】
需要依賴某個節點,不一定存在表血緣依賴。
5.2自動推薦
背景:
在DataWorks2.0版本更新時,大家對排程依賴的了解不是很好,
經常出現送出報錯的問題,是以平台推出了這個“自動推薦”這個功能。
當自動解析選擇為否時,您可以使用自動推薦功能自定義添加需要依賴的上遊節點。
自動推薦功能會自動解析出所有已經送出并釋出至生産環境,并且實際運作産出該表的節點。
說明:由于需要送出釋出至生産環境并真實産出該表資料的節點,才會被解析出來,是以此處解析的節點有T+1的延遲。
5.3拉線設定依賴
在業務流程面闆連線形成依賴關系後,系統會自動将上遊節點的輸出名稱作為下遊節點的上遊依賴(輸入),即上遊節點自帶的_out輸出名稱作為下遊節點的上遊依賴(輸入)。
注意:拉線設定依賴的時候自動解析是預設打開的哦
排程依賴場景問題
排程依賴配置建議
• 産出表資料的節點将該表作為節點輸出。(友善自動解析自動設定依賴關系)
• 一張表資料由一個節點産出
(通過自動解析知道,節點産出某張表的資料,
自動解析會預設将該表作為節點輸出,
而DataWorks是通過節點輸出挂依賴的,
需要通過唯一的輸出定位到唯一的節點。
是以建議一張表資料由一個節點産出。
如果有場景需要某個表資料由多個節點産出的話,
記得節點輸出那删除該表,確定節點輸出全局唯一哦)
• 保證節點輸出同region下唯一
• 建議任務名稱和輸出表名保持一緻。
同步任務排程依賴配置
同步任務不支援自動解析設定依賴關系,是以需要手動節點産出資料的表作為節點輸出,友善下遊sql節點自動解析設定依賴關系。如果不想手動添加的話,可以将節點名設定為産出表名,因為對DataWorks會預設添加節點名的輸出哦。
同步任務:建議節點名為該同步任務産出的表名。
輸入輸出和代碼血緣分析不比對的提示
【血緣關系】
表間資料來源與去向,即節點中表select和insert關系。
【血緣關系解析】
代碼中select的表自動解析将作為節點輸入;
代碼中insert的表自動解析将作為節點輸出。
【使用者送出的輸入輸出】
使用者送出的輸入:在排程配置界面的解析出父節點id的輸出名(表)。
使用者送出的輸出:在排程配置界面的本節點的輸出名稱(表)。
1.為什麼會出現血緣關系和使用者送出的輸入輸出不一緻的提示?
代碼中select/insert的和排程配置那父節點和輸出不比對。
2.需要我們關注什麼?
确認這張表的資料源來源及是否需要依賴該表:
•本地上傳的表資料或者不在DataWorks上産出的表,可忽略血緣關系不一緻的提示
•是DataWorks周期排程産出的表資料,請務必再次确認産出該表資料的節點是否有将該表作為節點輸出。
依賴的父節點輸出不存在
報錯場景:
目前節點産出dw_user_info_all_d表資料,
依賴ods_log_info_d,ods_user_info_d_1表,
其中ods_user_info_d_1表送出報錯。
如果目前需要将節點送出上去不報錯的解決方式:
1.自動解析設定為否(不推薦×)
自動解析設定為否---血緣關系不一緻---目前節點送出正常---下遊節點select表dw_user_info_all_d表---送出報錯:dw_user_info_all_d不存在--資料品質問題?
2.确認該表資料來源:
本地上傳的資料,代碼中删除輸入,忽略血緣關系提示,送出任務
找到産出表ods_user_info_d_1資料的節點,将該表作為節點輸出。
節點輸出相同,送出失敗
•同region下同名節點需要修改一個節點的輸出,因為dataworks會建立一個節點名的輸出。
•一個表資料由一個節點産出,因為自動解析會将産出表作為節點輸出。
自動解析需要通過唯一的節點輸出定位到唯一的節點,
是以需要保障節點輸出唯一,
需要修改其中一個節點的節點輸出。
删除節點失敗,目前節點存在下遊
檢查開發環境運維中心和生産環境運維中心,是否還存在下遊節點依賴該需要下線的節點。
注意:運維中心跨周期依賴(虛線)依賴也需要下線哦