ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【开源项目推荐】通用SQL数据血缘分析工具——Sqllineage [打印本页]

作者: 汕尾海湾    时间: 2024-2-3 16:19
标题: 【开源项目推荐】通用SQL数据血缘分析工具——Sqllineage

大家好,我是独孤风,从本周开始,争取每周为大家带来一个优秀的开源项目推荐。
开源项目不仅促进了技术的发展和普及,还为全球范围内的开发者和用户社区建立了一个共享知识、协作和创新的平台。站在巨人的肩膀上才能看的更远,我们平时也应该多多关注开源项目,不仅学习其丰富的知识,也要找机会为开源事业做出自己的贡献。
话不多说,今天为大家推荐的开源项目名为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 查询。
一些更高级的用法:
三、安装部署与使用

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

可以直接使用pip安装
  1. pip install sqllineage
复制代码
也可以通过github来安装
  1. pip install git+https://github.com/reata/sqllineage.git
复制代码
分析

有两种方式,去解析sql。可以用-e直接分析一个sql语句,这里分析出了源表和目标表:
  1. $ sqllineage -e "insert into db1.table1 select * from db2.table2"
  2. Statements(#): 1
  3. Source Tables:
  4.     db2.table2
  5. Target Tables:
  6.     db1.table1
复制代码
也可以用-f来直接分析一个sql文件:
  1. $ sqllineage -f foo.sql
  2. Statements(#): 1
  3. Source Tables:
  4.     db1.table_foo
  5.     db1.table_bar
  6. Target Tables:
  7.     db2.table_baz
复制代码
对于连续的两个sql也可以进行分析:
  1. $ sqllineage -e "insert into db1.table1 select * from db2.table2; insert into db3.table3 select * from db1.table1;"
  2. Statements(#): 2
  3. Source Tables:
  4.     db2.table2
  5. Target Tables:
  6.     db3.table3
  7. Intermediate Tables:
  8.     db1.table1
复制代码
可以用-v指令来看每一个sql的执行结果。
  1. $ sqllineage -v -e "insert into db1.table1 select * from db2.table2; insert into db3.table3 select * from db1.table1;"
  2. Statement #1: insert into db1.table1 select * from db2.table2;
  3.     table read: [Table: db2.table2]
  4.     table write: [Table: db1.table1]
  5.     table cte: []
  6.     table rename: []
  7.     table drop: []
  8. Statement #2: insert into db3.table3 select * from db1.table1;
  9.     table read: [Table: db1.table1]
  10.     table write: [Table: db3.table3]
  11.     table cte: []
  12.     table rename: []
  13.     table drop: []
  14. ==========
  15. Summary:
  16. Statements(#): 2
  17. Source Tables:
  18.     db2.table2
  19. Target Tables:
  20.     db3.table3
  21. Intermediate Tables:
  22.     db1.table1
复制代码
指定分析器

下面的例子,可以使用 --dialect=postgres关键字来指定要使用的分析引擎:
  1. $ sqllineage -e "insert into analyze select * from foo;"
  2. Statements(#): 1
  3. Source Tables:
  4.     <default>.foo
  5. Target Tables:
  6.    
  7. $ sqllineage -e "insert into analyze select * from foo;" --dialect=ansi
  8. Statements(#): 1
  9. Source Tables:
  10.     <default>.foo
  11. Target Tables:
  12.     <default>.analyze
  13. $ sqllineage -e "insert into analyze select * from foo;" --dialect=postgres
  14. ...
  15. sqllineage.exceptions.InvalidSyntaxException: This SQL statement is unparsable, please check potential syntax error for SQL
复制代码
提示:用这个命令sqllineage --dialects 看看都有哪些分析器。
列级血缘

可以分析列级血缘,比如下面的sql。
  1. INSERT OVERWRITE TABLE foo
  2. SELECT a.col1,
  3.        b.col1     AS col2,
  4.        c.col3_sum AS col3,
  5.        col4,
  6.        d.*
  7. FROM bar a
  8.          JOIN baz b
  9.               ON a.id = b.bar_id
  10.          LEFT JOIN (SELECT bar_id, sum(col3) AS col3_sum
  11.                     FROM qux
  12.                     GROUP BY bar_id) c
  13.                    ON a.id = sq.bar_id
  14.          CROSS JOIN quux d;
  15. INSERT OVERWRITE TABLE corge
  16. SELECT a.col1,
  17.        a.col2 + b.col2 AS col2
  18. FROM foo a
  19.          LEFT JOIN grault b
  20.               ON a.col1 = b.col1;
复制代码
可以使用-l关键字来进行列级血缘分析
[code]$ sqllineage -f foo.sql -l column.corge.col1




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4