马哈鱼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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Banana Pi BPI-R4开源路由器开发板快速上手用户手册,采用联发科MT7988芯片设计

介绍 Banana Pi BPI-R4 路由器板采用 MediaTek MT7988A (Filogic 880) 四核 ARM Corex-A73 设计&#xff0c;4GB DDR4 RAM&#xff0c;8GB eMMC&#xff0c;板载 128MB SPI-NAND 闪存&#xff0c;还有 2x 10Gbe SFP、4x Gbe 网络端口&#xff0c;带 USB3 .2端口&#xff0c;M.2…

计算机服务器中了halo勒索病毒怎么办,halo勒索病毒解密

在网络技术飞速发展的今天&#xff0c;越来越多的企业依赖数字化办公&#xff0c;为企业的生产生活提供了极大便利&#xff0c;但网络是一把双刃剑&#xff0c;网络安全威胁无处不在。近期&#xff0c;云天数据恢复中心接到很多企业的求助&#xff0c;企业的计算机服务器中了ha…

【Java】实现图书管理系统

文章目录 1. 设计背景2. 需求分析3. 设计思路4. 实现4.1 book包4.1.1 Book类4.1.2 BookList类(书架) 4.2 user包4.2.1 User 类4.2.2 AdminUser类&#xff08;管理员用户&#xff09;4.2.3 NormalUser类&#xff08;普通用户&#xff09; 4.3 operation包4.3.1 IOPeration接口4.…

Maven基本使用

Maven简介: Apache Maven 是一个项目管理和构建工具&#xff0c;它基于项目模型(POM)的概念&#xff0c;通过一小段描述信息来管理项目的构建&#xff0c;报告和文档 Maven的作用: (1&#xff09;项目搭建&#xff1b; &#xff08;2&#xff09;依赖管理&#xff1b; &#xf…

Mac Monitor:一款为macOS安全研究量身定制的高级独立系统监控工具

关于Mac Monitor Mac Monitor是一款功能强大的高级独立系统安全监控工具&#xff0c;该工具专为macOS安全研究、恶意软件分类和系统故障排除而设计&#xff0c;主要基于Apple Endpoint Security&#xff08;ES&#xff09;实现其功能。 Mac Monitor能够收集各种类型的系统事件…

ASP.NET Core 过滤器 使用依赖项注入

过滤器是 ASP.NET Core 中的特殊组件&#xff0c;允许我们在请求管道的特定阶段控制请求的执行。这些过滤器在中间件执行后以及 MVC 中间件匹配路由并调用特定操作时发挥作用。 简而言之&#xff0c;过滤器提供了一种在操作级别自定义应用程序行为的方法。它们就像检查点&#…

CCF CSP 202312-2因子化简

题目描述 样例 输入 3 2155895064 3 2 2 10000000000 10 输出 2238728 1 10000000000 基本思路 首先&#xff0c;要找出构成n的所有素因子&#xff0c;这些因子满足两个条件&#xff1a;是素数&#xff08;函数判断&#xff09;&#xff0c;且能被n或n的中间值整除&#xf…

【RT-DETR有效改进】CARAFE提高精度的上采样方法(助力细节长点)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的CARAFE(Content-Aware ReAssembly of FEatures)是一种用于增强卷积神经网络特征图的上采样方法。其主要旨在改进传统的上采样方法(就是我们的Upsample)的性能。CARAFE的核心思想是:使用输…

ONLYOFFICE:兼顾协作与安全的开源办公套件

文章目录 前言ONLYOFFICE是什么&#xff1f;ONLYOFFICE的特点多人在线协同灵活集成安全可靠跨平台和设备扩展丰富 实操注册登录编写文档插件安装智谱CopilotDraw.io 新版强势功能显示协作者头像插件 UI 界面更新 总结 前言 随着数字化时代的到来&#xff0c;越来越多的文档处理…

操作系统-线程的实现方式和多线程模型(用户级线程 内核级线程 多线程模型的情况)和线程的状态,转换,组织,控制

文章目录 线程的实现方式和多线程模型总览线程的实现方式用户级线程内核级线程多线程模型一对一多对一多对多 小结 线程的状态,转换,组织,控制总览 线程的状态与转换线程的组织与控制 线程的实现方式和多线程模型 总览 线程的实现方式 用户级线程 程序自己通过自己设计的线程…

06 单目初始化器 Initializer

文章目录 06 单目初始化器 Initializer6.1 成员变量/函数6.2 初始化函数 Initialize()6.3 计算基础矩阵 F \boldsymbol{F} F 和单应矩阵 H \boldsymbol{H} H6.3.1 RANSAC 算法6.3.2 八点法计算 F \boldsymbol{F} F 矩阵: ComputeF21()6.3.3 计算基础矩阵 F \boldsymbol{F} …

怎么使用cmd命令来进行Vue脚手架的项目搭建

前言 使用vue搭建项目的时候&#xff0c;我们可以通过对应的cmd命令去打开脚手架&#xff0c;然后自己配置对应的功能插件 怎么打开 我们打开对应的cmd命令之后就开始进入对应的网站搭建 vue ui 然后我们就打开对应的项目管理器来进行配置----这里我们打开开始创建新的项目…

【VS Code+Verilog+Vivado使用】(2)基本设置

文章目录 2 基本设置2.1 字体大小2.2 Tab大小2.3 选中高亮2.4 文件编码 2 基本设置 2.1 字体大小 方法1&#xff1a;VS Code左下角 > 管理 > 设置&#xff0c;搜索"font size"&#xff0c;点击左侧"字体"&#xff0c;根据需要设置"editor.fon…

穷游网酒店数据采集与可视化分析与实现

摘 要 穷游网酒店数据采集与可视化分析大屏的背景是为了满足用户对酒店数据的需求以及提供数据洞察和决策支持。随着旅游业的快速发展&#xff0c;人们对酒店信息的需求日益增加&#xff0c;而穷游网作为一家专注于旅游信息的网站&#xff0c;拥有丰富的酒店数据资源。 这个大…

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入…

Flink实战四_TableAPISQL

接上文&#xff1a;Flink实战三_时间语义 1、Table API和SQL是什么&#xff1f; 接下来理解下Flink的整个客户端API体系&#xff0c;Flink为流式/批量处理应用程序提供了不同级别的抽象&#xff1a; 这四层API是一个依次向上支撑的关系。 Flink API 最底层的抽象就是有状态实…

腾讯mini项目总结-指标监控服务重构

项目概述 本项目的背景是&#xff0c;当前企业内部使用的指标监控服务的方案的成本很高&#xff0c;无法符合用户的需求&#xff0c;于是需要调研并对比测试市面上比较热门的几款开源的监控方案&#xff08;选择了通用的OpenTelemetry协议&#xff1a;Signoz&#xff0c;otel-…

JVM学习

1.Java虚拟机内部有哪些线程共享&#xff0c;那些线程隔离 程序计数器&#xff1a; 通过改变这个计数器的值来选取下一条需要执行的字节码命令 Java虚拟机栈&#xff1a; 栈&#xff0c;每个方法被执行时&#xff0c;Java虚拟机都会同步的创建一个栈帧用于存储局部变量表&…

java 实现微信公众号关键字自动回复

接上一篇内容https://blog.csdn.net/YISHENGYOUNI95/article/details/134383219 因为设置了公众号的服务器配置&#xff0c;导致之前设置的公众号自动回复失效了 需要通过之前配置的接口实现自动回复 参考一下官方文档回复文本消息 | 微信开放文档 根据用户发送的消息&#…

中国的茶文化:历史、传统与生活

中国的茶文化&#xff1a;历史、传统与生活 一、引言 茶&#xff0c;这一神奇而古老的饮品&#xff0c;与中国的历史、文化和生活方式紧密相连。中国的茶文化&#xff0c;源远流长&#xff0c;博大精深&#xff0c;是中华文明的重要组成部分。它不仅是一种饮料&#xff0c;更是…