基于Kettle和帆软Finereport的血缘解析
一、背景:
用户经常会针对数据存在质量的存疑,反馈数据不准。开发人员排查数据质量问题步骤:首先和业务人员对接了解是哪里数据不准确,要定位是哪张报表,然后查看报表后面数据来源,然后一路排查数仓。往往定位到数据问题耗时比较高,开发断层导致找到相关任务比较难。
二、解决办法:
通过血缘解析,把报表数据来源去向的信息都提取出来,方便:开发人员迅速找到相关任务。
三、解决思路:
Kettle的转换和作业存储底层是通过xml实现。作业是由转换组成,转换由组件组成。可以通过解析xml找到来源表和去向表。帆软Finereport的报表cpt和 frm底层存储也是xml,可以解析xml获取数据集,解析sql获取到表和字段。最终得到报表名,报表路径,数据库表,数据集。
tips:还可以进一步解析作业调度(主流调度工具:crontab,airflow,azkanban,ooize)可以解析出作业调度信息。
四、具体实现:
4.1.Kettle血缘:
首先要找到输入输出组件,一般输入组件包含如图 4-1所示,输出如图 4-2所示(实际转换中还可能使用追加流或者SQL脚本,这里只说常见的) 。一般Kettle转换(输入输出组件不同找到来源和目标方式不同)如图 4-3 所示。我们以文本编辑器打开转换文件Ktr,会以图 4-4 所示 。 如果内容比较乱,可以找一个xml解析工具格式化一下。可以清晰的看到转换是存在<step>节点里,如图 4-5所示。根据里面的<type>找到输入和输出组件。然后输入如果是表输入,通过sql查询的,用sql parser解析获取到表和字段信息。数据连接是存在<connection>节点里(这里如果数据以JNDI的方式存储的需要解析JNDI文件获取到数据配置信息),如图 4-6所示,可以获取到数据库信息。组件连接信息是在<order>节点里面(这里比较复杂是要考虑数据分发和数据复制)。这样一个完整的转换解析就完成。作业同理。一般作业和转换是发布在服务器上,需要遍历服务器目录下所有的以ktr和kjb结尾文件。

图 4-1

图 4-2

图 4-3

图 4-4

图 4-5

图 4-6
4.2 FIneReport血缘:
FineReport报表存储文件是以cpt和frm结尾,以文本编辑器打开,如图 4-7所示。可以找到数据集是存在<TableData>节点下,可以拿到查询的sql,然后用sql parser解析获取到表和字段,在<DatabaseName>里面可以拿到数据连接名,这里可以在帆软内置库中找到数据连接名的具体链接信息,用于打通和Kettle之间的联系。

图4-7

图 4-8
4.3 调度解析:
调度工具比较多,这里讲一下Crontab和Airflow。Crontab一般会可以通过crontab -l 命令获取调度的信息。解析信息可以拿到作业的计划调度时间(更深一层可以考虑获取作业执行日志拿到实际调度时间。然后针对调度进行运营管理)。Airflow由内置数据库,可以获取到作业和调度信息,然后去找到作业文件找到具体的作业(这里不过多介绍Airflow,只讲一下思路)。
五、实现效果:
以上所有数据和获取到进行加工处理。最终展示如表 4-1所示:
表 4-1
| 来源层 | 来源表 | 来源字段 | 目标层 | 目标表 | 目标字段 | 作业名 | 计划调度 | 实际调度 |
|---|---|---|---|---|---|---|---|---|
| SAP | KNAL | fleld1 | ODS | ods_sap_knal | fleld2 | job1 | * * * * 8 | * * * * 8 |
| ODS | ods_sap_knal | fleld2 | DWD | dwd_custom_detd | fleld3 | job2 | * * * * 10 | * * * * 10 |
| DWD | dwd_custom_detd | fleld3 | DWS | dws_custom_detd | fleld4 | job3 | * * * * 11 | * * * * 11 |
| DWS | dws_custom_detd | fleld4 | FR | custom.cpt | fleld5 | * * * * 12 | * * * * 12 |
以上列表只是参考,实际有很多复杂情况。
关于上表每行解释:
- 来源层,这个数据一般是系统名和数仓名。这里数仓名一般是通过解析表明获取到。可以参考数仓规范(一般数仓运营会将弄作业监控命名规范)。
- 来源表,这个是上面解析sql或者转换解析获取到(在输出规范一般要要求表名规范)
- 来源字段,同上(实际数仓运营会拿到字段里数据长度和字段类型以及长度进行管理)
- 目标层,同来源层
- 目标表,同来源表
- 目标组队那,同来源字段
- 计划调度时间,这里要考虑作业会存在多个调度频率,一般会存多行,在实际展示会根据crontab解析给出未来十个调度时间(如每天八点更新,这里就会给出后面十天八点的时间)
- 实际调度时间,这里获取方式比较多,一种通过日志解析,还有可以在作业执行的时候将时间写入到数据库,但是这种作业失败就拿不到数据,所以通常会解析日常,还可以监控作业执行情况。(一般有能力的会由作业监控平台)
图形展示(os:自己用的d3.js做出来效果不如这个所以不放实际效果图了)如下,鼠标移动到线条可以看到作业名和调度时间。

