**

目的:

**
分析mysql的表级和字段级血缘,本文给出他人源码或示例

工具

GUDU-SQLPARSER GSP
JSQL-PARSER
antlr
DRUID

横向对比

名称 开源 功能 优点 缺点 支持的数据库 官网
GUDU-SQLPARSER GSP 商业,SDK免费 强大,有sqlflow商业产品背书 功能强大,傻瓜式一键解析血缘 无法使用开源 all https://www.sqlparser.com/download.php
JSQL-PARSER 挺强大,但要自行实现 给了一些封装的内容,剩下的要自己写 还是需要自己写的 多数 https://github.com/JSQLParser/JSqlParser
antlr 提供语义包,需要自己实现visitor解析 只给了语义包,处理都需要自己写,语义细腻 语义解析过度复杂,每个语义包是一套代码 都支持,但不同语义包 https://www.antlr.org
DRUID
商业参考
http://www.sqllineage.com/demo#services

其他工具:

PY的SQL-LINEAGE,缺点无法识别RS
https://github.com/reata/sqllineage

名词解释

血缘:当你在数据库里执行一段SQL代码后,数据库会返回给你一个结果集(record set,简称RS),结果集中的每一列可能来源于不同的表,这些不同的表又依赖别的表,中间可能经过了函数、聚合等计算。源表与结果集关系,就是血缘关系。

RS:result set:结果集,结果所合并的表

GUDU-SQLFlow的几种关系

fdd:表示数据从源列到目标列的关系

frd:表示结果集返回数量受到源列影响

fdr:表示目标列的值受到源列数据集数量的影响

join:表示SQL的多表join关系

原理

基于antlr4实现hiveSQL的解析[表血缘和字段血缘]
http://ganjiacheng.cn/article/2020/article_14_%E5%9F%BA%E4%BA%8Eantlr4%E5%AE%9E%E7%8E%B0HQL%E7%9A%84%E8%A7%A3%E6%9E%90-%E8%A1%A8%E8%A1%80%E7%BC%98%E5%92%8C%E5%AD%97%E6%AE%B5%E8%A1%80%E7%BC%98/

访问者模式及其在 Java Parser 中的应用
https://xie.infoq.cn/article/5f80da3c014fd69f8dbe09b28
Open Source SQL Parsers
https://tokern.io/blog/open-source-sql-parsers/

【SQL解析】- SQL血缘分析实现篇01
https://blog.csdn.net/qq_31557939/article/details/126277212

示例

GUDU GSP

调用generateDataFlow()方法即可获取字段级血缘

private static void xml(String sql){DataFlowAnalyzer dlineage = new DataFlowAnalyzer(sql, EDbVendor.dbvmysql, false);dlineage.generateDataFlow();String result = XML2Model.saveXML(dlineage.getDataFlow());System.out.println(result);}

参考文章
https://blog.csdn.net/chensuper/article/details/125985342
SQLFlow的几种关系
https://blog.51cto.com/u_15162069/2780724
SQLFlow:在线解析SQL血缘关系(SQL Data Lineage)
https://blog.csdn.net/woshihanhan1/article/details/116562306

JSQL PARSER

表级
逻辑:调用方法getTableList获取所有表后,再根据语句获取目标表,排除目标表即为源表
官方示例
https://jsqlparser.sourceforge.net/example.php

     Statement statement = null;try {statement = CCJSqlParserUtil.parse(sql);} catch (JSQLParserException e) {throw new RuntimeException(e);}TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();List<String> all = tablesNamesFinder.getTableList(statement);

字段级
参考仓库
https://github.com/luop23/sql_analysis

ANTLR MYSQL/HIVE

表级,字段级都参考
基于antlr4实现hiveSQL的解析[表血缘和字段血缘]
http://ganjiacheng.cn/article/2020/article_14_%E5%9F%BA%E4%BA%8Eantlr4%E5%AE%9E%E7%8E%B0HQL%E7%9A%84%E8%A7%A3%E6%9E%90-%E8%A1%A8%E8%A1%80%E7%BC%98%E5%92%8C%E5%AD%97%E6%AE%B5%E8%A1%80%E7%BC%98/
参考仓库
https://github.com/webgjc/sql-parser
相关参考
ANTLR语义包mysql
https://github.com/antlr/grammars-v4/tree/master/sql/mysql/Positive-Technologies
使用antlr快速解析SQL
https://blog.51cto.com/u_2837193/4904003
antlr4入门 SQL解析
https://www.bilibili.com/read/cv16868467/
从定义到AST及其遍历方式,一文带你搞懂Antlr4
https://zhuanlan.zhihu.com/p/347329881
使用antlr快速解析SQL
https://blog.csdn.net/puhaiyang/article/details/122161809
Antlr4解析MySQL语法使用方法
https://www.jianshu.com/p/df256de737b4
Antlr v4入门教程和实践
https://blog.csdn.net/yixianshijie/article/details/121496250
HIVE
https://github.com/JunNan-X/HiveSqlBloodFigure

