从id=1 的用户中选择*;
从id=2 的用户中选择*;虽然两条语句返回的结果不同,但特征都是:
查询USERS表所有字段的条件是id=?因此,从特性上来说,上面两条SQL是一样的,区别在于参数,当然还有大小写。因此:
如果我们将SQL 中的所有参数替换为?并统一所有大小写,然后计算SQL语句的md5值就可以作为SQL的独特特征,也可以称为SQL的指纹
0x01 SQL 特征实现
技术实现原理也很简单。简单来说,只需要两步:
通过实现Vistor解析SQL并获取AST(抽象语法树),遍历整个AST,统一写法。遇到参数时,直接替换为? Java程序员很幸运,可以直接调用阿里巴巴开源com.alibaba/druid库的com。 alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils#parameterize(sql, dbType) 一句话就可以搞定。幸运的是,人民直播雷锋网的Druid库支持多种SQL,包括Oracle/MySQL/Hive。
0x02 SQL fingerprint 用处
识别出SQL的特征后,可以计算出所有可用SQL的特征,并根据特征进行GROUP BY。
MySQL Slow Query
最直接的使用场景就是利用MySQL的慢查询日志来计算特征,这样就可以知道哪一类SQL是执行瓶颈。也许你发现10,000 个慢查询实际上是一个?
著名的Percona开源Percona Tookit中的pt-query-digest其实就是基于这个思想的,推荐使用它。
再者,大家不都是把日志扔到ELK里吗?更方便的方法是不解析MySQL慢查询日志扔进ELK,添加一个SQL_fingerprint字段,这样就可以定位到慢查询,直接搜索一个SQL_fingerprint就可以知道诸如慢查询发生的频率之类的什么时间段?
数据分析 SQL 识别
现在大家都在讲大数据,所以分析师会写很多SQL来进行数据查询。如果您有SQL
特征库:
关于深入解析:SQL语句识别与分类技巧,的介绍到此结束,希望对大家有所帮助。
【深入解析:SQL语句识别与分类技巧】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这篇文章一定很有帮助!我最近在学习SQL,想了解一下语句结构的特点
有15位网友表示赞同!
以前觉得SQL语句就是写命令那么简单,没想到还有这么细致的研究
有7位网友表示赞同!
学习编程最怕迷路,能更清楚地认识代码特征,进步会更明显吧
有8位网友表示赞同!
现在很多数据库都是用的SQL,这个研究肯定很有实际价值。
有5位网友表示赞同!
我很好奇这篇文章会分析哪些类型的SQL语句特征
有8位网友表示赞同!
希望能看到一些具体的例子,更能理解这些特征的应用
有13位网友表示赞同!
这种特征识别技术有没有什么缺点或者局限性呢?
有11位网友表示赞同!
想知道文章会探讨如何使用这些特征改进SQL数据库的安全
有11位网友表示赞同!
是不是可以用这个技术来自动生成SQL语句?
有20位网友表示赞同!
对于菜鸟来说,学习识别的技巧会不会比较困难?
有7位网友表示赞同!
这个研究有没有应用到其他编程语言上呢?
有20位网友表示赞同!
SQL语句的特征识别对数据库优化有什么影响吗?
有12位网友表示赞同!
我对这个研究很有兴趣,希望能了解更多关于SQL语句分析的方法
有7位网友表示赞同!
如果能结合一些机器学习技巧就更厉害了!
有20位网友表示赞同!
听起来这是一个非常前沿的研究领域,很有潜力
有13位网友表示赞同!
期待看到更多基于此技术的应用和发展
有7位网友表示赞同!
这样的研究能够帮助我们更好地理解SQL的本质
有11位网友表示赞同!
希望这篇文章能为学习和使用SQL的人提供一些新的启发
有15位网友表示赞同!
我很想了解一下具体的识别算法是如何工作的
有20位网友表示赞同!