五、扩展:
这里讲的是传统数仓,传统数仓一般没有血缘,所以数据发生质量问题排查比较耗时。现在数据中台基本由数据血缘功能,大部分基于Atlas。但是如果存在临时表,就会存在血缘中断。还有是通过解析sql,但是这种缺点是要找到所有任务。这两个都无法获取到所有的数据血缘,所以有的产品会有血缘录入的功能进行补充。
上面只讲了帆软FineReport,帆软还有FineBI,在FineBI里是有血缘的,如果要做整体的管理,可以考虑将FineBI的数据获取到和所有的血缘进行融合。
以上只是个人在工作中针对传统数仓的数据治理的一些实践。其实还有很多ETL工具如DataStage、Informatica、Airflow、Datax等等之类的,可以根据以上逻辑进行血缘解析。
相关文章:
基于Kettle和帆软Finereport的血缘解析
一、背景: 用户经常会针对数据存在质量的存疑,反馈数据不准。开发人员排查数据质量问题步骤:首先和业务人员对接了解是哪里数据不准确,要定位是哪张报表,然后查看报表后面数据来源,然后一路排查数仓。往往定…...
给qemu虚机更换(Windows PE)光盘
1. 背景 qemu虚机里运行windows。如果遇到虚机windows启动故障,甚至连安全模式也故障时,可以尝试更换另一个光驱里的光盘为pe光盘。 2. 步骤 2.1. 找出VDI虚机所在的计算节点 ssh登录之,virsh list获得虚机id,例如 391 1255…...
python 神经网络归纳
CNN卷积神经网络 一个卷积神经网络主要由以下5层组成: 数据输入层/ Input layer卷积计算层/ CONV layerReLU激励层 / ReLU layer池化层 / Pooling layer全连接层 / FC layer 1. 数据输入层 该层要做的处理主要是对原始图像数据进行预处理,其中包括&…...
Python高级语法与正则表达式
Python提供了 with 语句的写法,既简单又安全。 文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。 # 1、以写的方式打开文件 with open(1.txt, w) as f:# 2、读取文件内容f.write(hello world) 生成器的创建方…...
【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解🌏题目描述&a…...
Python如何将图片转换成字符
PIL(Python Image Library)库是Python平台上一个功能强大的图像处理标准库,支持图像的存储、显示和处理,几乎可以处理所有图片格式,如图像的压缩、裁剪、叠加、添加文字等等。 安装PIL库:pip install pillow from PIL import Image ascii_cha…...
国家开放大学形成性考核 统一资料 参考试题
试卷代号:1174 水工钢筋混凝土结构(本)参考试题 一、选择题(每小题2分,共20分,在所列备选项中,选1项正确的或最好的作为答案,将选项号填入各题的括号中) 1.钢筋混凝土结…...
4.7 【共享源】流的生产者(二)
七,模式 流的模式决定了Screen如何使前台缓冲区可用。生产者通过调用screen_set_stream_property_iv()并设置SCREEN_PROPERTY_MODE属性来设置模式。有效模式如下: 7.1 SCREEN_STREAM_MODE_DEFAULT 如果生产者应用程序没有在流上明确设置 SCREEN_PROPERTY_MODE 属性,则 Sc…...
流量录制回放工具在自动化测试领域应用探索
引言: 随着中国农业银行技术架构的日益更迭与业务场景的不断创新,测试工作正在面临数据构造繁琐、案例维护成本较高且质量参差不齐等诸多问题与挑战,主要体现在以下四方面: 一是在系统架构升级与代码重构时,大量原始接…...
【高数定积分求解旋转体体积】 —— (上)高等数学|定积分|柱壳法|学习技巧
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 Shell method Setting up the Integral 例题 Example 1: Example 2: Example 3: Example …...
Ubuntu20.04 及深度学习环境anaconda、cuda、cudnn、pytorch、paddle2.3安装记录
学习目标: Ubuntu20.04下装好torch、paddle深度学习环境。 选择的版本环境是 :最新的nvidia驱动、cuda 11.1 、cudnn v8.1.1,下面会说为啥这么选。 学习内容: 1. Ubuntu20.04仓库换源 本节参考Ubuntu 20.04 Linux更换源教程 2…...
场景切割CVPr2022 SceneSegmentation
目录 算法介绍 无监督训练原理 源码地址: lstm模块 bilstm opencv场景分割 加阈值:...
Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
如果你的项目使用了SpringCloud微服务技术,那么你就可以使用Feign来作为http客户端来调用远程的http服务。当然,如果你不想使用Feign作为http客户端,也可以使用比如JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client或者Spring的RestTemplate。 那么,为…...
[node] Node.js的文件系统
[node] Node.js的文件系统 文件系统的使用异步和同步input.txt示例 常用方法打开文件语法示例 获取文件信息语法示例 写入文件语法示例 读取文件语法示例 关闭文件语法示例 截取文件语法示例 删除文件语法示例 创建目录语法示例 读取目录语法示例 删除目录语法示例 文件模块方法…...
【Linux系统基础】(2)在Linux上部署MySQL、RabbitMQ、ElasticSearch、Zookeeper、Kafka、NoSQL等各类软件
实战章节:在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面,我们学习了许多的Linux命令和高级技巧,这些知识点比较零散,同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用,…...
CJson 使用 - 解析Object结构
简介 准备在开发板中使用json结构传送数据, 选用了cJson, 现在看下cJson的使用吧步骤 下载 git clone https://github.com/DaveGamble/cJSON 或者直接压缩包下载也行, 毕竟国内有时候下载不下来Qt 中使用cJson 在下载的cJson 目录中加入cJson.pri, 内容如下 INCLUDEPATH …...
MySQL8主主搭建
-- mysql8 主主搭建 mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz 主1 : 192.168.2.160 主2 : 192.168.2.161 --解压mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz为mysql8 -- 初始化mysql8 (略) -- 参数192.168.2.160 [root…...
使用Pycharm一键将.ui文件生成.py文件配置教程、一键打开QTDesigner教程
2df3621a-7ffd-4f18-9735-b86464b83a5b 前言 我痛恨所有将白嫖归为理所应当的猪🐖。 教程 打开pycharm之后,依次点击File->Settings->Tools->External Tools,进入如下界面: 1、配置快捷打开Qt Designer 点击号&…...
React 路由跳转
1. push 与 replace 模式 默认情况下,开启的是 push 模式,也就是说,每次点击跳转,都会向栈中压入一个新的地址,在点击返回时,可以返回到上一个打开的地址, 就像上图一样,我们每次返…...
【MySQL】数据处理:从SQL批量删除报错到Python优雅解决
一、背景 MySQL数据库表中有一批重复的脏数据,为不影响正常业务,需要进行批量删除。 二、SQL批量删除 首先想到的是编写SQL语句来批量删除:删除身份证号为51****59且ID不为5的全部数据(保留ID为5的那一条数据) DELETE FROM test_table WHERE id IN ( SELECT i…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
