1. 概述
1.1 版本
FineDataLink 版本 | 功能變動 |
---|---|
4.0.3 | 1)在定時任務編輯介面中,右鍵點選節點連線,提供「無條件執行」、「成功時執行」、「報錯時執行」的節點連線配置 2)在定時任務編輯介面中,右鍵點選節點,新增「執行判斷」按鈕,支援自訂多執行條件的生效方式(全部邏輯與、全部邏輯或),靈活控制任務中節點的依賴關係 |
1.2 應用場景
使用者希望定時任務執行失敗後,可以自訂錯誤處理流程。比如定時任務執行失敗後,在企業微信群中通知。
1.3 功能簡介
如下圖所示:
2. 功能介紹
將連線的始端稱為上游節點,連線的末端稱為下游節點。
2.1 節點連線配置介紹
在定時任務編輯介面中,右鍵點選節點連線,提供「無條件執行」、「成功時執行」、「報錯時執行」的節點連線配置。如下圖所示:
具體說明如下表所示:
注:預設成功時執行。
選擇項 | 說明 |
---|---|
無條件執行 | 不論上游節點執行是否成功,都執行下游節點 |
成功時執行 | 上游節點執行成功時,執行下游節點 |
報錯時執行 | 上游節點執行失敗時,執行下游節點 |
2.2 「執行判斷」按鈕介紹
在定時任務編輯介面中,右鍵點選節點,新增「執行判斷」按鈕,支援自訂多執行條件的生效方式(全部邏輯與、全部邏輯或),靈活控制任務中節點的依賴關係。如下所示:
下游節點被多個上游節點連結時,點選「執行判斷」按鈕,下拉框可選擇「所有」和「任一」,分別對應兩個生效邏輯,「全部邏輯與」和「全部邏輯或」。
全部邏輯與:下游節點在所有上游節點執行結果均滿足連線執行條件時觸發執行。
全部邏輯或:下游節點在任一上游節點執行結果滿足連線執行條件時觸發執行(在下游節點處集中配置)。
2.3 總體執行策略
1)下游節點被一個上游節點連結時,該上游節點執行結果滿足其連線執行條件,則觸發下游節點執行。
2)下游節點被多個上游節點連結時,在所有上游節點執行完成後觸發判斷,按照選擇的生效邏輯執行:
全部邏輯與:下游節點在所有上游節點執行結果均滿足連線執行條件時觸發執行。
全部邏輯或:下游節點在任一上游節點執行結果滿足連線執行條件時觸發執行(在下游節點處集中配置)。
3)「條件分支」節點只允許選擇「成功時執行」,沒有「失敗時執行」和「無條件執行」:
連線條件為「成功時執行」且符合條件分支配置條件,則觸發執行對應下游節點
連線條件為「成功時執行」但不符合條件分支配置條件,則跨越執行下游節點
4)虛擬節點預設為「成功時執行」,沒有「失敗時執行」和「無條件執行」,虛擬節點如果執行,必然執行成功。
2.4 場景範例
2.4.1 一對多場景說明
定時任務設計如下圖所示:
ABCD構成了一對多場景,其執行策略如下:
注:A 不是條件分支節點。
A 節點執行結果 | B(與A連線為成功時執行) | C(與A連線為失敗時執行) | D(與A連線為無條件執行) |
---|---|---|---|
執行失敗 | 不觸發執行 | 觸發執行 | 觸發執行 |
執行成功 | 觸發執行 | 不觸發執行 | 觸發執行 |
終止執行 如:執行至 A 節點時,任務手動停止 | 不觸發執行 | 不觸發執行 | 不觸發執行 |
跨越執行。如: 1)A 上游不是條件分支節點,且執行結果不滿足連線執行條件 2)A 上游是條件分支節點,且判斷後不走 A分支 | 不觸發執行 | 不觸發執行 | 不觸發執行 |
2.4.2 多對一場景說明
ETL 任務設計如下圖所示:
ABCD構成了多對一場景,其執行策略如下:
注:A\B\C均不是條件分支節點;在所有上游節點執行完成後觸發判斷。
執行條件生效方式 | A/B/C實際執行結果 | D |
---|---|---|
全部邏輯與 | A\B\C執行結果均滿足各自連線執行條件 | 觸發執行 |
A\B\C執行結果任一不滿足其連線執行條件 注:若A\B\C某一節點被跨越執行,則該節點不參與判斷 | 不觸發執行 | |
全部邏輯或 | A\B\C執行結果任一滿足其連線執行條件 | 觸發執行 |
A\B\C執行結果均不滿足各自連線執行條件 | 不觸發執行 |
若場景如下圖所示:A、B、C 中至少有一個節點及其下游節點執行成功,H 節點都執行。
若希望 D、E、F節點全部執行成功再執行 H 節點:
方案一:可在 H 節點前新增「條件分支」節點,透過參數 ${jobname.opresult} (節點執行成功值為 success)的值判斷是否執行 H 節點。
方案二:H節點參考本文 2.2 節內容,執行判斷處設定為全部邏輯與。如下圖所示:
2.4.3 多對多場景
A-C 的配置為成功時執行,A-D 的配置為失敗時執行,B-C 的配置為成功時執行,B-D 的配置為失敗時執行,「多執行條件生效方式」配置為「全部邏輯與」。如下圖所示:
執行策略:A 執行成功且 B 執行成功時,C 執行,D 不執行;A 執行失敗且 B 執行失敗時,D 執行,C 不執行;A 執行成功且 B 執行失敗時,C 和 D 都不執行。
2.5 相容說明
升級後,對於所有節點連線,都統一將連線的執行條件設為成功時執行,「多執行條件生效方式」配置為「全部邏輯與」。
3. 範例
範例:如果上游節點運作成功,則執行下一個節點,如果失敗,則傳送訊息通知。
3.1 前期準備
1) 建立定時任務,拖入「資料同步」節點,命名為「銷量表抽取資料」,設定「資料來源」將銷量表中所有華東地區的資料取出。然後設定「資料去向與映射」,此處直接建立一個表來儲存這些資料,目標表選擇「自動建表」,表名稱填寫「sale」,如下圖所示:
2)新增「SQL腳本」節點,與「資料同步」節點相連,命名為「salesum建表」,資料源選擇「MySQL」,資料連結選擇「fdl_demo」,並在下方填寫建表「salesum」的語句,如下圖所示:
CREATE TABLE IF NOT EXISTS `demotest`.`salesum` (
`地區` varchar(255) NULL DEFAULT NULL,
`銷售員` varchar(255) NULL DEFAULT NULL,
`銷量` float NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
3)新增「SQL腳本」節點,與「salesum建表」節點相連,命名為「資料篩選處理」,資料源類型選擇「MySQL」,資料連結選擇「fdl_demo」,填寫 SQL 語句將「sale」中銷量大於 600 的資料插入到「salesum」中去。如下圖所示:
insert into `demotest`.`salesum`(地區,銷售員,銷量)
select 地區,銷售員,銷量
from `demotest`.`sale`
where 銷量>600
3.2 新增訊息通知節點
1)新增「訊息通知」節點,與「salesum建表」節點連結起來。
2)右鍵點選「訊息通知」節點和「salesum建表」節點之間的連線,選擇「失敗時執行」。如下圖所示:
3)「訊息通知」節點設定如下圖所示:
3.3 運作任務
3.3.1 salesum建表節點執行成功
點選左上角的「運作」。如下圖所示:
此時「salesum建表」節點執行成功,「訊息通知」節點被跨越執行。
MySQL 資料庫中生成了兩個表:
sale:
salesum:
3.3.2 salesum建表節點執行失敗
1)修改「salesum建表」節點的 SQL 語句,將 SQL 語句改為無法執行的 SQL 。如下圖所示:
2)點選左上角的「運作」。如下圖所示:
此時「salesum建表」節點執行失敗,「訊息通知」節點執行成功。
企業微信群中,訊息通知給設定的群成員。如下圖所示: