具体实施方式
为了使本技术领域的人员更好地理解本说明书一个或多个中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一个或多个一部分实施例,而不是全部的实施例。基于本说明书一个或多个中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书一个或多个保护的范围。
本说明书一个或多个实施例提供了一种相似查询识别方法及装置,通过采用更细粒度的相似查询识别方式,以最底层的叶子查询为基础相似度识别对象,并采用自叶子查询逐层向上汇总的方式基于叶子查询之间的相似性识别结果,来确定目标查询任务之间是否存在相似查询,得到最终的相似查询识别结果,这样能够提高相似查询的识别精度。
图1为本说明书一个或多个实施例提供的相似查询识别方法的第一种流程示意图,如图1所示,该方法至少包括以下步骤:
S101,获取待识别的第一查询任务和第二查询任务,其中,该第一查询任务包括:第一子查询和第一叶子查询,该第二查询任务包括:第二子查询和第二叶子查询;
具体的,第一查询任务和第二查询任务均是根据查询层级关系对包含的多个查询语句进行层级划分,以及按照预设代码规范方式对层级划分得到的子查询和叶子查询进行规范处理得到的,其中,叶子查询为最细粒度的查询任务,即from后面直接是具体的数据库表,叶子查询直接从数据库表中查询并输出相应的底层查询结果;
其中,第一子查询可以是直接属于第一查询任务的分支查询任务,也可以是属于其他第一子查询的分支查询任务,即子查询与子查询之间可能存在嵌套关系;同样的,第二子查询可以是直接属于第二查询任务的分支查询任务,也可以是属于其他第二子查询的分支查询任务;
其中,第一叶子查询可以是属于第一子查询的底层查询任务,也可以直接属于第一查询任务的底层查询任务,同样的,第二叶子查询可以是属于第二子查询的底层查询任务,也可以直接属于第二查询任务的底层查询任务;
S102,分别确定第一叶子查询与第二叶子查询之间的底层相似度,其中,该底层相似度是基于第一叶子查询中预设数据查询项和第二叶子查询中预设数据查询项之间的相似度确定的,该预设数据查询项包括:数据来源、过滤条件、聚合维度、存储结构中至少一项;
具体的,将第一查询任务中的多个叶子查询分别与第二查询任务中的多个叶子查询进行两两组合,得到多个叶子查询对,其中,每个叶子查询对包括:一个第一叶子查询和一个第二叶子查询,针对第一查询任务和第二查询任务确定的叶子查询对的数量为:第一查询任务中包含的叶子查询的数量与第二查询任务中包含的叶子查询的数量的乘积;
针对每个叶子查询对,计算该叶子查询对包含的第一叶子查询与第二叶子查询之间的底层相似度,具体的,分别计算第一叶子查询中预设数据查询项和第二叶子查询中预设数据查询项之间的单项相似度,根据至少一个单项相似度确定该叶子查询对包含的第一叶子查询与第二叶子查询之间的底层相似度;
S103,利用自叶子查询逐层向上汇总的方式并根据确定出的各叶子查询之间的底层相似度,确定第一查询任务和第二查询任务之间涉及的相似查询;
其中,确定出的相似查询包括:相似叶子查询、相似子查询、相似查询任务中至少一种,即相似查询可以是第一叶子查询与第二叶子查询,还可以是第一子查询和第二子查询,也可以是第一查询任务和第二查询任务,其中,相似查询输出的查询结果可能相同,这样属于重复查询计算,因此,将相似查询合并处理,将共用同一查询结果即可,避免出现重复查询计算的情况。
本说明书一个或多个实施例中,通过采用更细粒度的相似查询识别方式,以最底层的叶子查询为基础相似度识别对象,并采用自叶子查询逐层向上汇总的方式基于叶子查询之间的相似性识别结果,来确定目标查询任务之间是否存在相似查询,得到最终的相似查询识别结果,这样能够提高相似查询的识别精度。
其中,如图2所示,上述S103利用自叶子查询逐层向上汇总的方式并根据确定出的各叶子查询之间的底层相似度,确定第一查询任务和第二查询任务之间涉及的相似查询,具体包括:
S1031,利用自叶子查询逐层向上汇总的方式并根据确定出的各叶子查询之间的底层相似度,确定第一查询任务和第二查询任务中子查询之间的分支相似度,和/或确定第一查询任务和第二查询任务之间的综合相似度;
具体的,在确定出各叶子查询对的底层相似度后,针对每个待识别的子查询组合,根据与该子查询组合相关的底层相似度,确定该子查询组合中第一子查询和第二子查询之间的分支相似度;以及根据各叶子查询对的底层相似度,确定第一查询任务与第二查询任务之间的综合相似度;
进一步的,考虑到叶子查询的数量相同的情况下,子查询或查询任务之间才存在相似的可能性,因此,可以结合子查询包含的叶子查询的数量,确定待识别相似度的子查询组合,以及结合查询任务包含的叶子查询的数量,初步确定第一查询任务和第二查询任务之间是否存在相似的可能性;
具体的,当第一查询任务包含的叶子查询的数量与第二查询任务包含的叶子查询的数量不相同时,可以不进行综合相似度计算,只有当第一查询任务包含的叶子查询的数量与第二查询任务包含的叶子查询的数量相同时,才根据各叶子查询对的底层相似度,确定第一查询任务与第二查询任务之间的综合相似度;同样的,针对确定分支相似度的过程而言,也只有当第一子查询包含的叶子查询的数量与第二子查询包含的叶子查询的数量相同时,才确定第一子查询与第二子查询之间的分支相似度,这样能够提高相似查询的识别效率;
S1032,根据确定出的底层相似度、分支相似度和综合相似度,确定第一查询任务和第二查询任务之间涉及的相似查询;
具体的,将各底层相似度与对应的预设约束条件进行比对,确定相似叶子查询,将各分支相似度与对应的预设约束条件进行比对,确定相似子查询,以及将综合相似度与对应的预设约束条件进行比对,确定查询任务之间是否相似;另外,如果步骤S1031中只确定分支相似度和综合相似度中的一项时,在步骤S1032为根据确定出的底层相似度和分支相似度,确定第一查询任务和第二查询任务之间涉及的相似查询;或者,根据确定出的底层相似度和综合相似度,确定第一查询任务和第二查询任务之间涉及的相似查询。
进一步的,考虑到识别相似查询的主要目的是减少相似查询带来的计算消耗,因此,在识别相似查询时,引入查询语句的查询消耗,优先寻找相似度高且查询消耗大的相似查询,以便快速地降低执行查询任务所用的查询消耗,基于此,如图3所示,在S1032根据确定出的底层相似度、分支相似度和综合相似度,确定第一查询任务和第二查询任务之间涉及的相似查询之前,还包括:
S1033,确定各第一叶子查询的第一查询消耗以及各述第二叶子查询的第二查询消耗;
具体的,针对每个第一叶子查询,确定该第一叶子查询的查询消耗,即确定执行第一叶子查询所需消耗的计算资源大小,该计算资源大小包括:CPU计算资源大小和内存消耗大小;以及针对每个第二叶子查询,确定该第二叶子查询的查询消,即确定执行第二叶子查询所需消耗的计算资源大小;
对应的,上述S1032根据确定出的底层相似度、分支相似度和综合相似度,确定第一查询任务和第二查询任务之间涉及的相似查询,具体包括:
S10321,根据确定出的底层相似度、分支相似度、综合相似度、第一查询消耗和第二查询消耗,确定第一查询任务和第二查询任务之间涉及的相似查询,具体的,在第一查询任务和第二查询任务中识别出相似度高且计算消耗高的两个叶子查询、两个子查询、或两个整体查询确定为相似查询。
在一个具体的实施例中,如图4a所示,给出了第一查询任务的层级结构示意图,如图4b所示,给出了第二查询任务的层级结构示意图,具体为:
第一查询任务X包括:子查询P1和P2,叶子查询A1、A2、A3、A4、A5、A6,其中,叶子查询A1直接属于第二查询任务X,叶子查询A2和A3属于子查询P1,叶子查询A4、A5和A6属于子查询P2;
第二查询任务Y包括:子查询Q1和Q2,叶子查询B1、B2、B3、B4、B5、B6,其中,叶子查询B1和B2直接属于第二查询任务Y,叶子查询B3和B4属于子查询Q1,叶子查询B5和B6属于子查询Q2。
其中,针对子查询之间的相似度计算过程,上述利用自叶子查询逐层向上汇总的方式并根据确定出的各叶子查询之间的底层相似度,确定第一查询任务和第二查询任务中的子查询之间的分支相似度,具体包括:
步骤一,确定待识别的多个子查询组合,其中,每个子查询组合包括:一个第一子查询和一个第二子查询,且该第一子查询与该第二子查询中包含的叶子查询数量相同;
具体的,考虑到当子查询中包含的叶子查询的数量相同时,子查询之间存在相似的可能性大,为了提高相似查询识别效率,在所有子查询组合中选取出叶子查询数量相同的子查询组合作为待识别的子查询组合;
例如,针对图4a中的第一查询任务和图4b中的第二查询任务,待识别的子查询组合包括:子查询P1和Q1、子查询P1和Q2;
步骤二,针对每个待识别的子查询组合,在与该子查询组合相关的多个叶子查询对中选取目标叶子查询对,其中,每个叶子查询对包括:一个第一叶子查询和一个第二叶子查询;
其中,上述在与该子查询组合相关的多个叶子查询对中选取目标叶子查询对,具体包括:
S1,将该子查询组合中第一子查询中包含的多个第一叶子查询的组合确定为第一叶子查询集合;以及,
将该子查询组合中第二子查询中包含的多个第二叶子查询的组合确定为第二叶子查询集合;
S2,根据首次确定出的第一叶子查询集合和第二叶子查询集合,生成首轮使用的叶子查询对集合,其中,该叶子查询对集合包括:第一叶子查询与第二叶子查询之间两两组合得到的叶子查询对;
S3,将当前使用的叶子查询对集合中具有最大底层相似度的叶子查询对确定为目标叶子查询对;
S4,从上一轮得到的第一叶子查询集合和第二叶子查询集合中分别删除目标叶子查询对中第一叶子查询和第二叶子查询,得到剩余的第一叶子查询集合和第二叶子查询集合;
S5,根据剩余的第一叶子查询集合和第二叶子查询集合,生成下一轮使用的叶子查询对集合,直到第一叶子查询集合和第二叶子查询集合均为空集合,否则,继续执行步骤S3、S4和S5。
例如,仍针对图4a中的第一查询任务和图4b中的第二查询任务,以计算第一查询任务X中的叶子查询P1和第二查询任务Y中的叶子查询Q1之间的分支相似度为例,具体为:
对应的S1中,第一叶子查询集合为{A2,A3},第二叶子查询集合为{B3,B4};
对应的S2中,首轮使用的叶子查询对集合为{A2B3,A2B4,A3B3,A3B4};
对应的S3中,若叶子查询对A2B3的底层相似度为最大值,则目标叶子查询对为A2B3;
对应的S4中,从上一轮得到的第一叶子查询集合{A2,A3}和第二叶子查询集合{B3,B4}中分别删除第一叶子查询A2和第二叶子查询B3,得到剩余的第一叶子查询集合为{A3},第二叶子查询集合为{B4};
对应的S5中,根据剩余的第一叶子查询集合{A3}和第二叶子查询集合{B4},生成下一轮使用的叶子查询对集合{A3B4},其中,由于剩余的第一叶子查询集合和第二叶子查询集合均不为空,则继续执行步骤S3、S4和S5;
对应的S3中,由于当前使用的叶子查询对集合{A3B4}中只剩下叶子查询对A3B4,因此,该叶子查询对A3B4的底层相似度为最大值,则目标叶子查询对为A3B4;
对应的S4中,从上一轮得到的第一叶子查询集合{A3}和第二叶子查询集合{B4}中分别删除第一叶子查询A3和第二叶子查询B4,得到剩余的第一叶子查询集合为空集合,第二叶子查询集合为空集合;
对应的S5中,由于剩余的第一叶子查询集合和第二叶子查询集合均为空,则停止循环;
因此,最终在与该子查询组合P1Q1相关的多个叶子查询对中,选取出的目标叶子查询对为叶子查询对A2B3和A3B4。
步骤三,根据选取出的各目标叶子查询对的底层相似度,确定待识别的子查询组合的分支相似度;
具体的,可以对选取出的各目标叶子查询对的底层相似度之和求平均值,将该平均值确定为待识别的子查询组合的分支相似度;
例如,仍针对图4a中的第一查询任务和图4b中的第二查询任务,对步骤二中选取出的目标叶子查询对为叶子查询对A2B3和A3B4分别对应的底层相似度之和求平均值,将该平均值确定为待识别的子查询组合P1Q1的分支相似度。
参见上述子查询组合P1Q1的分支相似度确定过程,确定子查询组合P1Q2的分支相似度,即分别确定子查询P1和Q1之间的分支相似度、子查询P1和Q2之间的分支相似度;
步骤四,将确定出的各子查询组合的分支相似度,确定为第一查询任务和第二查询任务中的子查询之间的分支相似度;
例如,仍针对图4a中的第一查询任务和图4b中的第二查询任务,将步骤三中确定出的子查询P1和Q1之间的分支相似度和子查询P1和Q2之间的分支相似度,确定为第一查询任务X和第二查询任务Y中的子查询之间的分支相似度。
其中,参见上述第一查询任务和第二查询任务中的子查询之间的分支相似度的确定过程,为了提高相似查询识别效率,考虑到当整体查询任务中包含的叶子查询的数量相同时,整体查询任务之间存在相似的可能性大,例如,针对图4a中的第一查询任务和图4b中的第二查询任务,第一查询任务中包含的叶子查询的数量为6,且第二查询任务中包含的叶子查询的数量也为6,此时,需要计算第一查询任务X和第二查询任务Y之间的综合相似度;
具体的,若第一查询任务中包含的第一叶子查询的数量与第二查询任务中包含的第二叶子查询的数量相同,则执行如下步骤确定第一查询任务和第二查询任务之间的综合相似度,具体包括:
步骤一,在与第一查询任务和第二查询任务相关的多个叶子查询对中,选取目标叶子查询对,其中,每个叶子查询对包括:一个第一叶子查询和一个第二叶子查询,该相关的多个叶子查询对包括:第一查询任务中包含的第一叶子查询与第二查询任务中包含的第二叶子查询的两两组合得到的叶子查询对;
其中,上述在与第一查询任务和第二查询任务相关的多个叶子查询对中,选取目标叶子查询对,具体包括:
S1,将第一查询任务中包含的多个第一叶子查询的组合确定为第一叶子查询集合;以及,
将第二查询任务中包含的多个第二叶子查询的组合确定为第二叶子查询集合;
S2,根据首次确定出的第一叶子查询集合和第二叶子查询集合,生成首轮使用的叶子查询对集合,其中,该叶子查询对集合包括:第一叶子查询与第二叶子查询之间两两组合得到的叶子查询对;
S3,将当前使用的叶子查询对集合中具有最大底层相似度的叶子查询对确定为目标叶子查询对;
S4,从上一轮得到的第一叶子查询集合和第二叶子查询集合中分别删除目标叶子查询对中第一叶子查询和第二叶子查询,得到剩余的第一叶子查询集合和第二叶子查询集合;
S5,根据剩余的第一叶子查询集合和第二叶子查询集合,生成下一轮使用的叶子查询对集合,直到第一叶子查询集合和第二叶子查询集合均为空集合,否则,继续执行步骤S3、S4和S5。
例如,仍针对图4a中的第一查询任务和图4b中的第二查询任务,具体为:
对应的S1中,第一叶子查询集合为{A1,A2,A3,A4,A5,A6},第二叶子查询集合为{B1,B2,B3,B4,B5,B6};
对应的S2中,首轮使用的叶子查询对集合为{A1B1,A1B2,...AiBj,...A5B6,A6B6},其中,1≤i≤6,1≤j≤6,其中,该叶子查询对集合中的叶子查询对的数量为36个;
对应的S3中,若叶子查询对A2B3的底层相似度为最大值,则目标叶子查询对为A2B3;
对应的S4中,从上一轮得到的第一叶子查询集合{A1,A2,A3,A4,A5,A6}和第二叶子查询集合{B1,B2,B3,B4,B5,B6}中分别删除第一叶子查询A2和第二叶子查询B3,得到剩余的第一叶子查询集合为{A1,A3,A4,A5,A6},第二叶子查询集合为{B1,B2,B4,B5,B6};
对应的S5中,根据剩余的第一叶子查询集合{A1,A3,A4,A5,A6}和第二叶子查询集合{B1,B2,B4,B5,B6},生成下一轮使用的叶子查询对集合{A1B1,A1B2,...AiBj,...A5B6,A6B6},其中,i≠2,j≠3,该叶子查询对集合中的叶子查询对的数量为25个,由于剩余的第一叶子查询集合和第二叶子查询集合均不为空,则继续执行步骤S3、S4和S5;
对应的S3中,根据当前使用的叶子查询对集合{A1B1,A1B2,...AiBj,...A5B6,A6B6},其中,i≠2,j≠3中各叶子查询对的底层相似度,确定具有最大底层相似度的目标叶子查询对,若叶子查询对A3B4的底层相似度为最大值,则目标叶子查询对为A3B4;
对应的S4中,从上一轮得到的第一叶子查询集合{A1,A3,A4,A5,A6}和第二叶子查询集合{B1,B2,B4,B5,B6}中分别删除第一叶子查询A3和第二叶子查询B4,得到剩余的第一叶子查询集合为{A1,A4,A5,A6},第二叶子查询集合为{B1,B2,B5,B6};
对应的S5中,根据剩余的第一叶子查询集合{A1,A4,A5,A6}和第二叶子查询集合{B1,B2,B5,B6},生成下一轮使用的叶子查询对集合{A1B1,A1B2,...AiBj,...A5B6,A6B6},其中,i≠2,j≠3且i≠3,j≠4,该叶子查询对集合中的叶子查询对的数量为16个,由于剩余的第一叶子查询集合和第二叶子查询集合均不为空,则继续执行步骤S3、S4和S5;
依次类推,直到得到剩余的第一叶子查询集合为空集合,第二叶子查询集合为空集合;
对应的S5中,由于剩余的第一叶子查询集合和第二叶子查询集合均为空,则停止循环;
因此,最终在与第一查询任务X和第二查询任务Y相关的多个叶子查询对中,选取出的目标叶子查询对为A2B3、A3B4…等6个叶子查询对。
步骤二,根据选取出的各目标叶子查询对的底层相似度,确定第一查询任务和第二查询任务之间的综合相似度;
具体的,可以对选取出的各目标叶子查询对的底层相似度之和求平均值,将该平均值确定为第一查询任务和第二查询任务之间的综合相似度。
例如,仍针对图4a中的第一查询任务和图4b中的第二查询任务,对步骤一中选取出的目标叶子查询对为A2B3、A3B4…等6个叶子查询对分别对应的底层相似度之和求平均值,将该平均值确定为第一查询任务X和第二查询任务Y之间的综合相似度。
其中,在确定出底层相似度、分支相似度、综合相似度之后,针对相似查询的识别过程,上述S1032根据确定出的底层相似度、分支相似度和综合相似度,确定第一查询任务和第二查询任务之间涉及的相似查询,具体包括:
(1)若底层相似度大于第一预设阈值,则将该底层相似度对应的叶子查询对,确定为第一查询任务和第二查询任务之间涉及的相似查询;
例如,若叶子查询对A2B3的底层相似度大于第一预设阈值,则将叶子查询对A2B3确定为第一查询任务和第二查询任务之间涉及的相似查询;
(2)若分支相似度大于第二预设阈值,则将该分支相似度对应的子查询组合,确定为第一查询任务和第二查询任务之间涉及的相似查询;
例如,若子查询组合P1Q1的分支相似度大于第二预设阈值,则将子查询组合P1Q1确定为第一查询任务和第二查询任务之间涉及的相似查询;
(3)若综合相似度大于第三预设阈值,则将第一查询任务和第二查询任务确定为相似查询;
例如,若第一查询任务X和第二查询任务Y之间的综合相似度大于第三预设阈值,则确定第一查询任务X和第二查询任务Y为相似查询任务。
其中,第一预设阈值、第二预设阈值、第三预设阈值可以相同,也可以不同。
其中,针对相似查询的识别过程,并且引入查询消耗因素的情况,上述S10321根据确定出的底层相似度、分支相似度、综合相似度、第一查询消耗和第二查询消耗,确定第一查询任务和第二查询任务之间涉及的相似查询,具体包括:
(1)针对每个叶子查询对,根据该叶子查询对的底层相似度、第一查询消耗和第二查询消耗,确定该叶子查询对的底层相似消耗权重;
具体的,叶子查询对的底层相似消耗权重W叶子=(C第一叶子+C第二叶子)×S叶子对,其中,C第一叶子表示叶子查询对中第一叶子查询的查询消耗,C第二叶子表示叶子查询对中第二叶子查询的查询消耗,S叶子对表示叶子查询对对应的底层相似度;
例如,叶子查询对A2B3的底层相似消耗权重WA2B3=(CA2+CB3)×SA2B3,其中,CA2表示叶子查询对中第一叶子查询A2的查询消耗,CB3表示叶子查询对中第二叶子查询B3的查询消耗,SA2B3表示叶子查询对A2B3对应的底层相似度;
若确定出的底层相似消耗权重大于第四预设阈值,则将该叶子查询对确定为第一查询任务和第二查询任务之间涉及的相似查询;
例如,若叶子查询对A2B3的底层相似消耗权重大于第四预设阈值,则将叶子查询对A2B3确定为第一查询任务和第二查询任务之间涉及的相似查询;
(2)针对每个子查询组合,根据该子查询组合的分支相似度、与该子查询组合相关的第一查询消耗和第二查询消耗,确定该子查询组合的分支相似消耗权重,其中,与该子查询组合相关的第一查询消耗为第一子查询中包含的第一叶子查询的查询消耗,与该子查询组合相关的第二查询消耗为第二子查询中包含的第二叶子查询的查询消耗;
具体的,子查询组合的分支相似消耗权重W子=(C第一子查询+C第二子查询)×S子查询组合,其中,C第一子查询表示子查询组合中第一子查询的查询消耗,C第二子查询表示子查询组合中第二子查询的查询消耗,S子查询组合表示子查询组合对应的分支相似度;
其中,子查询的查询消耗由该子查询包含的多个叶子查询的查询消耗决定的,可以将子查询包含的多个叶子查询的查询消耗之和确定为子查询的查询消耗;
例如,子查询组合P1Q1的分支相似消耗权重WP1Q1=(CP1+CQ1)×SP1Q1,其中,CP1表示子查询中第一子查询P1的查询消耗,CQ1表示子查询中第二子查询Q1的查询消耗,SP1Q1表示子查询组合P1Q1对应的分支相似度;
另外,在确定分支相似消耗权重时,还可以考虑子查询之间的关联消耗,即子查询组合的分支相似消耗权重W子=(C第一子查询+C第二子查询+C关联)×S子查询组合,子查询组合的查询消耗可以由各子查询的查询消耗和子查询之间的关联查询消耗决定;
若确定出的分支相似消耗权重大于第五预设阈值,则将该子查询组合确定为第一查询任务和第二查询任务之间涉及的相似查询;
例如,若子查询组合P1Q1的分支相似消耗权重大于第五预设阈值,则将子查询组合P1Q1确定为第一查询任务和第二查询任务之间涉及的相似查询;
(3)针对整体查询任务,根据综合相似度、各第一叶子查询的第一查询消耗和各第二叶子查询的第二查询消耗,确定第一查询任务和第二查询任务之间的综合相似消耗权重;
具体的,第一查询任务和第二查询任务之间的综合相似消耗权重W=(C第一查询+C第二查询)×S综合,其中,C第一查询表示第一查询任务的查询消耗,C第二查询表示第二查询任务的查询消耗,S综合表示第一查询任务和第二查询任务之间的综合相似度;
其中,第一查询任务的查询消耗由该第一查询任务包含的多个叶子查询的查询消耗决定的,可以将第一查询任务包含的多个第一叶子查询的查询消耗之和确定为第一查询任务的查询消耗;第二查询任务的查询消耗由该第二查询任务包含的多个叶子查询的查询消耗决定的,可以将第二查询任务包含的多个第二叶子查询的查询消耗之和确定为第二查询任务的查询消耗;
例如,第一查询任务X和第二查询任务Y之间的综合相似消耗权重WXY=(CX+CY)×SXY,其中,CX表示子第一查询任务X的查询消耗,CY表示第二查询任务Y的查询消耗,SXY表示第一查询任务和第二查询任务之间的综合相似度;
若确定出的综合相似消耗权重大于第六预设阈值,则将第一查询任务和第二查询任务确定为相似查询。
例如,若第一查询任务X和第二查询任务Y之间的综合相似消耗权重大于第六预设阈值,则确定第一查询任务X和第二查询任务Y为相似查询任务;
其中,第四预设阈值、第五预设阈值、第六预设阈值可以相同,也可以不同。
其中,为了进一步提高相似查询的识别准确度,需要预先对查询任务中涉及的查询语句进行规范,在S101获取待识别的第一查询任务和第二查询任务之前,还包括:
针对每个数据查询需求,生成用于实现该数据查询需求的初始查询任务;
根据查询语句层级关系对初始查询任务包含的多个查询语句进行层级划分,确定子查询和叶子查询,其中,该叶子查询所指示的数据来源为目标数据库表;
按照预设代码规范方式对初始查询任务中的子查询和叶子查询进行代码规范处理,得到处理后的整体查询任务。
具体的,每个查询任务包含多个查询语句,需要根据各查询语句之间的层级关系,确定整体查询任务中包含的子查询和叶子查询,其中,叶子查询可以直接属于整体查询任务,即叶子查询是整体查询任务的下一级分支,例如,图4a中的叶子查询A1;叶子查询也可以间接属于整体查询任务,即叶子查询是整体查询任务中某一子查询的下一级分支,例如,图4a中的叶子查询A2或A3;
另外,叶子查询是最底层的查询任务,但子查询还可以包含其他子查询,例如,图4a中的子查询P1下还可以包含子查询P3和子查询P4,子查询P3和子查询P4下分别包含各自的叶子查询。
具体的,需要对与数据查询需求相关的所有的数据查询代码进行规范化,针对子查询的规范过程,每个子查询的主体框架具体为:
select 结果字段(明细或者聚合)
from 子查询A
join 子查询B--如果有多个子查询连接
on 关联条件--如果有关联
where 过滤条件--如果需要过滤数据
group by 聚合维度--如果有聚合
其中,当没有关联时,子查询A可以是一个表名,那么,当前子查询就是一个叶子查询(不再由其他子查询组成)。通过多个子查询逐层汇总形成查询任务,查询任务可以看成层级最高的子查询。
具体的,针对叶子查询的规范过程,每个叶子查询的主体框架具体为:
select 明细或者聚合--如果没有聚合时,后跟表A的所有明细字段
from 表A(具体数据库表名)
where 过滤条件--如果没有过滤数据,默认where后跟“1=1”条件
group by 聚合维度--如果没有聚合时,默认group by后跟表A的所有明细字段。
其中,针对叶子查询之间的相似度计算过程,上述S102分别确定第一叶子查询与第二叶子查询之间的底层相似度,具体包括:
确定待识别的多个叶子查询对,其中,每个叶子查询对包括:一个第一叶子查询和一个第二叶子查询,具体的,将第一查询任务中包含的多个第一叶子查询与第二查询任务中包含的多个第二叶子查询进行两两组合得到多个叶子查询对;
针对每个叶子查询对,确定以下至少一项单项相似度:
确定叶子查询对中表征数据来源的数据查询项之间的第一相似度;
确定叶子查询对中表征过滤条件的数据查询项之间的第二相似度;
确定叶子查询对中表征聚合维度的数据查询项之间的第三相似度;
确定叶子查询对中表征存储结构的数据查询项之间的第四相似度;
根据确定出的至少一项单项相似度,确定上述叶子查询对的底层相似度。
其中,将查询任务拆分成叶子查询后,分别计算叶子查询的4大部分单项相似度,具体的,from相似、where相似、group by相似、select相似,叶子查询的相似度计算公式为:s=s_from*(s_where+s_group+s_select),由该公式可知,若两个叶子查询所针对的源数据库表不同时,则叶子查询相似度为0,即若第一相似度s_from等于零,则将底层相似度设置为零;
(1)叶子查询对中表征数据来源的数据查询项from的相似度,即确定s_from;
具体的,如果表名相同,则相似度值s_from为1,否则,s_from为0(s_from取值为{0,1});
(2)叶子查询对中表征过滤条件的数据查询项where的相似度,即确定s_where;
具体的,将叶子查询S1的过滤条件中,where后的逻辑符号(’=’,’>’,’<’等等)左侧字段名分拆出来,组成短文本(TW_S1),以及将叶子查询S2的过滤条件中,where后的逻辑符号(’=’,’>’,’<’等等)左侧字段名分拆出来,组成短文本(TW_S2);另外,还可以将where后的所有文本都当成短文本,这样叶子查询的相似度计算更加严格,可以根据实际情况加以取舍;
再利用短文本相似计算模型确定短文本(TW_S1)与短文本(TW_S2)之间的相似度,得到S1和S2的过滤条件where相似度,即s_where(s_where的取值范围为:0~1之间的实数);
其中,短文本相似计算模型可以是TF-IDF模型、词袋模型(Bag of Words)、基于word2vec的短文本相似模型等等;
(3)叶子查询对中表征聚合维度的数据查询项group by的相似度,即s_group;
具体的,将叶子查询S1中group by的聚合字段拆分成短文本TG_S1,以及将叶子查询S2中group by的聚合字段拆分成短文本TG_S2;
再利用文本匹配查找方法将短文本TG_S1和短文本TG_S2进行匹配,得到匹配结果,如果TG_S1、TG_S2二者中,只要其中一个短文本是另一个的子字符串,则聚合维度groupby的相似度:s_group即为1,否则,s_group为0(s_group的取值也为{0,1});
其中,上述文本匹配查找方法可以是KMP寻找子字符串的匹配算法、Boyer-Moore字符串的匹配算法、Rabin-Karp指纹字符串查找算法等等匹配算法);
(4)叶子查询对中表征存储结构的数据查询项select的相似度,即s_select;
具体的,如果在select查询的结果字段中,未发生存储结构的变化,比如,分拆一行数据成多行记录等结构变化的函数),则s_select=s_group,如果发生了存储结构的变化,则如果结构变化函数名一致,s_select=1,如果结果变化函数名不一致,s_select=0。
其中,在select中发生存储结构变化的查询比较少,考虑到模型的实用性,select相似可以忽略,则叶子查询的相似度计算公式为:s=s_from*(s_where+s_group)。
其中,在确定出相似查询后,需要对相似查询进行合并处理,从而达到降低整体查询消耗的目的,如图5所示,在S103利用自叶子查询逐层向上汇总的方式并根据确定出的各叶子查询之间的底层相似度,确定第一查询任务和第二查询任务之间涉及的相似查询之后,还包括:
S104,若确定出的相似查询为子查询或叶子查询,将相似的子查询或相似的叶子查询进行合并处理,得到合并处理后的第一查询任务和第二查询任务;
例如,仍针对图4a中的第一查询任务和图4b中的第二查询任务,若第一子查询P1和第二子查询P2为相似查询,则将第一子查询P1和第二子查询P2合并为一个子查询,具体的,可以删除一个子查询,如删除第二子查询P2,此时,需要存储第一子查询P1的查询结果,并将第一子查询P1的查询结果作为第二查询任务Y的中间查询结果,即直接将第一子查询P1的查询结果输入给第二查询任务Y;
S105,若确定出的相似查询为整体查询任务,则将第一查询任务和第二查询任务合并为一个整体查询任务。
例如,仍针对图4a中的第一查询任务和图4b中的第二查询任务,若第一查询任务X和第二查询任务Y为相似查询,则将第一查询任务X和第二查询任务Y合并为一个查询任务,具体的,可以删除一个查询任务,如删除第二查询任务Y,此时,需要存储第一查询任务X的查询结果,并将第一查询任务X的查询结果输入给使用第二查询任务Y的查询结果的数据处理对象。
本说明书一个或多个实施例中的相似查询识别方法,获取待识别的第一查询任务和第二查询任务,再分别确定第一查询任务中的叶子查询与第二查询任务中的叶子查询之间的底层相似度,再利用自叶子查询逐层向上汇总的方式并根据确定出的叶子查询之间的底层相似度,确定第一查询任务和第二查询任务之间涉及的相似查询。通过采用更细粒度的相似查询识别方式,以最底层的叶子查询为基础相似度识别对象,并采用自叶子查询逐层向上汇总的方式基于叶子查询之间的相似性识别结果,来确定目标查询任务之间是否存在相似查询,得到最终的相似查询识别结果,这样能够提高相似查询的识别精度。
对应上述图1至图5描述的相似查询识别方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种相似查询识别装置,图6为本说明书一个或多个实施例提供的相似查询识别装置的第一种模块组成示意图,该装置用于执行图1至图5描述的相似查询识别方法,如图6所示,该装置包括:
查询任务获取模块601,用于获取待识别的第一查询任务和第二查询任务,其中,所述第一查询任务包括:第一子查询和第一叶子查询,所述第二查询任务包括:第二子查询和第二叶子查询;
叶子相似度确定模块602,用于分别确定所述第一叶子查询与所述第二叶子查询之间的底层相似度;
相似查询识别模块603,用于利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询。
本说明书一个或多个实施例中,通过采用更细粒度的相似查询识别方式,以最底层的叶子查询为基础相似度识别对象,并采用自叶子查询逐层向上汇总的方式基于叶子查询之间的相似性识别结果,来确定目标查询任务之间是否存在相似查询,得到最终的相似查询识别结果,这样能够提高相似查询的识别精度。
可选地,所述相似查询识别模块603,具体用于:
利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务中的子查询之间的分支相似度,和/或确定所述第一查询任务和所述第二查询任务之间的综合相似度;
根据所述底层相似度、所述分支相似度和所述综合相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询。
可选地,如图7所示,所述装置还包括:查询消耗确定模块604,用于:
确定各所述第一叶子查询的第一查询消耗以及各所述第二叶子查询的第二查询消耗;
对应的,所述相似查询识别模块603,还具体用于:
根据所述底层相似度、所述分支相似度、所述综合相似度、所述第一查询消耗和所述第二查询消耗,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询。
可选地,所述相似查询识别模块603,进一步具体用于:
确定待识别的多个子查询组合,其中,每个所述子查询组合包括:一个第一子查询和一个第二子查询,且所述第一子查询与所述第二子查询中包含的叶子查询数量相同;
针对每个所述子查询组合,在与所述子查询组合相关的多个叶子查询对中选取目标叶子查询对,其中,每个所述叶子查询对包括:一个第一叶子查询和一个第二叶子查询;
根据各所述目标叶子查询对的所述底层相似度,确定所述子查询组合的分支相似度;
将各所述子查询组合的所述分支相似度,确定为所述第一查询任务和所述第二查询任务中的子查询之间的分支相似度。
可选地,所述相似查询识别模块603,进一步具体用于:
若所述底层相似度大于第一预设阈值,则将所述底层相似度对应的叶子查询对,确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
若所述分支相似度大于第二预设阈值,则将所述分支相似度对应的子查询组合,确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
若所述综合相似度大于第三预设阈值,则将所述第一查询任务和所述第二查询任务确定为相似查询。
可选地,所述相似查询识别模块603,还进一步具体用于:
针对每个叶子查询对,根据所述叶子查询对的所述底层相似度、所述第一查询消耗和所述第二查询消耗,确定所述叶子查询对的底层相似消耗权重;
若所述底层相似消耗权重大于第四预设阈值,则将所述叶子查询对确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
针对每个子查询组合,根据所述子查询组合的所述分支相似度、与所述子查询组合相关的所述第一查询消耗和所述第二查询消耗,确定所述子查询组合的分支相似消耗权重;
若所述分支相似消耗权重大于第五预设阈值,则将所述子查询组合确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
针对整体查询任务,根据所述综合相似度、各所述第一叶子查询的所述第一查询消耗和各所述第二叶子查询的所述第二查询消耗,确定所述第一查询任务和所述第二查询任务之间的综合相似消耗权重;
若所述综合相似消耗权重大于第六预设阈值,则将所述第一查询任务和所述第二查询任务确定为相似查询。
可选地,所述装置还包括:查询任务生成模块605,用于:
针对每个数据查询需求,按照预设代码规范方式确定针对所述数据查询需求生成的整体查询任务中包含的子查询和叶子查询;
针对每个所述子查询,按照预设代码规范方式确定所述子查询中包含的至少一个叶子查询,其中,所述叶子查询所指示的数据来源为目标数据库表。
可选地,所述装置还包括:相似查询合并模块606,用于:
若所述相似查询为子查询或叶子查询,将相似的子查询或相似的叶子查询进行合并处理,得到合并处理后的所述第一查询任务和所述第二查询任务;
若所述相似查询为整体查询任务,则将所述第一查询任务和所述第二查询任务合并为一个整体查询任务。
可选地,所述叶子相似度确定模块602,具体用于:
确定待识别的多个叶子查询对,其中,每个所述叶子查询对包括:一个第一叶子查询和一个第二叶子查询;
针对每个所述叶子查询对,确定以下至少一项单项相似度:
确定所述叶子查询对中表征数据来源的数据查询项之间的第一相似度;
确定所述叶子查询对中表征过滤条件的数据查询项之间的第二相似度;
确定所述叶子查询对中表征聚合维度的数据查询项之间的第三相似度;
确定所述叶子查询对中表征存储结构的数据查询项之间的第四相似度;
根据所述至少一项单项相似度,确定所述叶子查询对的底层相似度。
本说明书一个或多个实施例中的相似查询识别装置,获取待识别的第一查询任务和第二查询任务,再分别确定第一查询任务中的叶子查询与第二查询任务中的叶子查询之间的底层相似度,再利用自叶子查询逐层向上汇总的方式并根据确定出的叶子查询之间的底层相似度,确定第一查询任务和第二查询任务之间涉及的相似查询。通过采用更细粒度的相似查询识别方式,以最底层的叶子查询为基础相似度识别对象,并采用自叶子查询逐层向上汇总的方式基于叶子查询之间的相似性识别结果,来确定目标查询任务之间是否存在相似查询,得到最终的相似查询识别结果,这样能够提高相似查询的识别精度。
需要说明的是,本说明书中关于相似查询识别装置的实施例与本说明书中关于相似查询识别方法的实施例基于同一发明构思,因此该实施例的具体实施可以参见前述对应的相似查询识别方法的实施,重复之处不再赘述。
进一步地,对应上述图1至图5所示的方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种相似查询识别设备,该设备用于执行上述的相似查询识别方法,如图8所示。
相似查询识别设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上的处理器801和存储器802,存储器802中可以存储有一个或一个以上存储应用程序或数据。其中,存储器802可以是短暂存储或持久存储。存储在存储器802的应用程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对相似查询识别设备中的一系列计算机可执行指令。更进一步地,处理器801可以设置为与存储器802通信,在相似查询识别设备上执行存储器802中的一系列计算机可执行指令。相似查询识别设备还可以包括一个或一个以上电源803,一个或一个以上有线或无线网络接口804,一个或一个以上输入输出接口805,一个或一个以上键盘806等。
在一个具体的实施例中,相似查询识别设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对相似查询识别设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:
获取待识别的第一查询任务和第二查询任务,其中,所述第一查询任务包括:第一子查询和第一叶子查询,所述第二查询任务包括:第二子查询和第二叶子查询;
分别确定所述第一叶子查询与所述第二叶子查询之间的底层相似度;
利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询。
本说明书一个或多个实施例中,通过采用更细粒度的相似查询识别方式,以最底层的叶子查询为基础相似度识别对象,并采用自叶子查询逐层向上汇总的方式基于叶子查询之间的相似性识别结果,来确定目标查询任务之间是否存在相似查询,得到最终的相似查询识别结果,这样能够提高相似查询的识别精度。
可选地,计算机可执行指令在被执行时,所述利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询,包括:
利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务中的子查询之间的分支相似度,和/或确定所述第一查询任务和所述第二查询任务之间的综合相似度;
根据所述底层相似度、所述分支相似度和所述综合相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询。
可选地,计算机可执行指令在被执行时,在根据所述底层相似度、所述分支相似度和所述综合相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询之前,还包括:
确定各所述第一叶子查询的第一查询消耗以及各所述第二叶子查询的第二查询消耗;
对应的,所述根据所述底层相似度、所述分支相似度和所述综合相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询,包括:
根据所述底层相似度、所述分支相似度、所述综合相似度、所述第一查询消耗和所述第二查询消耗,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询。
可选地,计算机可执行指令在被执行时,所述利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务中的子查询之间的分支相似度,包括:
确定待识别的多个子查询组合,其中,每个所述子查询组合包括:一个第一子查询和一个第二子查询,且所述第一子查询与所述第二子查询中包含的叶子查询数量相同;
针对每个所述子查询组合,在与所述子查询组合相关的多个叶子查询对中选取目标叶子查询对,其中,每个所述叶子查询对包括:一个第一叶子查询和一个第二叶子查询;
根据各所述目标叶子查询对的所述底层相似度,确定所述子查询组合的分支相似度;
将各所述子查询组合的所述分支相似度,确定为所述第一查询任务和所述第二查询任务中的子查询之间的分支相似度。
可选地,计算机可执行指令在被执行时,所述根据所述底层相似度、所述分支相似度和所述综合相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询,包括:
若所述底层相似度大于第一预设阈值,则将所述底层相似度对应的叶子查询对,确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
若所述分支相似度大于第二预设阈值,则将所述分支相似度对应的子查询组合,确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
若所述综合相似度大于第三预设阈值,则将所述第一查询任务和所述第二查询任务确定为相似查询。
可选地,计算机可执行指令在被执行时,所述根据所述底层相似度、所述分支相似度、所述综合相似度、所述第一查询消耗和所述第二查询消耗,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询,包括:
针对每个叶子查询对,根据所述叶子查询对的所述底层相似度、所述第一查询消耗和所述第二查询消耗,确定所述叶子查询对的底层相似消耗权重;
若所述底层相似消耗权重大于第四预设阈值,则将所述叶子查询对确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
针对每个子查询组合,根据所述子查询组合的所述分支相似度、与所述子查询组合相关的所述第一查询消耗和所述第二查询消耗,确定所述子查询组合的分支相似消耗权重;
若所述分支相似消耗权重大于第五预设阈值,则将所述子查询组合确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
针对整体查询任务,根据所述综合相似度、各所述第一叶子查询的所述第一查询消耗和各所述第二叶子查询的所述第二查询消耗,确定所述第一查询任务和所述第二查询任务之间的综合相似消耗权重;
若所述综合相似消耗权重大于第六预设阈值,则将所述第一查询任务和所述第二查询任务确定为相似查询。
可选地,计算机可执行指令在被执行时,在获取待识别的第一查询任务和第二查询任务之前,还包括:
针对每个数据查询需求,生成用于实现该数据查询需求的初始查询任务;
根据查询语句层级关系对所述初始查询任务包含的多个查询语句进行层级划分,确定子查询和叶子查询,其中,所述叶子查询所指示的数据来源为目标数据库表;
按照预设代码规范方式对所述子查询和所述叶子查询进行代码规范处理,得到处理后的整体查询任务。
可选地,计算机可执行指令在被执行时,在利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询之后,还包括:
若所述相似查询为子查询或叶子查询,将相似的子查询或相似的叶子查询进行合并处理,得到合并处理后的所述第一查询任务和所述第二查询任务;
若所述相似查询为整体查询任务,则将所述第一查询任务和所述第二查询任务合并为一个整体查询任务。
可选地,计算机可执行指令在被执行时,所述分别确定所述第一叶子查询与所述第二叶子查询之间的底层相似度,包括:
确定待识别的多个叶子查询对,其中,每个所述叶子查询对包括:一个第一叶子查询和一个第二叶子查询;
针对每个所述叶子查询对,确定以下至少一项单项相似度:
确定所述叶子查询对中表征数据来源的数据查询项之间的第一相似度;
确定所述叶子查询对中表征过滤条件的数据查询项之间的第二相似度;
确定所述叶子查询对中表征聚合维度的数据查询项之间的第三相似度;
确定所述叶子查询对中表征存储结构的数据查询项之间的第四相似度;
根据所述至少一项单项相似度,确定所述叶子查询对的底层相似度。
本说明书一个或多个实施例中的相似查询识别设备,获取待识别的第一查询任务和第二查询任务,再分别确定第一查询任务中的叶子查询与第二查询任务中的叶子查询之间的底层相似度,再利用自叶子查询逐层向上汇总的方式并根据确定出的叶子查询之间的底层相似度,确定第一查询任务和第二查询任务之间涉及的相似查询。通过采用更细粒度的相似查询识别方式,以最底层的叶子查询为基础相似度识别对象,并采用自叶子查询逐层向上汇总的方式基于叶子查询之间的相似性识别结果,来确定目标查询任务之间是否存在相似查询,得到最终的相似查询识别结果,这样能够提高相似查询的识别精度。
进一步地,对应上述图1至图5所示的方法,基于相同的技术构思,本说明书一个或多个实施例还提供了一种存储介质,用于存储计算机可执行指令,一种具体的实施例中,该存储介质可以为U盘、光盘、硬盘等,该存储介质存储的计算机可执行指令在被处理器执行时,能实现以下流程:
获取待识别的第一查询任务和第二查询任务,其中,所述第一查询任务包括:第一子查询和第一叶子查询,所述第二查询任务包括:第二子查询和第二叶子查询;
分别确定所述第一叶子查询与所述第二叶子查询之间的底层相似度;
利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询。
本说明书一个或多个实施例中,通过采用更细粒度的相似查询识别方式,以最底层的叶子查询为基础相似度识别对象,并采用自叶子查询逐层向上汇总的方式基于叶子查询之间的相似性识别结果,来确定目标查询任务之间是否存在相似查询,得到最终的相似查询识别结果,这样能够提高相似查询的识别精度。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询,包括:
利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务中的子查询之间的分支相似度,和/或确定所述第一查询任务和所述第二查询任务之间的综合相似度;
根据所述底层相似度、所述分支相似度和所述综合相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,在根据所述底层相似度、所述分支相似度和所述综合相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询之前,还包括:
确定各所述第一叶子查询的第一查询消耗以及各所述第二叶子查询的第二查询消耗;
对应的,所述根据所述底层相似度、所述分支相似度和所述综合相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询,包括:
根据所述底层相似度、所述分支相似度、所述综合相似度、所述第一查询消耗和所述第二查询消耗,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务中的子查询之间的分支相似度,包括:
确定待识别的多个子查询组合,其中,每个所述子查询组合包括:一个第一子查询和一个第二子查询,且所述第一子查询与所述第二子查询中包含的叶子查询数量相同;
针对每个所述子查询组合,在与所述子查询组合相关的多个叶子查询对中选取目标叶子查询对,其中,每个所述叶子查询对包括:一个第一叶子查询和一个第二叶子查询;
根据各所述目标叶子查询对的所述底层相似度,确定所述子查询组合的分支相似度;
将各所述子查询组合的所述分支相似度,确定为所述第一查询任务和所述第二查询任务中的子查询之间的分支相似度。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述根据所述底层相似度、所述分支相似度和所述综合相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询,包括:
若所述底层相似度大于第一预设阈值,则将所述底层相似度对应的叶子查询对,确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
若所述分支相似度大于第二预设阈值,则将所述分支相似度对应的子查询组合,确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
若所述综合相似度大于第三预设阈值,则将所述第一查询任务和所述第二查询任务确定为相似查询。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述根据所述底层相似度、所述分支相似度、所述综合相似度、所述第一查询消耗和所述第二查询消耗,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询,包括:
针对每个叶子查询对,根据所述叶子查询对的所述底层相似度、所述第一查询消耗和所述第二查询消耗,确定所述叶子查询对的底层相似消耗权重;
若所述底层相似消耗权重大于第四预设阈值,则将所述叶子查询对确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
针对每个子查询组合,根据所述子查询组合的所述分支相似度、与所述子查询组合相关的所述第一查询消耗和所述第二查询消耗,确定所述子查询组合的分支相似消耗权重;
若所述分支相似消耗权重大于第五预设阈值,则将所述子查询组合确定为所述第一查询任务和所述第二查询任务之间涉及的相似查询;
针对整体查询任务,根据所述综合相似度、各所述第一叶子查询的所述第一查询消耗和各所述第二叶子查询的所述第二查询消耗,确定所述第一查询任务和所述第二查询任务之间的综合相似消耗权重;
若所述综合相似消耗权重大于第六预设阈值,则将所述第一查询任务和所述第二查询任务确定为相似查询。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,在获取待识别的第一查询任务和第二查询任务之前,还包括:
针对每个数据查询需求,生成用于实现该数据查询需求的初始查询任务;
根据查询语句层级关系对所述初始查询任务包含的多个查询语句进行层级划分,确定子查询和叶子查询,其中,所述叶子查询所指示的数据来源为目标数据库表;
按照预设代码规范方式对所述子查询和所述叶子查询进行代码规范处理,得到处理后的整体查询任务。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,在利用自叶子查询逐层向上汇总的方式并根据各所述底层相似度,确定所述第一查询任务和所述第二查询任务之间涉及的相似查询之后,还包括:
若所述相似查询为子查询或叶子查询,将相似的子查询或相似的叶子查询进行合并处理,得到合并处理后的所述第一查询任务和所述第二查询任务;
若所述相似查询为整体查询任务,则将所述第一查询任务和所述第二查询任务合并为一个整体查询任务。
可选地,该存储介质存储的计算机可执行指令在被处理器执行时,所述分别确定所述第一叶子查询与所述第二叶子查询之间的底层相似度,包括:
确定待识别的多个叶子查询对,其中,每个所述叶子查询对包括:一个第一叶子查询和一个第二叶子查询;
针对每个所述叶子查询对,确定以下至少一项单项相似度:
确定所述叶子查询对中表征数据来源的数据查询项之间的第一相似度;
确定所述叶子查询对中表征过滤条件的数据查询项之间的第二相似度;
确定所述叶子查询对中表征聚合维度的数据查询项之间的第三相似度;
确定所述叶子查询对中表征存储结构的数据查询项之间的第四相似度;
根据所述至少一项单项相似度,确定所述叶子查询对的底层相似度。
本说明书一个或多个实施例中的存储介质存储的计算机可执行指令在被处理器执行时,获取待识别的第一查询任务和第二查询任务,再分别确定第一查询任务中的叶子查询与第二查询任务中的叶子查询之间的底层相似度,再利用自叶子查询逐层向上汇总的方式并根据确定出的叶子查询之间的底层相似度,确定第一查询任务和第二查询任务之间涉及的相似查询。通过采用更细粒度的相似查询识别方式,以最底层的叶子查询为基础相似度识别对象,并采用自叶子查询逐层向上汇总的方式基于叶子查询之间的相似性识别结果,来确定目标查询任务之间是否存在相似查询,得到最终的相似查询识别结果,这样能够提高相似查询的识别精度。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HD Cal、JHDL(Java Hardware Description Language)、Lava、Lola、My HDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书一个或多个时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书一个或多个的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书一个或多个可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个是参照根据本说明书一个或多个实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书一个或多个的实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书一个或多个的实施例而已,并不用于限制本说明书一个或多个。对于本领域技术人员来说,本说明书一个或多个可以有各种更改和变化。凡在本说明书一个或多个的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个的权利要求范围之内。