马哈鱼SQLFlow Lite的python版本

2024-01-31 06:28

本文主要是介绍马哈鱼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版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/662838

相关文章

Python使用Spire.PDF实现为PDF添加水印

《Python使用Spire.PDF实现为PDF添加水印》在现代数字化办公环境中,PDF已成为一种广泛使用的文件格式,尤其是在需要保持文档格式时,下面我们就来看看如何使用Python为PDF文件添加水... 目录一、准备工作二、实现步骤1. 导入必要的库2. 创建 PdfDocument 对象3. 设置水印

python循环引用和解决过程

《python循环引用和解决过程》文章讨论了在Python中解决循环引用问题的几种方法,包括延迟导入、使用`importlib`、重构代码和类型提示的前向引用,这些方法可以帮助开发者避免导入循环导致的... 目录模拟循环引用解决python循环引用的方法有几种,以下是一些常见的解决android方案常见问题

python在word中插入目录和更新目录实现方式

《python在word中插入目录和更新目录实现方式》文章主要介绍了如何在Word文档中插入和更新目录,并提供了具体的代码示例,插入目录时,需要使用`TablesOfContents`对象,并设置使用... 目录1、插入目录2、更新目录总结1、插入目录需要用到对象:TablesOfContents目录的

基于Python编写一个git自动上传的脚本(打包成exe)

《基于Python编写一个git自动上传的脚本(打包成exe)》这篇文章主要为大家详细介绍了如何基于Python编写一个git自动上传的脚本并打包成exe,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录前言效果如下源码实现利用pyinstaller打包成exe利用ResourceHacker修改e

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

Python中Tkinter GUI编程详细教程

《Python中TkinterGUI编程详细教程》Tkinter作为Python编程语言中构建GUI的一个重要组件,其教程对于任何希望将Python应用到实际编程中的开发者来说都是宝贵的资源,这篇文... 目录前言1. Tkinter 简介2. 第一个 Tkinter 程序3. 窗口和基础组件3.1 创建窗

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

浅析python如何去掉字符串中最后一个字符

《浅析python如何去掉字符串中最后一个字符》在Python中,字符串是不可变对象,因此无法直接修改原字符串,但可以通过生成新字符串的方式去掉最后一个字符,本文整理了三种高效方法,希望对大家有所帮助... 目录方法1:切片操作(最推荐)方法2:长度计算索引方法3:拼接剩余字符(不推荐,仅作演示)关键注意事

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh