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(定时任务创建时间)后,左右关联即可。其余步骤与本文第二章相同。