马哈鱼SQLFlow Lite的python版本
Gudu SQLFlow 是一款用来分析各种数据库的 SQL 语句和存储过程来获取复杂的数据血缘关系并进行可视化的工具。
Gudu SQLFlow Lite version for python 可以让 python 开发者把数据血缘分析和可视化能力快速集成到他们自己的 python 应用中。
Gudu SQLFlow Lite version for python 对非商业用途来说是免费的,它可以处理 10k 长度以下的任意复杂的 SQL 语句,包含对存储过程的支持。
Gudu SQLFlow Lite version for python 包含一个 Java 类库,通过分析复杂的 SQL 语句和存储过程来获取数据血缘关系,一个 python 文件,
通过 jpype 来调用 Java 类库中的 API, 一个 Javascript 库,用来可视化数据血缘关系。
Gudu SQLFlow Lite version for python 还可以自动从数据库中导出的 DDL 脚本中获取表和表,字段和字段间的约束关系,画出 ER Diagram.
自动可视化数据血缘关系
通过执行这条命令,
python dlineage.py /t oracle /f test.sql /graph
我们可以自动获得下面这个 Oracle SQL 语句包含的数据血缘关系
CREATE VIEW vsal
AS SELECT a.deptno "Department", a.num_emp / b.total_count "Employees", a.sal_sum / b.total_sal "Salary" FROM (SELECT deptno, Count() num_emp, SUM(sal) sal_sum FROM scott.emp WHERE city = 'NYC' GROUP BY deptno) a, (SELECT Count() total_count, SUM(sal) total_sal FROM scott.emp WHERE city = 'NYC') b
;INSERT ALLWHEN ottl < 100000 THENINTO small_ordersVALUES(oid, ottl, sid, cid)WHEN ottl > 100000 and ottl < 200000 THENINTO medium_ordersVALUES(oid, ottl, sid, cid)WHEN ottl > 200000 THENinto large_ordersVALUES(oid, ottl, sid, cid)WHEN ottl > 290000 THENINTO special_orders
SELECT o.order_id oid, o.customer_id cid, o.order_total ottl,
o.sales_rep_id sid, c.credit_limit cl, c.cust_email cem
FROM orders o, customers c
WHERE o.customer_id = c.customer_id;
并可视化为:

Oracle PL/SQL Data Lineage
python dlineage.py /t oracle /f samlples/oracle_plsql.sql /graph

The source code of this sample Oracle PL/SQL.
Able to analyze dynamic SQL to get data lineage (Postgres stored procedure)
CREATE OR REPLACE FUNCTION t.mergemodel(_modelid integer)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGINEXECUTE format ('INSERT INTO InSelectionsSELECT * FROM AddInSelections_%s', modelid);END;
$function$

Nested CTE with star columns (Snowflake SQL sample)
python dlineage.py /t snowflake /f samlples/snowflake_nested_cte.sql /graph

The snowflake SQL source code of this sample.
分析 DDL, 自动画出 ER Diagram
通过执行这条命令,
python dlineage.py /t sqlserver /f samples/sqlserver_er.sql /graph /er
我们可以自动获得下面这个 SQL Server 数据库的 ER Diagram.

