一种SQL代码相似度分析方法及系统技术方案

技术编号:32165589 阅读:14 留言:0更新日期:2022-02-08 15:19
本发明专利技术公开了一种SQL代码相似度分析方法及系统,该系统包括:提取模块,用于提取SQL代码中的结构性代码、表代码对应的表中文名和字段代码对应的字段中文名;排序模块,用于对表中文名从高到底进行排序,以及对字段中文名进行排序;空间向量计算模块,用于计算每一个重要中文名的向量,然后计算SQL代码的空间向量;分析模块,用于计算两个空间向量的余弦距离。本发明专利技术通过分析SQL代码之间的语义相似度,可以解决开发过程中重复劳动问题,提高开发效率和开发质量。和开发质量。和开发质量。

【技术实现步骤摘要】
一种SQL代码相似度分析方法及系统


[0001]本专利技术涉及大数据智能化
,特别是一种SQL代码相似度分析方法及系统。

技术介绍

[0002]SQL是一门ANSI的标准计算机结构化查询语言,用来访问和操作各类数据库系统。SQL代码包含了丰富的业务信息,即数据的加工口径。由于SQL的展现形式通常比较复杂,不具有明显的特征,从事SQL开发的开发人员会有非常多的重复劳动。自己以前写的、同事写的、系统现成的代码中可能有当前开发需要的SQL代码,但是开发人员缺乏将这些代码简单检索出来的途径,只能重新写。

技术实现思路

