提示:1. 概述
1.1 應用場景
公司中有許多成員使用 FineDataLink 開發定時任務,若成員 A 修改了定時任務 1 沒有通知成員 B,成員 B 運作定時任務 1 的時候運作報錯或資料不對,B 不知道是誰做的修改以及修改原因。成員 B 若是對定時任務 1 再做修改,不知道會對成員 A 造成什麼影響。
因此,希望使用看板展示所有定時任務的運作資訊,可透過搜尋對應的任務名稱,查看該任務編輯人員、最近編輯時間。
1.2 實現思路
對 FineDB 資料庫的 fine_dp_conf_entity_x、fine_dp_operate_history 表進行資料處理。
取出 fine_dp_conf_entity_x 表中的定時任務檔案相關配置資料( namespace 欄位為 DPFileEntityStore),解析 entity_value 欄位得到 createTime(定時任務建立時間)欄位。其中 createTime 為時間戳格式,為方便查看需轉化為日期格式。
取出 fine_dp_conf_entity_x 表中的定時任務排程管理配置資料( namespace 欄位為 DPAttributeStore),解析 entity_value 欄位得到 scheduleOpen(是否開啟調度)欄位。
取出 fine_dp_operate_history 表中編輯定時任務的資料(operate_type 欄位為 EDIT),得到 operate_user(編輯人員)、task_name(任務名稱)、task_path(任務路徑)、operate_time(任務儲存或修改時間)欄位。其中 operate_time 為時間戳格式,為方便查看需轉化為日期格式。
將上面三張表資料聯動,篩選出有效資料後,進行匯出。
使用最終匯出的表資料製作 FineReport 範本。
1.3 任務展示
FineDataLink 中的資料處理程式,詳情參見:https://demo.finedatalink.com/ 中的定時任務:「FR範本展示定時任務資訊」

使用 FDL 匯出的資料,製作的FineReport 範本如下圖所示:

2. 範例
注:本文第二章步驟適用於下載 4.0.25 及之後版本的安裝包的工程,升級到 4.0.25 及之後版本或 4.0.25 之前版本方案略有不同,詳情可參考本文第三章。
2.1 準備工作
1)由於要讀取 FineDB 資料庫中的 fine_dp_conf_entity_x、fine_dp_operate_history 表資訊,需要有 FineDB 的資料連結使用權限。
注:FineDB 資料庫簡介請參見:FineDB 資料庫簡介
2)瞭解 fine_dp_conf_entity_x 欄位含義、瞭解 fine_dp_operate_history欄位含義 。
2.2 獲得任務建立時間欄位
取出 fine_dp_conf_entity_x 表中的定時任務檔案相關配置資料( namespace 欄位為 DPFileEntityStore),解析 entity_value 欄位得到 createTime(定時任務建立時間)欄位,由於 createTime 欄位為時間戳格式,將他轉換為日期格式方便查看。
2.2.1 取出定時任務檔案相關配置資訊
1)建立定時任務,拖入「資料轉換」節點,進入「資料轉換」節點。
2)使用「DB表輸入」算子,從 fine_dp_conf_entity_x 表中取出定時任務檔案相關配置資料。如下圖所示:
注:根據實際情況修改下方 SQL 語句。
SELECT * FROM `xiangmu1`.`fine_dp_conf_entity_x` where namespace = 'DPFileEntityStore'

2.2.2 解析 entity_value 欄位
entity_value 欄位為 JSON 格式,需進行解析。
使用「JSON解析」算子解析 entity_value 欄位,勾選「解析後保留所有上游匯出欄位」,若不勾選該按鈕,解析後只有 entity_value 欄位解析後的資料;JSON 節點選擇 id(檔案id)、createTime(定時任務建立時間)。
由於解析的 id 欄位與已有欄位重名,將改寫已有欄位資料。所以解析後欄位名稱中,將 id 修改為「任務ID」。
如下圖所示:

2.2.3 轉換任務建立時間
2.2.2 節中,解析後的 createTime 欄位為時間戳格式,需要轉換為日期格式,方便查看。
拖入「Spark SQL」算子,將時間戳資料處理為日期格式。如下圖所示:
注:表名為上游節點的名稱;語句不能直接複製,「JSON解析」需點選生成。
select *,from_unixtime(cast(JSON解析.createTime/1000 as bigint),'yyyy/MM/dd HH:mm:ss') from JSON解析

點選「資料預覽」,效果如下圖所示:

2.2.4 刪除不需要欄位
新增「欄位設定」算子,將 2.2.3 節生成的日期格式的欄位重新命名為「任務建立時間」,只保留「任務ID」欄位和「任務建立時間」欄位。如下圖所示:
注:保留「任務ID」欄位,方便與其他表左右聯動。

