分支節點是DataStudio中提供的邏輯控制系列節點之一。本文將為您介紹如何使用分支節點,在特定時間執行任務的方法。
分支節點產生背景
Cron運算式無法實現一個節點需要每個月的最後一天執行的情境,分支節點產生後,您可以套用switch-case編程模型實現該需求。詳情請參見分支節點。
分支節點與其它控制節點
在資料開發頁面,您可以看到目前的版本的DataWorks支援的賦值節點、分支節點和歸併節點等控制節點。
各類型控制節點的作用如下:
賦值節點:您可以通過賦值節點把自己的結果傳給下遊,詳情請參見賦值節點。
賦值節點複用了配置節點上下文依賴的特性,在已有常量和變數節點內容相關的基礎上,賦值節點支援自訂的上下文輸出。DataWorks會捕獲或列印賦值節點的查看結果,並將該結果以outputs形式作為上下文輸出參數的值,供下遊節點引用。
分支節點:可以決定哪些下遊正常執行,詳情請參見分支節點。
分支節點複用了DataWorks上依賴關係設定的輸入和輸出的特性,詳情請參見配置同周期調度依賴。
對於普通節點,節點的輸出僅僅是一個全域唯一的字串。當下遊需要設定依賴時,搜尋這個全域唯一的字串作為節點的輸入即可掛到下遊節點列表中。
但是,對於分支節點您可以在設定下遊依賴時,選擇某一個條件關聯的輸出作為分支節點的輸出。節點在成為分支節點下遊的同時,也關聯到了分支節點的條件上:
滿足該條件,該輸出對應的下遊才會被正常執行。
其它未滿足條件的輸出對應的下遊節點,會被置為空白跑。
歸併節點:無論上遊是否正常執行,本身都會正常調度。
未被分支節點選中的分支,DataWorks會把該分支鏈路上所有的節點執行個體置為空白跑執行個體,即一旦某個執行個體的上遊有一個空跑執行個體,它本身也會變為空白跑。
DataWorks當前可以通過歸併節點來阻止該空跑的屬性無限制地傳遞下去:無論歸併節點執行個體上遊有多少個空跑的執行個體,歸併節點都會直接成功,且不會再把下遊置為空白跑。
下圖為存在分支節點的情況下,依賴樹的邏輯關係。
ASN:一個賦值節點,用於對比較複雜的情況進行計算,以便選擇分支節點的條件。
X和Y:分支節點,處於賦值節點ASN下遊,根據賦值節點的輸出進行分支的選擇。如圖中綠色線條所示,X節點選擇了左邊的分支,Y節點選擇了左邊兩個分支:
A和C節點由於在X和Y節點被選擇的輸出下遊,因此正常執行。
B節點雖然在Y節點被選擇的分支下遊,但由於X節點未選擇該輸出,因此B節點被置為空白跑。
E節點由於未被Y節點選中,因此即使有一個普通的Z節點上遊,也同樣被置為了空跑。
G節點由於上遊E節點空跑,因此即使C/F都正常執行,G節點同樣空跑。
空跑屬性什麼情況下才能不再向下傳遞?
JOIN節點是一個歸併節點,它的特殊功能就是停止空跑屬性的傳遞,可以看到由於D節點處於JOIN節點下遊,因此B節點的空跑屬性被阻斷了,D節點可以開始正常跑了。
您可以通過利用分支節點配合其它控制節點,滿足某個節點只有每個月最後一天啟動並執行需求情境。
使用分支節點
定義任務依賴。

根節點賦值節點通過定時時間SKYNET_CYCTIME來計算當前是否為本月的最後一天。如果是,則輸出1。如果不是,則輸出0。該輸出會被DataWorks捕獲,傳遞給下遊。
分支節點通過賦值節點的輸出來定義分支。
兩個Shell節點掛在分支節點下,分別執行不同的分支邏輯。
定義賦值節點。
建立賦值節點時,會內建一個outputs,賦值節點支援編寫SQL、SHELL和Python三種語言。
對於SQL類型,DataWorks捕獲最後一條SELECT語句作為outputs的值。
對Shell和Python類型,DataWorks捕獲最後一行標準輸出作為outputs的值。
本文採用Python類型作為賦值節點的代碼,調度屬性和代碼設定如下。
代碼設定

調度屬性配置

定義分支。
分支節點可以用Python文法的運算式定義條件,每個條件會綁定一個輸出。當滿足條件時,該輸出的下遊節點會被執行,而其它的節點會被置為空白跑。
調度配置

分支配置

調度配置產生條件綁定的輸出

將執行任務節點掛在不同分支下。
分支節點有3個輸出,任意選擇一個輸出當作輸入即可。由於現在分支節點的輸出關聯了條件,所以要謹慎選擇。
每月最後一天執行的節點依賴

每月其它時間執行的節點依賴

驗證結果
完成上述所有配置後,您可以提交並發布任務。完成發布後,可以執行補資料來測試效果:業務日期選擇2018-12-30和2018-12-31,即定時時間分別為2018-12-31和2019-01-01,則第一批補資料會觸發最後一天的邏輯,第二批觸發非最後一天的邏輯。兩者的區別如下所示。
業務日期為2018-12-30(即定時時間為2018-12-31)
分支節點分支選擇結果

節點(最後一天執行)正常執行

節點(除了最後一天之外運行)被置為空白跑

業務日期為2018-12-31(即定時時間為2019-01-01)
分支節點分支選擇結果

節點(最後一天執行)被置為空白跑

節點(除了最後一天之外運行)正常執行

總結
使用分支節點要點如下:
DataWorks捕獲賦值節點的最後一條SELECT語句或者最後一行標準輸出資料流,作為賦值節點的輸出,供下遊引用。
分支節點的每一個輸出都被關聯了條件,下遊掛分支節點作為上遊,需要瞭解每個輸出關聯的條件的意義再進行選擇。
未被選中的分支會被置為空白跑,並且空跑屬性會一直向下傳遞,直到遇到歸併節點。