[0003]本专利技术为解决上述问题,提供了一种SQL代码相似度分析方法及系统,通过分析SQL代码之间的语义相似度,可以解决开发过程中重复劳动问题,提高开发效率和开发质量。
[0004]为实现上述目的,本专利技术采用的技术方案为:
[0005]一种SQL代码相似度分析系统,包括:提取模块,用于提取SQL代码中的结构性代码、表代码对应的表中文名和字段代码对应的字段中文名;排序模块,用于根据所述表代码在所述SQL代码中的重要性对所述表代码对应的表中文名从高到底进行排序,以及根据所述字段代码对所述表代码对应的所述字段中文名从高到底进行排序;空间向量计算模块,用于计算每一个重要中文名的向量,然后根据所述结构性代码的向量和所述重要中文名的向量计算所述SQL代码的空间向量,所述重要中文名包括排名靠前的CM_N个所述表中文名和排名靠前的CM_N个所述字段中文名;分析模块,用于计算两个所述空间向量的余弦距离。
[0006]优选的,所述系统还包括:分词模块,用于对每一个所述重要中文名进行分词,得到词语;所述空间向量计算模块根据所述词语的词向量计算每一个所述重要中文名的向量。
[0007]优选的,所述词语的词向量为通过word2vec模型预训练得到的V_N维向量,所述word2vec模型通过基于历史SQL脚本建立的语料库训练得到。
[0008]优选的,所述系统还包括优化模块,用于将所述SQL代码补充完整。
[0009]优选的,所述空间向量为所述结构性代码的向量和所述重要中文名的向量加权计算得到,所述重要中文名的权重根据所述重要中文名对应的代码类型和排名设定。
[0010]优选的,所述系统还包括存储模块,用于存储所述历史SQL脚本,以及所述历史SQL脚本的所述空间向量。
[0011]优选的,所述系统还包括代码推荐模块,用于根据所述空间向量推荐所述历史SQL脚本中所述SQL代码的相似代码。
[0012]优选的,所述系统还包括代码定位模块,用于根据所述空间向量定位所述历史SQL脚本中的所述SQL代码。
[0013]优选的,所述系统还包括代码审查模块,用于判定所述SQL代码使用的语法性能。
[0014]基于同样的专利技术构思,本专利技术还提供了一种SQL代码相似度分析方法,包括以下步骤:提取SQL代码中的结构性代码、表代码对应的表中文名和字段代码对应的字段中文名;根据所述表代码在所述SQL代码中的重要性对所述表代码对应的表中文名从高到底进行排序,以及根据所述字段代码对所述表代码对应的所述字段中文名从高到底进行排序;计算每一个重要中文名的向量,然后根据所述结构性代码的向量和所述重要中文名的向量计算所述SQL代码的空间向量,所述重要中文名包括排名靠前的CM_N个所述表中文名和排名靠前的CM_N个所述字段中文名;计算两个所述空间向量的余弦距离。
[0015]本专利技术的有益效果是:
[0016]1.提取SQL代码中的结构性代码、表代码对应的表中文名和字段代码对应的字段中文名,并根据其向量计算SQL代码的空间向量,然后通过计算两个空间向量的余弦距离,作为这两段SQL代码在语义之间的相似度;
[0017]2.优化模块将SQL代码补充完整,并按照XML格式进行封装,方便进行信息提取操作;
[0018]3.存储模块存储历史SQL脚本,以及历史SQL脚本的空间向量,方便后续应用。
附图说明
[0019]图1为一种补充完整的SQL结构的示例图。
具体实施方式
[0020]为了使本专利技术所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合具体实施例对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。
[0021]如何识别不同SQL之间的相似度是一个复杂的问题。目前通常根据SQL中使用的结构、表以及字段进行综合判定,但是由于在语义完全一样的前提下,SQL中字段、条件、关联的位置是可以变换的,并且关联也可以采用多种结构表达方式,因此这种方法的准确性较低,只有在SQL之间的代码差别非常小的时候才能体现出效果,不具有实际应用意义。
[0022]实施例一
[0023]本实施例公开了一种SQL代码相似度分析系统,包括:
[0024]优化模块,用于将SQL结构补充完整。
[0025]SQL代码包括单段SQL语句、多段SQL语句、完整的SQL脚本(包含多段SQL语句和一些控制性语法)等。
[0026]优化模块对SQL进行遍历,与数据库的元数据库进行匹配,对SQL中每个层次使用的库、表、字段信息进行补充完整。
[0027]参照附图1,本实施例作为示例的SQL代码如下:
[0028]SELECT A.A1,B1
[0029]from AA A
[0030]INNER JOIN BB
[0031]ON A.A1=B1。
[0032]优化模块的操作具体包括:针对节点属性为表的节点,扩充节点的第一子节点,第一子节点的节点属性为表中文名,值为该表对应中文名。
[0033]针对节点属性为字段的节点,扩充节点的第二子节点,第二子节点的节点属性为字段中文名,值为该字段对应中文名。
[0034]针对节点属性为字段的节点,扩充节点的第三子节点,第三子节点的节点属性为字段类型,值为该字段对应字段类型。
[0035]针对节点属性为表的节点,如果没有节点属性为表别名的兄弟节点,扩展节点的第一兄弟节点,第一兄弟节点的节点属性为表别名,值为该表对应别名。如果已有这个兄弟节点,不额外扩展,直接复用。
[0036]针对节点属性为字段的节点,如果没有节点属性为字段别名的兄弟节点,扩展节点的第二兄弟节点,第二兄弟节点的节点属性为字段别名,值为该字段对应别名。如果已有这个兄弟节点,不额外扩展,直接复用。
[0037]针对节点属性为字段的节点,如果没有节点属性为归属表别名的兄弟节点,扩展节点的第三兄弟节点,第三兄弟节点的节点属性为归属表别名,值为该字段归属的表对应别名。如果已有这个兄弟节点,不额外扩展,直接复用。
[0038]进一步的,为了方便本实施例所述的提取模块的信息提取操作,制定XPATH规则,将补充完整的SQL按照XML格式进行封装并保存到数据库二维表中。
[0039]提取模块,用于提取SQ本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种SQL代码相似度分析系统,其特征在于,包括:提取模块,用于提取SQL代码中的结构性代码、表代码对应的表中文名和字段代码对应的字段中文名;排序模块,用于根据所述表代码在所述SQL代码中的重要性对所述表代码对应的表中文名从高到底进行排序,以及根据所述字段代码对所述表代码对应的所述字段中文名从高到底进行排序;空间向量计算模块,用于计算每一个重要中文名的向量,然后根据所述结构性代码的向量和所述重要中文名的向量计算所述SQL代码的空间向量,所述重要中文名包括排名靠前的CM_N个所述表中文名和排名靠前的CM_N个所述字段中文名;分析模块,用于计算两个所述空间向量的余弦距离。2.根据权利要求1所述的SQL代码相似度分析系统,其特征在于,还包括:分词模块,用于对每一个所述重要中文名进行分词,得到词语;所述空间向量计算模块根据所述词语的词向量计算每一个所述重要中文名的向量。3.根据权利要求2所述的SQL代码相似度分析系统,其特征在于,所述词语的词向量为通过word2vec模型预训练得到的V_N维向量,所述word2vec模型通过基于历史SQL脚本建立的语料库训练得到。4.根据权利要求1所述的SQL代码相似度分析系统,其特征在于,还包括优化模块,用于将所述SQL代码补充完整。5.根据权利要求1所述的SQL代码相似度分析系统,其特征在于,所述空间向量为所述结构性代码的向量和所述重要...

【专利技术属性】
技术研发人员:郭晨皓李龙权汲浩蒋天榕胡涛唐雁南
申请(专利权)人:厦门国际银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1