DRUID

参考仓库
https://github.com/L11168032/sql-lineage-parser
https://github.com/JupiterMouse/data-lineage-parent

mysql血缘 表级血缘 字段级血缘GUDU GSP,JSQL PARSER,ANTLR MYSQL,DRUID相关推荐

  1. 如何更新mysql数据库字段_如何使用MySQL一个表中的字段更新另一个表中字段

    1,修改1列 update student s, city c set s.city_name = c.name where s.city_code = c.code; 2,修改多个列 update ...

  2. MySQL建表(那些字段必须)命令详解

    MySQL建表(那些字段必须)命令详解1. create table命令 强调:使用建表命令之前必须使用use命令选择表所在的数据库.create table命令的格式如下: create table ...

  3. mysql高效查出重复的手机号_Mysql必读MySQL大表中重复字段的高效率查询方法

    <MysqL必读MysqL大表中重复字段的高效率查询方法>要点: 本文介绍了MysqL必读MysqL大表中重复字段的高效率查询方法,希望对您有用.如果有疑问,可以联系我们.MysqL大表重 ...

  4. mysql user表没有password字段,远程连接密码为空

    mysql user表没有password字段,Navicat远程连接密码为空 在控制台登录mysql时,输入密码123456成功登录,没什么问题 mysql -u root -p 打开Navicat ...

  5. mysql修改表中某个字段的默认值

    Mysql中用SQL增加.删除字段,修改字段名.字段类型.注释,调整字段顺序总结 在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或 ...

  6. MySql 建表、添加字段、修改字段、添加索引SQL语句写法

    转载:https://www.cnblogs.com/bk7788/p/6050184.html 建表: DROP TABLE IF EXISTS bulletin; CREATE TABLE bul ...

  7. mysql建立电影表_【代码片段】MySQL新建表添加基础字段

    MySQL数据库表中,经常会用到的三个字段 SQL建表时,直接插入 gmt_create datetime null comment '创建时间', gmt_modified datetime nul ...

  8. MySQL为表的所有字段添加数据

    MySQL使用INSERT语句,向数据表中添加数据,根据添加方式的不同,分为三种 1.为表的所有字段添加数据 2.为表的指定字段添加数据 3.同时添加多条记录 为表的所有字段添加数据 一般情况下,向数 ...

  9. mysql修改表结构 删除字段_mysql更改表结构:添加、删除、修改字段、调整字段顺序...

    添加字段: alter table `user_movement_log` Add column GatewayId int not null default 0 AFTER `Regionid` ( ...

最新文章

  1. EMC NetWorker备份oracle安装配置指南
  2. html+css 百度首页练习
  3. 进程注入的研究与实现
  4. 一文读懂TOF深度相机技术原理--TI-Tintin-OPT8241二次开发和应用系列--Theory Level
  5. DL之SoftmaxWithLoss:SoftmaxWithLoss算法(Softmax+交叉熵误差)简介、使用方法、应用案例之详细攻略
  6. SAP Data Intelligence Graph json源代码的结构分析
  7. .NET 6 攻略大全(二)
  8. Context.getExternalFilesDir()和Context.getExternalCacheDir()方法
  9. Python HTMLTestRunner生成网页自动化测试报告时中文编码报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6...
  10. python有什么用-python有什么用(用处和用途)
  11. WEB标准 基础(一) 到底是什么?
  12. 计算机网络(HTTP、TCP)的连接管理
  13. 不足40M的WPS极限精简版,便携性拉满,老电脑福音
  14. 利用idea 打包jar包
  15. GoFrame+vue的前后端分离开源项目
  16. 中华石杉的架构学习笔记
  17. 2019北邮网安考研经验
  18. Internet Explorer无法打开站点,已终止操作
  19. Python Crypto.Cipher加密包
  20. 软件测试周刊(第13期):质量是一种认知

热门文章

  1. Error starting stream. VIDIOC_STREAMON: Protocol error Unable to use mmap. Using read instead. Unabl
  2. ubuntu 19.04 与win10双系统 搜狗输入法安装教程
  3. 不是技术牛人,如何拿到国内巨头Offer
  4. 组织机构树型数据库结构
  5. 野人岛4四季神器java,生存战争野人岛mod
  6. java骰子_Java实现的简单掷骰子游戏示例
  7. android开发 问卷调查案例_安卓 问卷调查Demo 原生代码
  8. CSAPP第89章家庭作业(部分)
  9. Android Service之设备存储空间监控
  10. 201771010101 白玛次仁 《2018面向对象程序设计(Java)》第十周学习总结