The DDL script of the above ER diagram is here.
Try your own SQL scripts
You may try more SQL scripts in your own computer without any internet connection by cloning this python data lineage repo
git clone https://github.com/sqlparser/python_data_lineage.git
- No database connection is needed.
- No internet connection is needed.
You only need a JDK and a python interpreter to run the Gudu SQLFlow lite version for python.
step 1 环境准备
-
安装python3
安装完python3后,还需要安装python依赖组件jpype。
-
安装 java jdk, 要求jdk1.8及以上版本
以ubuntu操作系统下安装为例:
检查jdk版本:
java -version。如果未安装或版本小于1.8,则需要安装jdk1.8:
sudo apt install openjdk-8-jdk如果报错:
Unable to locate package openjdk-8-jdk则执行以下命令安装:
sudo add-apt-repository ppa:openjdk-r/ppa apt-get update sudo apt install openjdk-8-jdk
step 2 打开web服务
切换到本项目widget目录,执行以下命令启动web服务:
python -m http.server 8000
浏览器内打开以下网址验证是否启动成功:http://localhost:8000/
注意:如果要修改8000端口,需要同时在dlineage.py里修改widget_server_url
step 3 执行python脚本
切换到本项目根目录,即dlineage.py所在目录,执行以下命令:
python dlineage.py /f test.sql /graph
此命令,会将test.sql进行血缘分析,并打开一个浏览器页面,图形化方式展示血缘分析结果。
dlineage.py 支持的命令参数说明:
/f: 可选, sql文件./d: 可选, 包含sql文件的文件夹路径./j: 可选, 返回包含join关系的结果./s: 可选, 简单输出,忽略中间结果./topselectlist: 可选, 简单输出,包含最顶端的输出结果./withTemporaryTable: 可选, 简单输出,包含临时表./i: 可选, 与/s选项相同,但将保留SQL函数生成的结果集,此参数将与/s/topselectlist+keep SQL函数生成结果集具有相同的效果。/showResultSetTypes: 可选, 带有指定结果集类型的简单输出,用逗号分隔, 结果集类型有: array, struct, result_of, cte, insert_select, update_select, merge_update, merge_insert, output, update_set pivot_table, unpivot_table, alias, rs, function, case_when/if: 可选, 保留所有中间结果集,但删除 SQL 函数生成的结果集。/ic: 可选, 忽略输出中的坐标./lof: 必选, 将孤立列链接到第一个表./traceView: 可选,只输出源表和视图的名称,忽略所有中间数据./text: 可选, 如果只使用/s 选项,则在文本模式下输出列依赖项./json: 可选, 打印json格式输出./tableLineage [/csv /delimiter]: 可选, 输出表级血缘关系./csv: 可选, 输出csv格式的列一级的血缘关系./delimiter: 可选, 输出csv格式的分隔符./t: 必选, 指定数据库类型. 支持 access,bigquery,couchbase,dax,db2,greenplum, gaussdb, hana,hive,impala,informix,mdx,mssql,sqlserver,mysql,netezza,odbc,openedge,oracle,postgresql,postgres,redshift,snowflake,sybase,teradata,soql,vertica the default value is oracle/env: 可选, 指定一个 metadata.json 来获取数据库元数据信息./transform: 可选, 输出关系转换码./coor: 可选, 输出关系转换坐标,但不输出代码./defaultDatabase: 可选, 指定默认database./defaultSchema: 可选, 指定默认schema./showImplicitSchema: 可选, 显示间接schema./showConstant: 可选, 显示常量./treatArgumentsInCountFunctionAsDirectDataflow: 可选,将 count 函数中的参数视为直接数据流./filterRelationTypes: 可选, 过滤关系类型,支持 fdd,fdr,join,call,er,如果有多个关系类型用英文半角逗号分隔./graph: 可选, 打开一个浏览器页面,图形化方式展示血缘分析结果/er: 可选, 打开一个浏览器页面,图形化方式展示ER图
从各种数据库中导出元数据
SQLFlow ingester 可以中数据库中导出元数据,交给 Gudu SQLFlow 进行数据血缘分析。
SQLFlow ingester 的使用文档
Trobule shooting
1.脚本执行报错:SystemError: java.lang.ClassNotFoundException: org.jpype.classloader.DynamicClassLoader
Traceback (most recent call last):
File "/home/grq/python_data_lineage/dlineage.py", line 231, in <module>
call_dataFlowAnalyzer(args)
File "/home/grq/python_data_lineage/dlineage.py", line 20, in call_dataFlowAnalyzer
jpype.startJVM(jvm, "-ea", jar)
File "/usr/lib/python3/dist-packages/jpype/_core.py", line 224, in startJVM
_jpype.startup(jvmpath, tuple(args),
SystemError: java.lang.ClassNotFoundException: org.jpype.classloader.DynamicClassLoader
这个问题在ubuntu系统预装的python3 jpype环境中常见,原因是在/usr/lib/python3/dist-packages/目录下缺少org.jpype.jar。
需要将org.jpype.jar 复制到/usr/lib/python3/dist-packages/目录下。
cp /usr/share/java/org.jpype.jar /usr/lib/python3/dist-packages/org.jpype.jar
相关文章:
马哈鱼SQLFlow Lite的python版本
Gudu SQLFlow 是一款用来分析各种数据库的 SQL 语句和存储过程来获取复杂的数据血缘关系并进行可视化的工具。 Gudu SQLFlow Lite version for python 可以让 python 开发者把数据血缘分析和可视化能力快速集成到他们自己的 python 应用中。 Gudu SQLFlow Lite version for p…...
【原创】VMware创建子网,并使用软路由获得访问互联网的能力,并通过静态路由让上层网络访问位于虚拟机的子网
前言 一看标题就很离谱,确实内容也有点复杂,我的初衷是为后面搞软路由做准备,先通过VMware进行可行性验证,确定方案是否可行,再做下一步的计划。结论当然可以的,能通能访问,强的不行。 网络拓…...
华为和思科各数通设备的常用命令
本文基于华为和思科各数通设备的常用命令来对比学习,这两个命令体系是网络项目中常见的,其他一些厂家也是基于类似的命令体系.下面也会根据公司业务需求列举部分网络设备厂家,比如H3C,盛科的命令不同之处. 1. 查看命令 华为: <Quidway>dis cur …...
Qt Excel读写 - QXlsx的安装配置以及测试
Qt Excel读写 - QXlsx的安装配置以及测试 引言一、安装配置二、简单测试 引言 Qt无自带的库处理Excel 文件,但可通过QAxObject 借助COM接口进行Excel的读写1。亦可使用免费的开源第三方库:QXlsx,一个基于Qt库开发的用于读写Microsoft Excel文…...
【报错处理】ModuleNotFoundError: No module named ‘paddle.fluid‘
引言 在使用 UIE(统一信息提取)模型时,您可能会遇到错误消息 "ModuleNotFoundError: No module named paddle.fluid"。这个错误可能让人沮丧,但通常很容易解决。在本博客文章中,我将为您介绍解决此问题。 一…...
Wpf 使用 Prism 实战开发Day16
客户端使用RestSharp库调用WebApi 动态加载数据 在MyDoTo客户端中,使用NuGet 安装两个库 RestSharp Newtonsoft.Json 一. RestSharp 简单的使用测试例子 当前章节主要目的是:对RestSharp 库,根据项目需求再次进行封装。下面先做个简单的使用…...
八斗学习笔记
1 初始环境安装 Anaconda安装(一款可以同时创建跟管理多个python环境的软件) https://blog.csdn.net/run_success/article/details/134656460 Anaconda创建一个新python环境(安装人工智能常用的第三方python包,如:tensorflow、keras、pytorch) https://…...
【Uni-App】Vuex在vue3版本中的使用与持久化
Vuex是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 简而言之就是用来存数据,可以有效减少使用组件传参出现的问题。 基本元素:…...
基于Qt 音乐播放器mp3(进阶)
## 项目工具 工具名QtQt 5.14.2图标设计Adobe Ai音频素材剪映平台windowsgif录制ScreenGif录屏Win10 自带录屏 Win + G## 项目演示 先点击构建项目,项目构建完成后,再将本例的 myMusic 歌曲文件夹拷贝到可执行程序...
力扣唯一元素的和
题目: 给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。 请你返回 nums 中唯一元素的 和 。 示例 1: 输入:nums [1,2,3,2] 输出:4 解释:唯一元素为 [1,3] ,和为 4 。示例 2…...
力扣(leetcode)第169题多数元素(Python)
169.多数元素 题目链接:169.多数元素 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入&am…...
springBoot - mybatis 多数据源实现方案
应用场景: 多数据源 小型项目 或者 大项目的临时方案中比较常用.在日常开发中,可能我们需要查询多个数据库,但是数据库实例不同,导致不能通过 指定schema的方式 区分不同的库, 这种情况下就需要我们应用程序配置多数据源 实现方式: 首先自定义实现 datasource数据源 为当前…...
unity 讯飞webapi在线语音合成
websocker插件使用的unitywebsocker 讯飞webapi,连接后只能请求一次,所以每次使用时进行连接,连接成功后进行请求,请求完成后关闭连接。 为什么连接后只能请求一次呢,可能是方便统计使用量。 如何通过音频数据计算出…...
[NCTF2019]Fake XML cookbook(特详解)
先试了一下弱口令,哈哈习惯了 查看页面源码发现xml function doLogin(){var username $("#username").val();var password $("#password").val();if(username "" || password ""){alert("Please enter the usern…...
腾讯云SDK并发调用优化方案
目录 一、概述 二、 网关的使用 2.1 核心代码 三、腾讯云SDK依赖包的改造 一、概述 此网关主要用于协调腾讯云SDK调用的QPS消耗,使得多个腾讯云用户资源能得到最大限度的利用。避免直接使用腾讯云SDK 时,在较大并发情况下导致接口调用异常。网关的工…...
【排序算法】C语言实现随机快排,巨详细讲解
文章目录 🚀前言🚀快排的核心过程partition(划分过程)🚀快排1.0🚀随机快速排序🚀稳定性 🚀前言 铁子们好啊!继续我们排序算法今天要讲的是快排,通常大家所说…...
Java强训day13(选择题编程题)
选择题 编程题 题目1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String s sc.nextLine();char[] c s.toCharArray();int i 0;int t 0;while (i < c.length) {if (c[i] ! \") {…...
搭建WebGL开发环境
前言 本篇文章介绍如何搭建WebGL开发环境 WebGL WebGL的技术规范继承自免费和开源的OpenGL ES标准,从某种意义上说,WebGL就是Web版的OpenGL ES,而OpenGL ES是从OpenGL中派生出来的。他们的应用环境有区别,一般来说:…...
学习嵌入式第十五天之结构体
用变量a给出下面的定义 a) 一个整型数(An integer) //int a;b) 一个指向整型数的指针(A pointer to an integer) //int *a;c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a poin…...
【HDFS】一天一个RPC系列--updateBlockForPipeline
本文目标是: 弄清updateBlockForPipeline这个RPC的作用。弄清updateBlockForPipeline RPC的使用场景,代码里的调用点。一、updateBlockForPipeline的作用 其定义在ClientProtocol接口里,是Client与NameNode之间的接口。 看其代码注释描述: 为一个under construction状态下…...
PyTorch 2.8镜像作品集:基于OpenCV+Torch的实时手势识别视频演示
PyTorch 2.8镜像作品集:基于OpenCVTorch的实时手势识别视频演示 1. 镜像环境与能力概览 PyTorch 2.8深度学习镜像是一个经过深度优化的专业级开发环境,专为现代AI应用设计。这个环境最吸引人的特点是它已经预装了所有必要的工具和库,让你可…...
乙巳马年春联生成终端步骤详解:横批居中与上下联基线对齐的CSS技巧
乙巳马年春联生成终端步骤详解:横批居中与上下联基线对齐的CSS技巧 1. 引言:从创意到像素的挑战 想象一下,你正在开发一个充满年味的Web应用——一个能自动生成马年春联的“皇城大门”。AI模型已经为你写出了文采斐然的上下联和横批&#x…...
小型工作室利器:OpenClaw+Qwen3.5-9B实现设计稿自动标注
小型工作室利器:OpenClawQwen3.5-9B实现设计稿自动标注 1. 为什么我们需要设计稿自动标注 作为一个小型设计工作室的技术负责人,我最近一直在寻找解决团队协作痛点的方案。设计师们每天都要花费大量时间手动标注PSD文件中的图层尺寸、间距和颜色值&…...
告别盲调!用STM32的编码器模式+定时器中断,精准测量电机转速(附速度计算源码)
STM32编码器模式实战:从脉冲计数到精准转速测量的全链路解析 在电机控制系统中,转速测量就像给盲人配上一副眼镜——它让抽象的旋转运动变得可视化、可量化。许多工程师在完成电机基础驱动后常陷入一个尴尬境地:电机确实转起来了,…...
PyTorch Subset类实战:自定义数据子集与高效训练技巧
1. PyTorch Subset类基础与应用场景 当你面对一个庞大的数据集时,直接加载全部数据进行训练往往会遇到内存不足、训练速度慢等问题。这时候PyTorch的torch.utils.data.Subset类就能派上大用场。这个类就像是一个智能的数据筛选器,可以让你轻松地从原始数…...
【硬核】K8s GPU调度从入门到“精通”:不止Device Plugin,还有MIG、DRA和那些你踩过的坑
K8s GPU调度从入门到“精通”:不止Device Plugin,还有MIG、DRA和那些你踩过的坑你以为把GPU挂上K8s就万事大吉了?错!调度策略、硬隔离、软隔离、抢占回收…每一个环节都可能是你烧钱的坑。本文从实战出发,手把手教你如…...
Phi-4-mini-reasoning vLLM服务加固:限流熔断、输入清洗、输出长度约束配置
Phi-4-mini-reasoning vLLM服务加固:限流熔断、输入清洗、输出长度约束配置 1. 模型服务概述 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据,并进一步微调以提高更高级的数学推理能力。该模型…...
Python程序设计期末考试高频大题精讲:二维列表数据处理实战与深度解析
Python程序设计期末考试高频大题精讲:二维列表数据处理实战与深度解析 摘要:本文以高校计算机科学与技术专业《Python程序设计》期末考试中一道典型大题——“统计学生捐款次数”为切入点,系统讲解二维列表(嵌套列表)的…...
【Polars 2.0企业级数据清洗黄金法则】:5大生产环境避坑指南+实测性能提升3.7倍基准报告
第一章:Polars 2.0企业级数据清洗黄金法则总览Polars 2.0 以零拷贝语义、并行执行引擎与原生 Arrow 内存布局为核心,重构了企业级数据清洗的性能边界与工程可靠性。其惰性 API 与 eager 模式无缝协同,使复杂清洗流水线既可交互调试࿰…...
DOL-CHS-MODS整合包:从新手入门到定制开发的完整指南
DOL-CHS-MODS整合包:从新手入门到定制开发的完整指南 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 一、需求定位:你属于哪种玩家类型? 场景描述 不同玩家对游…...
