mysql血缘 表级血缘 字段级血缘GUDU GSP,JSQL PARSER,ANTLR MYSQL,DRUID
**
目的:
**
分析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相关推荐
- 如何更新mysql数据库字段_如何使用MySQL一个表中的字段更新另一个表中字段
1,修改1列 update student s, city c set s.city_name = c.name where s.city_code = c.code; 2,修改多个列 update ...
- MySQL建表(那些字段必须)命令详解
MySQL建表(那些字段必须)命令详解1. create table命令 强调:使用建表命令之前必须使用use命令选择表所在的数据库.create table命令的格式如下: create table ...
- mysql高效查出重复的手机号_Mysql必读MySQL大表中重复字段的高效率查询方法
<MysqL必读MysqL大表中重复字段的高效率查询方法>要点: 本文介绍了MysqL必读MysqL大表中重复字段的高效率查询方法,希望对您有用.如果有疑问,可以联系我们.MysqL大表重 ...
- mysql user表没有password字段,远程连接密码为空
mysql user表没有password字段,Navicat远程连接密码为空 在控制台登录mysql时,输入密码123456成功登录,没什么问题 mysql -u root -p 打开Navicat ...
- mysql修改表中某个字段的默认值
Mysql中用SQL增加.删除字段,修改字段名.字段类型.注释,调整字段顺序总结 在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或 ...
- MySql 建表、添加字段、修改字段、添加索引SQL语句写法
转载:https://www.cnblogs.com/bk7788/p/6050184.html 建表: DROP TABLE IF EXISTS bulletin; CREATE TABLE bul ...
- mysql建立电影表_【代码片段】MySQL新建表添加基础字段
MySQL数据库表中,经常会用到的三个字段 SQL建表时,直接插入 gmt_create datetime null comment '创建时间', gmt_modified datetime nul ...
- MySQL为表的所有字段添加数据
MySQL使用INSERT语句,向数据表中添加数据,根据添加方式的不同,分为三种 1.为表的所有字段添加数据 2.为表的指定字段添加数据 3.同时添加多条记录 为表的所有字段添加数据 一般情况下,向数 ...
- mysql修改表结构 删除字段_mysql更改表结构:添加、删除、修改字段、调整字段顺序...
添加字段: alter table `user_movement_log` Add column GatewayId int not null default 0 AFTER `Regionid` ( ...
最新文章
- EMC NetWorker备份oracle安装配置指南
- html+css 百度首页练习
- 进程注入的研究与实现
- 一文读懂TOF深度相机技术原理--TI-Tintin-OPT8241二次开发和应用系列--Theory Level
- DL之SoftmaxWithLoss:SoftmaxWithLoss算法(Softmax+交叉熵误差)简介、使用方法、应用案例之详细攻略
- SAP Data Intelligence Graph json源代码的结构分析
- .NET 6 攻略大全(二)
- Context.getExternalFilesDir()和Context.getExternalCacheDir()方法
- Python HTMLTestRunner生成网页自动化测试报告时中文编码报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6...
- python有什么用-python有什么用(用处和用途)
- WEB标准 基础(一) 到底是什么?
- 计算机网络(HTTP、TCP)的连接管理
- 不足40M的WPS极限精简版,便携性拉满,老电脑福音
- 利用idea 打包jar包
- GoFrame+vue的前后端分离开源项目
- 中华石杉的架构学习笔记
- 2019北邮网安考研经验
- Internet Explorer无法打开站点,已终止操作
- Python Crypto.Cipher加密包
- 软件测试周刊(第13期):质量是一种认知
热门文章
- Error starting stream. VIDIOC_STREAMON: Protocol error Unable to use mmap. Using read instead. Unabl
- ubuntu 19.04 与win10双系统 搜狗输入法安装教程
- 不是技术牛人,如何拿到国内巨头Offer
- 组织机构树型数据库结构
- 野人岛4四季神器java,生存战争野人岛mod
- java骰子_Java实现的简单掷骰子游戏示例
- android开发 问卷调查案例_安卓 问卷调查Demo 原生代码
- CSAPP第89章家庭作业(部分)
- Android Service之设备存储空间监控
- 201771010101 白玛次仁 《2018面向对象程序设计(Java)》第十周学习总结