2.3 獲取定時任務設定的調度資訊
取出 fine_dp_conf_entity_x 表中的定時任務排程管理配置資料( namespace 欄位為 DPAttributeStore),解析 entity_value 欄位得到 scheduleOpen(是否開啟調度)欄位。
步驟與 2.2 節類似。
2.3.1 取出定時任務排程管理配置資訊
使用「DB表輸入」算子,從 fine_dp_conf_entity_x 表中取出定時任務排程管理配置資料。如下圖所示:
注:根據實際情況修改下方 SQL 語句。
SELECT * FROM `xiangmu1`.`fine_dp_conf_entity_x` where namespace = 'DPAttributeStore'

2.3.2 解析 entity_value 欄位
entity_value 欄位為 JSON 格式,需進行解析。
使用「JSON解析」算子解析 entity_value 欄位,勾選「解析後保留所有上游匯出欄位」,若不勾選該按鈕,解析後只有 entity_value 欄位解析後的資料;JSON 節點選擇 id(檔案id)、scheduleOpen(排程管理是否開啟);
由於解析的 id 欄位與已有欄位重名,將改寫已有欄位資料。所以解析後欄位名稱中,將 id 修改為「任務id」;scheduleOpen 欄位重新命名為「是否開啟調度」。
注:使用者根據實際場景,判斷下方圖片第五步驟時勾選哪些節點。
如下圖所示:

2.3.3 刪除不需要欄位
新增「欄位設定」算子,只保留「任務id」欄位和「是否開啟調度」欄位,其餘欄位刪除。如下圖所示:

2.4 取出定時任務編輯資料
取出 fine_dp_operate_history 表中編輯定時任務的資料(operate_type 欄位為 EDIT),得到 operate_user(編輯人員)、task_name(任務名稱)、task_path(任務路徑)、operate_time(任務儲存或修改時間)欄位。
2.4.1 讀取 fine_dp_operate_history 表資料
當 fine_dp_operate_history 表中,operate_type 欄位值為 EDIT 時,為編輯定時任務的資料。
取出 fine_dp_operate_history 表中編輯定時任務的資料。如下圖所示:

2.4.2 轉換任務編輯時間
operate_time 欄位為儲存/修改的時間,是時間戳格式,為後續方便查看,需轉換為日期格式。
拖入「Spark SQL」算子,將時間戳資料處理為日期格式。如下圖所示:
注:表名為上游節點的名稱;語句不能直接複製,「DB表輸入2」需點選生成。
select *,from_unixtime(cast(DB表輸入2.operate_time/1000 as bigint),'yyyy/MM/dd HH:mm:ss') from DB表輸入2

2.4.3 刪除不需要欄位
新增「欄位設定」算子,刪除不需要欄位並給某些欄位重新命名。如下圖所示:

| 欄位名 | 操作 |
|---|---|
| id | 刪除 |
| operate_time | 刪除 |
| operate_type | 刪除 |
| operate_user | 重新命名為「編輯人員」 |
| task_id | - |
| task_name | 重新命名為「任務名稱」 |
| task_path | 重新命名為「任務路徑」 |
| task_type | 刪除 |
| from_unixtime(CAST((operate_time / 1000) AS BIGINT), yyyy/MM/dd HH:mm:ss) | 重新命名為「任務儲存或修改時間」 |
2.5 資料聯動
將 2.2 節、2.3 節、2.4 節的資料進行聯動。
拖入「資料聯動」算子,「欄位設定」與「欄位設定1」左聯動,生成的表與「欄位設定2」左聯動。如下圖所示:

2.6 篩選有效資料
2.5 節聯動後的資料,部分資料中「任務id1」與「task_id」欄位為空,需要篩選出這兩個欄位非空的資料。
拖入「資料過濾」算子,設定如下圖所示:

2.7 匯出資料
1)拖入「DB表匯出」欄位,匯出資料。如下圖所示:

2)點選「欄位映射」,刪除「任務id1」與「task_id」欄位。
2.8 效果查看
1)儲存並運作任務,運作成功後,如下圖所示:

2)資料庫表資料如下圖所示:

3)使用資料庫表資料做 FineReport 範本,篩選任務名稱查看該任務的建立時間、編輯人員、所在路徑、儲存或修改時間等。如下圖所示:

3. 注意事項
本文 2.2 節取出 fine_dp_conf_entity_x 表中的定時任務檔案相關配置資料( namespace 欄位為 DPFileEntityStore),entity_value 欄位在不同版本解析後欄位不同。
4.0.25 及之後版本,entity_value 欄位如下圖所示:

4.0.25 之前版本,entity_value 欄位如下圖所示:

其中,上圖中的 id 和 fileId 代表的含義相同,都為檔案 id 。
3.1.1 FDL 為 4.0.25 之前版本
本文 2.2.2 節步驟中,選擇 JSON 節點時選擇 fileId 和 createTime 即可。
3.1.2 FDL 為 4.0.25 之前版本升級到 4.0.25 及之後版本
此時取出 fine_dp_conf_entity_x 表中的定時任務檔案相關配置資料( namespace 欄位為 DPFileEntityStore)後,entity_value 欄位如下圖所示:

可以使用兩個「資料過濾」算子,分別過濾出包含 fileId 和包含 id 的資料,獲得定時任務 id 和 createTime(定時任務建立時間)後,左右聯動即可。其餘步驟與本文第二章相同。
