大家好,我是独孤风,从本周开始,争取每周为大家带来一个优秀的开源项目推荐。

开源项目不仅促进了技术的发展和普及,还为全球范围内的开发者和用户社区建立了一个共享知识、协作和创新的平台。站在巨人的肩膀上才能看的更远,我们平时也应该多多关注开源项目,不仅学习其丰富的知识,也要找机会为开源事业做出自己的贡献。

话不多说,今天为大家推荐的开源项目名为SQLLineage。

SQLLineage 是一个使用 Python 开发的 SQL 血缘分析工具。它专注于提供 SQL 查询的血缘关系和依赖关系的深入分析。

Github首页地址为: https://github.com/reata/sqllineage

目前标星891,最新版本是v1.4.8,主要开发语言为Python 。

一、概述

简单来说SQLLineage 是一SQL血缘分析工具,而由于SQL在数据分析中的通用性,SQLLineage 是一数据血缘分析工具。

数据血缘(Data Lineage),也有翻译为数据沿袭,都数据血缘(Data Lineage)是指追踪数据从其源头到目的地的路径,包括它在整个数据生命周期中的流动、转换和使用情况。数据血缘的核心目的是提供对数据流动和变化的完整可视化,从而帮助组织理解数据的来源、经过的处理步骤以及最终如何被利用。

数据血缘是元数据管理的重要组成部分,通过收集获取元数据可以分析生成数据血缘,这样可以增加数据透明度,便于审计和合规,也就是说数据血缘在数据安全,数据管理领域意义重大。

而SQLLineage可以通过多SQL的分析来快速的了解血缘的来龙去脉,所以说是一个数据血缘的分析神器。

我们假设有这样的一个SQL。

通过SQLLineage可以快速的分析出表级别的血缘。

也可以分析出列级别的血缘。

这样的话,数据的前后关系就一目了然了。

同时SQLLineage还支持多种SQL语法的解析器,这不管是我们直接拿来用,还是分析其代码都非常的有帮助。

二、主要特性

SQLLineage 还提供了如下的丰富的功能支持。

简化 SQL 解析: SQLLineage 提供了一个简单易用的接口来理解 SQL 查询的源和目标表,无需担心复杂的 SQL 解析过程。

高效的解析库: 使用 sqlfluff 和 sqlparse 等库来解析 SQL 命令,分析 AST,并使用 networkx 图形库存储血缘信息。

易于安装和使用: 可以通过 PyPI 快速安装,并通过简单的命令行操作来解析 SQL 查询。

一些更高级的用法:

  • 处理多个 SQL 语句: 可以分析包含多个 SQL 语句的查询,识别中间表。
  • 详细血缘结果: 提供详细的血缘分析结果,每个 SQL 语句的血缘信息都可以显示出来。
  • 方言意识: 支持不同的 SQL 方言,以适应不同的关键词和语法。
  • 列级血缘: 支持列级血缘分析,展示所有列的血缘路径。
  • 血缘可视化: 支持血缘结果的图形可视化,可以在浏览器中查看表级和列级血缘的有向无环图(DAG)表示。

三、安装部署与使用

SQLLineage 由Python开发而成,所以可以非常方便的使用Python相关组件进行安装。

安裝

可以直接使用pip安装

pip install sqllineage

也可以通过github来安装

pip install git+https://github.com/reata/sqllineage.git

分析

有两种方式,去解析sql。可以用-e直接分析一个sql语句,这里分析出了源表和目标表:

$ sqllineage -e "insert into db1.table1 select * from db2.table2"
Statements(#): 1
Source Tables:
db2.table2
Target Tables:
db1.table1

也可以用-f来直接分析一个sql文件:

$ sqllineage -f foo.sql
Statements(#): 1
Source Tables:
db1.table_foo
db1.table_bar
Target Tables:
db2.table_baz

对于连续的两个sql也可以进行分析:

$ sqllineage -e "insert into db1.table1 select * from db2.table2; insert into db3.table3 select * from db1.table1;"
Statements(#): 2
Source Tables:
db2.table2
Target Tables:
db3.table3
Intermediate Tables:
db1.table1

可以用-v指令来看每一个sql的执行结果。

$ sqllineage -v -e "insert into db1.table1 select * from db2.table2; insert into db3.table3 select * from db1.table1;"
Statement #1: insert into db1.table1 select * from db2.table2;
table read: [Table: db2.table2]
table write: [Table: db1.table1]
table cte: []
table rename: []
table drop: []
Statement #2: insert into db3.table3 select * from db1.table1;
table read: [Table: db1.table1]
table write: [Table: db3.table3]
table cte: []
table rename: []
table drop: []
==========
Summary:
Statements(#): 2
Source Tables:
db2.table2
Target Tables:
db3.table3
Intermediate Tables:
db1.table1

指定分析器

下面的例子,可以使用 --dialect=postgres关键字来指定要使用的分析引擎:

$ sqllineage -e "insert into analyze select * from foo;"
Statements(#): 1
Source Tables:
<default>.foo
Target Tables: $ sqllineage -e "insert into analyze select * from foo;" --dialect=ansi
Statements(#): 1
Source Tables:
<default>.foo
Target Tables:
<default>.analyze $ sqllineage -e "insert into analyze select * from foo;" --dialect=postgres
...
sqllineage.exceptions.InvalidSyntaxException: This SQL statement is unparsable, please check potential syntax error for SQL

提示:用这个命令sqllineage --dialects 看看都有哪些分析器。

列级血缘

可以分析列级血缘,比如下面的sql。

INSERT OVERWRITE TABLE foo
SELECT a.col1,
b.col1 AS col2,
c.col3_sum AS col3,
col4,
d.*
FROM bar a
JOIN baz b
ON a.id = b.bar_id
LEFT JOIN (SELECT bar_id, sum(col3) AS col3_sum
FROM qux
GROUP BY bar_id) c
ON a.id = sq.bar_id
CROSS JOIN quux d; INSERT OVERWRITE TABLE corge
SELECT a.col1,
a.col2 + b.col2 AS col2
FROM foo a
LEFT JOIN grault b
ON a.col1 = b.col1;

可以使用-l关键字来进行列级血缘分析

$ sqllineage -f foo.sql -l column
<default>.corge.col1 <- <default>.foo.col1 <- <default>.bar.col1
<default>.corge.col2 <- <default>.foo.col2 <- <default>.baz.col1
<default>.corge.col2 <- <default>.grault.col2
<default>.foo.* <- <default>.quux.*
<default>.foo.col3 <- c.col3_sum <- <default>.qux.col3
<default>.foo.col4 <- col4

可视化

最后可以用下面的指令来启动一个web浏览器,进行血缘展示。

sqllineage -g -f foo.sql

赶紧体验一下吧~

更多【大数据、数据治理、人工智能知识分享】【开源项目推荐】【学习社群加入】,请关注大数据流动​。

【开源项目推荐】通用SQL数据血缘分析工具——Sqllineage的更多相关文章

  1. 数据治理中Oracle SQL和存储过程的数据血缘分析

    数据治理中Oracle SQL和存储过程的数据血缘分析   数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...

  2. 利用job提升马哈鱼数据血缘分析效率

    利用job提升马哈鱼数据血缘分析效率 一.Job基本知识 前面文章中已介绍马哈鱼的基本功能,其中一个是job,job其实是一个任务集合处理的概念,就是让用户通过job,可以一次递交所有需要处理的 SQ ...

  3. 马哈鱼血缘分析工具部署介绍--win 10

    马哈鱼血缘分析工具部署介绍--win 10 随着大数据技术的发展与普及,数据治理和数据质量变得越来越重要,数据血缘分析在业界悄然兴起并得到了广泛流行,马哈鱼是国内少有的一款专业且易用的血缘分析工具.本 ...

  4. 可视化数据包分析工具-CapAnalysis

    可视化数据包分析工具-CapAnalysis 我们知道,Xplico是一个从pcap文件中解析出IP流量数据的工具,本文介绍又一款实用工具-CapAnalysis(可视化数据包分析工具),将比Xpli ...

  5. 值得研究的J2EE开源项目推荐

    导读:笔者在学习J2EE的过程中发现了一些很有用,而且很值得学习的开源项目,在此推荐给大家. 关键词:J2EE 开源项目 J2SE JBoss SOA EJB   这篇文章写在我研究J2SE.J2EE ...

  6. 记开源项目:DotNetCore.CAP.MySql问题分析:only mysqlparameter objects may be stored

    1.  简介 最近在学习分布式事务及解决方案,最终找到了开源项目DotNetCore.CAP ,因为自己用的MySql数据库比较多.于是也使用MySQL+EFCore+RabbitMQ+CAP实现事务 ...

  7. 开源项目推荐:e-example / Springboot+bootstrap + ……

    前言: 我想要找一个 springboot + bootstrap 的例子介绍,然后搜索到了这个开源项目. 所有能跑起来的项目都有研究价值,看看这个项目的文档.目前正好满足我想要的功能.推荐 正文: ...

  8. 开发app应用的开源项目推荐

    app检测内存泄漏 请看这里:LeakCanary Android 和 Java 内存泄露检测 app应用想要控制状态栏 StatusBarUtil :https://github.com/laobi ...

  9. Nodejs开源项目推荐

    当我们学习一门新语言,不要用以前语言的习惯去使用新的语言,这样可能会导致走一些弯路.最好的办法就是去看一些写的比较好的开源项目,所以这里我推荐几个NodeJs的开源项目,花点时间去研究一下他们的实现, ...

  10. 必须Mark!43个优秀的Swift开源项目推荐

    摘要:拥有着苹果先天生态优势的Swift自发布以来,各种优秀的开源项目便层出不穷.本文作者站在个人的角度,将2014年Swift开源项目做了一个甄别.筛选,从工具.存储.网络.界面.框架到Demo以及 ...

随机推荐

  1. 《高级程序员 面试攻略 》rabitmq rcoketmq kafka的区别 和应用场景

    RabbitMQ.RocketMQ 和 Kafka 都是流行的消息中间件系统,用于实现分布式应用程序之间的异步通信.虽然它们都有类似的目标,但在设计和应用场景上存在一些区别. 1. RabbitMQ( ...

  2. 问题排查:nginx的反向代理感觉失效了一样

    背景 最近,负责基础设施的同事,要对一批测试环境机器进行回收,回收就涉及到应用迁移,问题是整个过程一团乱.比如服务器A上一堆应用要调用服务器B上一堆服务,结果服务器B被回收了,然后服务器A上一堆应用报 ...

  3. Mybatis-plus SQL效率插件PerformanceInterceptor无效->替换为p6spy

    使用mybatis-plus时,需要加入执行的sql分析 发现mybatis-plus中的PerformanceInterceptor无效了 查了信息发现 3.2.0 版本之后把这个功能可剔除了 可同 ...

  4. 【NestJS系列】连接数据库及优雅地处理响应

    前言 Node作为一门后端语言,当然也可以连接数据库,为前端提供CURD接口 我们以mysql为例,自行安装mysql TypeORM TypeORM 是一个ORM框架,它可以运行在 NodeJS.B ...

  5. Python 潮流周刊第 20 期(摘要)

    你好,我是猫哥.本周刊分享优质的 Python.AI 及通用技术内容,大部分为英文.这里是标题摘要版,查看全文请至☞:https://pythoncat.top/posts/2023-09-16-we ...

  6. 有人说SaToken吃相难看,你怎么看。

    前言 今天摸鱼逛知乎,偶然看到了一个回答,8月份的,是关于SaToken的,一时好奇就点了进去. 好家伙,因为一个star的问题,提问的人抱怨了许多,我有些意外,就仔细看了下面的评论,想知道一部分人的 ...

  7. Django框架项目之支付功能——支付宝支付

    文章目录 支付宝支付 入门 支付流程 aliapy二次封装包 GitHub开源框架 依赖 结构 alipay_public_key.pem app_private_key.pem setting.py ...

  8. CSS 多行文本超链接下划线动效

    先看效果 乍一看,是不是感觉很简单,仔细一瞅发现事情好像没有那么简单. 如果十分钟还没想出怎么实现,那就把简历上的"精通css"改成"了解css"-- 大部分人 ...

  9. CSP-J 2022 游记

    10.9 早上睡到 7:00. 上午继续学习 Vim,学习哈希表. 10.11 白天线段树,区间加从六参改成四参就过了 晚上模拟赛,感觉良好 10.16 膜你赛,std变量命名毒瘤. 想用 geogb ...

  10. 记一次MySQL5初始化被kill的问题排查

    写在前面 由于测试环境JED申请比较繁琐,所以Eone提供了单机版Mysql供用户使用,近期Eone搭建Mysql5的时候发现莫名被kill了,容器规格是4C8G,磁盘30G 这不科学,之前都是可以的 ...