马哈鱼SQLFlow Lite的python版本

news2024/12/28 18:30:28

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 ALL
	WHEN ottl < 100000 THEN
		INTO small_orders
			VALUES(oid, ottl, sid, cid)
	WHEN ottl > 100000 and ottl < 200000 THEN
		INTO medium_orders
			VALUES(oid, ottl, sid, cid)
	WHEN ottl > 200000 THEN
		into large_orders
			VALUES(oid, ottl, sid, cid)
	WHEN ottl > 290000 THEN
		INTO 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$
BEGIN
    EXECUTE format ('INSERT INTO InSelections
                                  SELECT * 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.coloradmin.cn/o/1422459.html

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

相关文章

【web | CTF】攻防世界 easyupload

天命&#xff1a;好像也不太easy 目录 步骤一&#xff1a;准备文件 步骤二&#xff1a;上传文件 本条题目有好几个防御点&#xff1a; 后缀名防御&#xff1a;只能上传图片格式内容防御&#xff1a;内容不能有php图片头防御&#xff1a;检测文件的头部信息&#xff0c;是否是…

[NCTF2019]Fake XML cookbook(特详解)

先试了一下弱口令&#xff0c;哈哈习惯了 查看页面源码发现xml function doLogin(){var username $("#username").val();var password $("#password").val();if(username "" || password ""){alert("Please enter the usern…

iZotope RX 10.4.2 mac激活版 音频修复和增强工具

iZotope RX 10 for Mac是一款专业的音频修复软件&#xff0c;旨在提供强大、精确的工具&#xff0c;让用户能够清晰、纯净地处理音频。以下是其主要功能和特点&#xff1a; 软件下载&#xff1a;iZotope RX 10.4.2 mac激活版下载 强大的降噪功能&#xff1a;iZotope RX 10采用了…

Mushroom Monsters - Fantasy RPG

蘑菇怪物PBR是一个2米高的生物。他可以摆出三种静态姿势中的任何一种,等待他的对手感到惊讶,或者他可以四处奔跑,攻击和施放法术,甚至冲锋。他用头撞击敌人,可以跳起来撞击他们,也可以低头直冲。他还有一个“魔法”攻击,扭动头部并切削。 使用混合形状功能将网格变形为无…

【项目日记(六)】第二层: 中心缓存的具体实现(下)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…

fullcalendar案例

fullcalendar案例 <script srchttps://cdn.jsdelivr.net/npm/fullcalendar6.1.10/index.global.min.js></script><script srchttps://code.jquery.com/jquery-3.6.0.min.js></script> <!-- 引入 jQuery CDN --><script>document.addEventL…

防御挂马攻击:从防御到清除的最佳实践

挂马攻击&#xff0c;也称为马式攻击&#xff08;Horse Attack&#xff09;&#xff0c;是一种常见的网络攻击手段。攻击者通过在目标服务器或网站中植入恶意程序&#xff0c;以获取系统权限或窃取敏感信息。为了应对这种威胁&#xff0c;本文将重点介绍防御挂马攻击的最佳实践…

D6282——4.6W 双路音频功率放大电路,开机噪音小内置热保护电路,最佳电源电压 9V、12V, 工作电源电压范围:Vcc=6~15V

D6282 是双路音频功率放大集成电路&#xff0c;内置温度过热保护电路、功率调 整开关。适用于便携式收录机作音频功率放大。 该电路采用 FSIP12 的封装形式封装。 主要特点&#xff1a;  输出功率大 P OUT 2.5W/CH( 典型 ) (Vcc9V,R L 4 Ω ,f1kHz,THD10%) P OUT 4.6W/…

深度学习与神经网络pytorch版 2.3 线性代数

深度学习与神经网络pytorch版 2.3 线性代数 目录 深度学习与神经网络pytorch版 2.3 线性代数 1. 简介 2. 线性代数 2.3.1 标量 ​编辑2.3.2 向量 2.3.3 矩阵 2.3.4 张量及其性质 2.3.5 降维 2.3.6 非降维求和 2.3.7 点积 2.3.8 矩阵-向量积 2.3.9 矩阵-矩阵乘法 …

什么是八木天线,八木天线的作用是什么?

八木天线的得名其实不是由于其有八根天线。 八木天线由一个有源振子&#xff08;一般用折合振子&#xff09;、一个无源反射器和若干个无源引向器平行排列而成的端射式天线&#xff0c;由提出者的名字命名。 上个世纪二十年代&#xff0c;日本东北大学的八木秀次和宇田太郞两人…

JS逆向实战27——pdd的anti_content 分析与逆向

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 本文已在微信公众号发布 …

Activiti工作流引擎

一、工作流介绍&#xff1a; 1.1 概念&#xff1a; 工作流(Workflow)&#xff0c;就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程&#xff0c;从而实现某个预期的业务目标&#xff0c;或…

如何合理摆放去耦电容

大多数资料都会提到电容摆放要尽可能靠近芯片&#xff0c;这是从小回路电感的角度来看待这个摆放问题&#xff0c;如下图所示&#xff0c;当逻辑芯片发生信号电平的转换时&#xff0c;配电网络中出现瞬态电流增量dI&#xff0c;这个瞬态电流会流过电源和接地电感从而产生一个噪…

【Unity3D日常开发】Unity3D中Text使用超链接并绑定点击事件

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中遇到了要给Text加超链接的需求&#xff0c;研究了实现…

在充满未知变化的市场社会环境里,实现组织结构与管理方式的自我进化

一、教程描述 本套教程立足于充满变化的市场社会环境&#xff0c;以管理者的素养作为切入点&#xff0c;从组织创新的角度&#xff0c;剖析企业可持续发展的内核与共性&#xff0c;并且提供了一套完整的实践方法论&#xff0c;可以帮助管理者在环境变化中&#xff0c;搭建一个…

npm 淘宝镜像正式到期

由于node安装插件是从国外服务器下载&#xff0c;如果没有“特殊手法”&#xff0c;就可能会遇到下载速度慢、或其它异常问题。 所以如果npm的服务器在中国就好了&#xff0c;于是我们乐于分享的淘宝团队干了这事。你可以用此只读的淘宝服务代替官方版本&#xff0c;且同步频率…

开源微信投票小程序源码系统:PHP+MySQL组合开发 带完整的搭建教程

微信小程序的普及&#xff0c;越来越多的活动和比赛开始采用微信投票的方式来决定胜出者。然而&#xff0c;市面上的微信投票小程序大多数需要付费使用或者功能受限。为了满足广大用户的需求&#xff0c;小编给大家分享一款开源的微信投票小程序源码系统&#xff0c;采用PHPMyS…

android远程投屏应用

客户端app地址&#xff1a;https://gitee.com/youzilzk/blue1.git 服务端地址&#xff1a;https://gitee.com/youzilzk/blue-server1.git 一。服务端部署 1.安装postgres 2.导入项目下blue.sql文件 3.修改配置application.properties和config.properties&#xff0c;其中applic…

【Git】02 仓库、区域与基本操作

文章目录 一、Git仓库二、Git区域三、操作3.1 git add3.2 更改文件名3.3 清空暂存区3.4 帮助文档 四、版本历史4.1 日志时间格式4.2 查看版本演变历史 五、总结 一、Git仓库 Git仓库&#xff0c;可简单理解为项目代码存放的位置&#xff0c;Git将该项目目录中的内容纳入版本管…

【Java基础】之进程与线程

进程与线程 1. 线程与进程1.1 概念1.2 区别与联系 2. 线程的5种状态和切换2.1 简单介绍2.2 状态切换2.2.1 重点情况 3. 线程中常见的方法4. 线程池 1. 线程与进程 1.1 概念 进程&#xff1a;资源分配的基本单元&#xff0c;如QQ音乐 线程&#xff1a;资源调度的基本单元&…