一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

检测等价语句的方法、装置、设备及计算机可读存储介质与流程

2022-03-26 02:22:38 来源:中国专利 TAG:
1.本技术涉及大数据
技术领域
:,具体而言,本技术涉及一种检测等价语句的方法、装置、电子设备及计算机可读存储介质。
背景技术
::2.随着大数据时代的来临,对海量数据的采集、计算、存储、加工变得简单,用户可以下发业务sql(structuredquerylanguage,结构化查询语言)模型给后台系统进行处理得到结果,再根据每个步骤产生的中间结果(每个sql算子产生的结果)不断地调整sql模型,直到sql模型达到自己的预期。3.但是这种模式存在以下问题:1)在sql模型的调整过程中会产生大量的可复用算子;2)相似功能所建立的sql模型之间也会有大量可复用算子。如果对每个sql模型的每个算子都进行运算、执行、落盘,不仅会导致后台系统耗费大量的io资源、存储资源、cpu资源等,还会大大降低sql模型运行效率,这种问题在大数据场景下尤为突出。技术实现要素:4.本技术提供了一种检测等价语句的方法、装置、电子设备及计算机可读存储介质,可以解决上述的问题。所述技术方案如下:5.第一方面,提供了一种检测等价语句的方法,该方法包括:6.针对待匹配的sql语句,基于至少两种预设匹配方式将所述待匹配的sql语句与至少一条预设sql语句进行递进循环匹配;所述递进循环匹配用于从所述至少一条预设sql语句中匹配出与所述待匹配的sql语句等价的目标sql语句;7.当基于所述至少两种预设匹配方式中的任一预设匹配方式匹配得到目标sql语句时,结束所述递进循环匹配;8.当进行所述递进循环匹配失败时,确定所述至少一条预设sql语句中不存在与所述待匹配的sql语句等价的目标sql语句。9.优选地,所述基于至少两种预设匹配方式将所述待匹配的sql语句与至少一条预设sql语句进行递进循环匹配,包括:10.对所述待匹配的sql语句与至少一条预设sql语句进行直接匹配;所述直接匹配包括对所述待匹配的sql语句基于预设的语句格式进行调整,并将调整后的待匹配sql语句与所述至少一条预设sql语句进行匹配;11.若所述直接匹配失败,则对所述待匹配的sql语句与至少一条预设sql语句进行等价匹配;12.若所述等价匹配失败,则对所述sql语句与至少一条预设sql语句进行包含匹配或模板匹配;所述等价匹配、所述包含匹配包括对所述待匹配的sql语句基于预设的差异模板进行差异变换,并将变换后的待匹配sql语句与所述至少一条预设sql语句进行匹配;13.若所述包含匹配失败,则对所述待匹配的sql语句与至少一条预设sql语句进行模板匹配;所述模板匹配包括检测所述待匹配的sql语句和所述至少一条预设sql语句中的任一预设sql语句是否适用于预设的等价变换模板;14.若所述模板匹配成功,则对所述待匹配的sql语句基于所述等价变换模板进行等价变换,并将等价变换后的待匹配sql语句与至少一条预设sql语句重复执行等价匹配;若所述模板匹配失败,则对所述待匹配的sql语句与至少一条预设sql语句进行自定义匹配;所述自定义匹配包括检测待查询解析树是否适用于预设的自定义变换模板;15.若所述自定义匹配成功,则对所述待匹配的sql语句与至少一条预设sql语句重复执行等价匹配,或者对所述待匹配的sql语句与至少一条预设sql语句采用所述至少两种预设匹配方式中指定的预设匹配方式进行匹配;16.若所述自定义匹配失败,则结束所述递进循环匹配。17.优选地,所述对所述待匹配的sql语句与至少一条预设sql语句进行直接匹配包括:18.基于预设的语句格式对所述待匹配的sql语句进行格式调整,得到调整后的待匹配sql语句;19.对所述调整后的待匹配sql语句进行转换,得到所述调整后的待匹配sql语句的待查询解析树;20.当所述待匹配的sql语句所查询的表为源数据表时,基于所述待查询解析树与至少一个预设sql模型各自对应的源表映射信息进行匹配;所述源表映射信息用于记录查询源数据表的sql语句的第一语句信息,所述第一语句信息以查询源数据表的sql语句的第一解析树为键;21.若存在匹配的第一解析树,则将匹配的第一解析树对应的查询源数据表的sql语句作为等价sql语句;22.若不存在匹配的第一解析树,则判定所述直接匹配失败。23.优选地,所述对所述待匹配的sql语句与至少一条预设sql语句进行直接匹配还包括:24.当所述待匹配的sql语句所查询的表为临时表时,获取所述待匹配的sql语句的父sql语句;25.当所述父sql语句存在等价sql语句时,将所述待查询解析树中所述父sql语句的语句信息替换成所述等价sql语句的语句信息;26.根据所述等价sql语句的语句信息确定出目标sql模型标识;目标sql模型包括至少一条sql语句,每条sql语句具有各自对应的解析树;27.根据所述目标sql模型标识获取目标sql模型包括的各个第二解析树;28.将所述待查询解析树与所述各个第二解析树进行匹配;29.若存在匹配的第二解析树,则将匹配的第二解析树对应的sql语句作为等价sql语句;30.若不存在匹配的第二解析树,则判定所述直接匹配失败。31.优选地,所述对所述待匹配的sql语句与至少一条预设sql语句进行等价匹配包括:32.基于所述待匹配的sql语句的查询表和查询条件计算得到所述待查询解析树与各个第二解析树的各个匹配积分;33.获取各个匹配积分中的最高匹配积分;34.当所述最高匹配积分不为预设数值时,获取所述最高匹配积分对应的目标第二解析树;35.确定出所述待查询解析树与所述目标第二解析树存在差异的第一查询条件,并使用预设的差异模板对所述第一查询条件进行变换,得到第一变换解析树;36.当所述第一变换解析树与所述目标第二解析树等价,则将所述目标第二解析树对应的sql语句作为等价sql语句;37.当变换后的待查询解析树与所述目标第二解析树不等价时,则判定所述等价匹配失败;38.当所述最高匹配积分为所述预设数值时,对所述待匹配的sql语句与至少一条预设sql语句进行模板匹配。39.优选地,所述对所述待匹配的sql语句与至少一条预设sql语句进行包含匹配包括:40.当所述待查询解析树中待查询字段为所述目标第二解析树中待查询字段的子集时,确定出所述待查询解析树与所述目标第二解析树存在差异的第二查询条件;41.使用所述差异模板对所述第二查询条件进行变换,得到第二变换解析树;42.当所述第二变换解析树中的查询条件为所述目标第二解析树中的查询条件的子集时,将所述目标第二解析树对应的sql语句作为等价sql语句;43.当所述第二变换解析树中的查询条件不为所述目标第二解析树中的查询条件的子集时,判定所述包含匹配失败。44.优选地,所述对所述待匹配的sql语句与至少一条预设sql语句进行模板匹配包括:45.检测各个第二解析树和所述待查询解析树是否适用于预设的等价变换模板;所述等价变换模板包含至少一条等价变换语句;46.当任一第二解析树与所述待查询解析树同时适用于任一条等价变换语句时,判定匹配成功,并将所述待查询解析树基于所述任一条等价变换语句进行变换,得到第三变换解析树;47.当任一第二解析树与所述待查询解析树均不适用于任一条等价变换语句时,判定匹配失败;48.所述对所述待匹配的sql语句与至少一条预设sql语句重复执行等价匹配,包括:49.基于所述第三变换解析树与所述至少一条预设sql语句重复执行等价匹配。50.优选地,对所述待匹配的sql语句与至少一条预设sql语句进行自定义匹配,包括:51.检测待查询解析树是否适用于预设的自定义变换模板;52.若是,则判定匹配成功,并基于所述自定义变换模板对所述待查询解析树进行变换,得到第四变换解析树;53.若否,则判定匹配失败,结束所述递进循环匹配;54.对所述待匹配的sql语句与至少一条预设sql语句重复执行等价匹配,或者对所述待匹配的sql语句与至少一条预设sql语句采用所述至少两种预设匹配方式中指定的预设匹配方式进行匹配,包括:55.基于所述第四变换解析树与所述至少一条预设sql语句重复执行等价匹配;56.或,57.基于所述第四变换解析树与至少一条预设sql语句采用所述至少两种预设匹配方式中指定的预设匹配方式进行匹配。58.第二方面,提供了一种检测等价语句的装置,该装置包括:59.第一处理模块,用于针对待匹配的sql语句,基于至少两种预设匹配方式将所述待匹配的sql语句与至少一条预设sql语句进行递进循环匹配;所述递进循环匹配用于从所述至少一条预设sql语句中匹配出与所述待匹配的sql语句等价的目标sql语句;60.第二处理模块,用于当基于所述至少两种预设匹配方式中的任一预设匹配方式匹配得到目标sql语句时,结束所述递进循环匹配;61.第三处理模块,用于当进行所述递进循环匹配失败时,确定所述至少一条预设sql语句中不存在与所述待匹配的sql语句等价的目标sql语句。62.优选地,所述第一处理模块包括:63.直接匹配子模块,用于对所述待匹配的sql语句与至少一条预设sql语句进行直接匹配;所述直接匹配包括对所述待匹配的sql语句基于预设的语句格式进行调整,并将调整后的待匹配sql语句与所述至少一条预设sql语句进行匹配;64.等价匹配子模块,用于若所述直接匹配失败,则对所述待匹配的sql语句与至少一条预设sql语句进行等价匹配;65.包含匹配子模块,用于若所述等价匹配失败,则对所述待匹配的sql语句与至少一条预设sql语句进行包含匹配或调用模板匹配子模块;所述等价匹配、所述包含匹配包括对所述待匹配的sql语句基于预设的差异模板进行差异变换,并将变换后的待匹配sql语句与所述至少一条预设sql语句进行匹配;66.模板匹配子模块,用于若所述包含匹配失败,则对所述待匹配的sql语句与至少一条预设sql语句进行模板匹配;所述模板匹配包括检测所述待匹配的sql语句和所述至少一条预设sql语句中的任一预设sql语句是否适用于预设的等价变换模板;67.变换子模块,用于若所述模板匹配成功,则对所述待匹配的sql语句基于所述等价变换模板进行等价变换,并针对等价变换后的待匹配sql语句与至少一条预设sql语句调用等价匹配子模块;68.自定义匹配子模块,用于若所述模板匹配失败,则对所述待匹配的sql语句与至少一条预设sql语句进行自定义匹配;所述自定义匹配包括检测待查询解析树是否适用于预设的自定义变换模板;69.若所述自定义匹配成功,则针对所述待匹配的sql语句与至少一条预设sql语句调用等价匹配子模块,或者针对所述待匹配的sql语句与至少一条预设sql语句调用所述直接匹配子模块、等价匹配子模块、包含匹配子模块、模板匹配子模板中指定的匹配子模块进行匹配;70.结束子模块,用于若所述自定义匹配失败,则结束所述递进循环匹配。71.优选地,所述直接匹配子模块包括:72.格式调整单元,用于基于预设的语句格式对所述待匹配的sql语句进行格式调整,得到调整后的待匹配sql语句;73.转换单元,用于对所述调整后的待匹配sql语句进行转换,得到所述调整后的待匹配sql语句的待查询解析树;74.第一匹配单元,用于当所述待匹配的sql语句所查询的表为源数据表时,基于所述待查询解析树与至少一个预设sql模型各自对应的源表映射信息进行匹配;所述源表映射信息用于记录查询源数据表的sql语句的第一语句信息,所述第一语句信息以查询源数据表的sql语句的第一解析树为键;75.第一确定单元,用于若存在匹配的第一解析树,则将匹配的第一解析树对应的查询源数据表的sql语句作为等价sql语句;76.所述第一确定单元,还用于若不存在匹配的第一解析树,则判定所述直接匹配失败。77.优选地,所述直接匹配子模块还包括:78.获取单元,用于当所述待匹配的sql语句所查询的表为临时表时,获取所述待匹配的sql语句的父sql语句;79.替换单元,用于当所述父sql语句存在等价sql语句时,将所述待查询解析树中所述父sql语句的语句信息替换成所述等价sql语句的语句信息;80.所述第一确定单元,还用于根据所述等价sql语句的语句信息确定出目标sql模型标识;目标sql模型包括至少一条sql语句,每条sql语句具有各自对应的解析树;81.所述获取单元,还用于根据所述目标sql模型标识获取目标sql模型包括的各个第二解析树;82.第二匹配单元,用于将所述待查询解析树与所述各个第二解析树进行匹配;83.所述第一确定单元,还用于若存在匹配的第二解析树,则将匹配的第二解析树对应的sql语句作为等价sql语句;84.所述第一确定单元,还用于若不存在匹配的第二解析树,则判定所述直接匹配失败。85.优选地,所述等价匹配子模块包括:86.计算单元,用于基于所述待匹配的sql语句的查询表和查询条件计算得到所述待查询解析树与各个第二解析树的各个匹配积分;87.最高匹配积分获取单元,用于获取各个匹配积分中的最高匹配积分;88.目标第二解析树获取单元,用于当所述最高匹配积分不为预设数值时,获取所述最高匹配积分对应的目标第二解析树;89.第一查询条件确定单元,用于确定出所述待查询解析树与所述目标第二解析树存在差异的第一查询条件;90.第一变换解析树单元,用于使用预设的差异模板对所述第一查询条件进行变换,得到第一变换解析树;91.第二确定单元,用于当所述第一变换解析树与所述目标第二解析树等价,则将所述目标第二解析树对应的sql语句作为等价sql语句;92.所述第二确定单元,还用于当变换后的待查询解析树与所述目标第二解析树不等价时,则判定所述等价匹配失败;93.所述第二确定单元,还用于当所述最高匹配积分为所述预设数值时,对所述待匹配的sql语句与至少一条预设sql语句进行模板匹配。94.优选地,所述包含匹配子模块包括:95.第二查询条件确定单元,用于当所述待查询解析树中待查询字段为所述目标第二解析树中待查询字段的子集时,确定出所述待查询解析树与所述目标第二解析树存在差异的第二查询条件;96.第二变换解析树单元,用于使用所述差异模板对所述第二查询条件进行变换,得到第二变换解析树;97.第三确定子模块,用于当所述第二变换解析树中的查询条件为所述目标第二解析树中的查询条件的子集时,将所述目标第二解析树对应的sql语句作为等价sql语句;98.所述第三确定子模块,还用于当所述第二变换解析树中的查询条件不为所述目标第二解析树中的查询条件的子集时,判定所述包含匹配失败。99.优选地,所述模板匹配子模块包括:100.第一检测单元,用于检测各个第二解析树和所述待查询解析树是否适用于预设的等价变换模板;所述等价变换模板包含至少一条等价变换语句;101.第四确定单元,用于当任一第二解析树与所述待查询解析树同时适用于任一条等价变换语句时,判定匹配成功;102.第三变换解析树单元,用于将所述待查询解析树基于所述任一条等价变换语句进行变换,得到第三变换解析树;103.所述第四确定单元,还用于当任一第二解析树与所述待查询解析树均不适用于任一条等价变换语句时,判定匹配失败;104.所述针对所述待匹配的sql语句与至少一条预设sql语句调用等价匹配子模块,包括:105.基于所述第三变换解析树与所述至少一条预设sql语句调用等价匹配子模块。106.优选地,自定义匹配子模块包括:107.第二检测单元,用于检测待查询解析树是否适用于预设的自定义变换模板;108.第四变换解析树单元,用于若待查询解析树适用于预设的自定义变换模板,则判定匹配成功,并基于所述自定义变换模板对所述待查询解析树进行变换,得到第四变换解析树;109.第五确定单元,用于若待查询解析树不适用于预设的自定义变换模板,则判定匹配失败,结束所述递进循环匹配;110.针对所述待匹配的sql语句与至少一条预设sql语句调用等价匹配子模块,或者针对所述待匹配的sql语句与至少一条预设sql语句调用所述直接匹配子模块、等价匹配子模块、包含匹配子模块、模板匹配子模板中指定的匹配子模块进行匹配,包括:111.基于所述第四变换解析树与所述至少一条预设sql语句调用等价匹配子模块;112.或,113.基于所述第四变换解析树与至少一条预设sql语句调用所述直接匹配子模块、等价匹配子模块、包含匹配子模块、模板匹配子模板中指定的匹配子模块进行匹配。114.第三方面,提供了一种电子设备,该电子设备包括:115.处理器、存储器和总线;116.所述总线,用于连接所述处理器和所述存储器;117.所述存储器,用于存储操作指令;118.所述处理器,用于通过调用所述操作指令,可执行指令使处理器执行如本技术的第一方面所示的检测等价语句的方法对应的操作。119.第四方面,提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现本技术第一方面所示的检测等价语句的方法。120.本技术提供的技术方案带来的有益效果是:121.在本发明实施例中,针对待匹配的sql语句,基于至少两种预设匹配方式将该待匹配的sql语句与至少一条预设sql语句进行递进循环匹配,该递进循环匹配用于从该至少一条预设sql语句中匹配出与该待匹配的sql语句等价的目标sql语句。在递进循环匹配的过程中,如果基于该至少两种预设匹配方式中的任一预设匹配方式匹配得到了等价的目标sql语句,那么就结束递进循环匹配,并对该目标sql语句进行执行结果的复用;如果通过所有的预设匹配方式都没有匹配得到等价的目标sql语句,那么就可以确定在该至少一条预设sql语句中,不存在与该待匹配的sql语句等价的sql语句,并执行该待匹配的sql语句。这样,在sql模型调度时,在执行sql模型中的任一sql语句时,可以通过上述方法先确定出系统中是否存在等价的目标sql语句,如果存在,则直接对目标sql语句进行执行结果的复用,避免了由于执行该任一sql语句得到相同的执行结果导致的重复执行等操作,减少了由于重复执行等操作导致的大量的资源消耗,同时,也有利于提高sql模型的运行效率。附图说明122.为了更清楚地说明本技术实施例中的技术方案,下面将对本技术实施例描述中所需要使用的附图作简单地介绍。123.图1为本技术一个实施例提供的一种检测等价语句的方法的流程示意图;124.图2为本技术递进循环匹配的整体流程示意图;125.图3为本技术中直接匹配的流程示意图一;126.图4为本技术中直接匹配的流程示意图二;127.图5为本技术中等价匹配的流程示意图一;128.图6为本技术中等价匹配的流程示意图二;129.图7为本技术中包含匹配的流程示意图一;130.图8为本技术中包含匹配的流程示意图二;131.图9为本技术中模板匹配的流程示意图一;132.图10为本技术中模板匹配的流程示意图二;133.图11为本技术中自定义匹配的流程示意图一;134.图12为本技术中自定义匹配的流程示意图二;135.图13为应用本技术的sql算子的调度方法的整体流程示意图;136.图14为本技术又一实施例提供的一种检测等价语句的装置的结构示意图;137.图15为本技术又一实施例提供的一种检测等价语句的电子设备的结构示意图。具体实施方式138.下面详细描述本技术的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本技术,而不能解释为对本发明的限制。139.本
技术领域
:技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本技术的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。140.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。141.首先对本技术涉及的几个名词进行介绍和解释:142.sql:structuredquerylanguage,结构化查询语言。143.sql模型:一组由sql算子组成的集合,按顺序应用在相应系统中,可实现某种功能。144.sql算子:使用sql语言编写的查询语句,是组成sql模型的元素。在本技术中,如无特殊说明,则一条sql算子表示一条sql语句。145.源数据表:系统中存在的数据表,而不是通过执行sql模型运算产生的表。146.临时表:通过执行sql算子得到的结果集,临时表表名中含有sql模型的名称。147.解析树:通过对sql算子转换得到,json结构,包含sql算子、等价算子的ast(abstractsyntaxtree,抽象语法树)结构,具体结构如下:[0148][0149]源表映射信息:若某个sql算子是对源数据表进行查询,则将该sql算子转化为解析树,然后以解析树为key,以该算子对应的临时表表名为value记录在sourcetablemap中。源表映射信息记为sourcetablemap,此map用于后续判断模型之间的相似度。[0150]模型映射信息:记录sql模型中所有sql算子的语句信息,语句信息包括sql算子对应的临时表表名和转化得到的解析树。模型映射信息记为modelmap,此map为嵌套map,用于后续判断两个sql算子是否等价。[0151]其中,modelmap包括两层:[0152]外层map:key为sql模型的模型标识,value为内层map,用于存储该sql模型中所有sql算子的语句信息;[0153]内层map:针对sql模型中的任一sql算子,以sql算子对应的临时表表名为key,以sql算子转化得到的解析树为value进行记录。[0154]indexsqltree:待进行等价匹配的sql算子的解析树。[0155]indexsqlname:待进行等价匹配的sql算子对应的临时表表名。[0156]进一步,在本技术中,在递进循环匹配之前,针对包含待匹配的sql语句的sql模型(为方便描述,在本技术中,该sql模型称之为“待匹配的sql模型”),可以先生成该sql模型的sourcetablemap和modelmap,然后将该sql模型的第一条sql语句对应的解析树存储至sourcetablemap中,再在modelmap中新建外层map和内层map,并将该sql模型的模型标识存储在外层map中,将该模型中的每一条sql语句对应的解析树存储在内层map中。[0157]等价:当待执行的sql算子的执行结果与任一已执行的sql算子的执行结果是相同的,则待执行的sql算子与已执行的sql算子是等价的。[0158]本技术提供的检测等价语句的方法、装置、电子设备和计算机可读存储介质,旨在解决现有技术的如上技术问题。[0159]下面以具体地实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。[0160]在本发明实施例中提供了一种检测等价语句的方法,如图1所示,该方法包括:[0161]步骤s101,针对待匹配的sql语句,基于至少两种预设匹配方式将待匹配的sql语句与至少一条预设sql语句进行递进循环匹配;递进循环匹配用于从至少一条预设sql语句中匹配出与待匹配的sql语句等价的目标sql语句;[0162]其中,待匹配的sql语句可以是待执行的sql模型中的任一sql语句;预设sql语句可以是已执行的sql模型中的任一sql语句,已执行的sql模型可以是系统中已执行完成的sql模型中的任一个。也就是说,在本发明实施例中,待匹配的sql语句可以与系统中已执行的任一个sql模型中的任一sql语句进行匹配。[0163]具体而言,在本发明实施例中,可以预设多种匹配方式,当待匹配的sql模型输入到系统中后,可以将待匹配的sql模型中的任一sql语句采用预设的多种匹配方式与至少一条预设sql语句进行递进循环匹配。递进循环匹配用于从至少一条预设sql语句中匹配出与待匹配的sql语句等价的目标sql语句。[0164]其中,预设匹配方式包括:[0165]直接匹配:适用于两条sql语句几乎完全相同,只有空格、换行等非必要字符的、不影响sql语法的微小差异的情况。[0166]等价匹配:适用于两条sql语句所查询的表相同、查询字段相同,查询条件通过差异模板变换后也完全相同的情况。[0167]包含匹配:适用于两条sql语句所查询的表相同,当前sql语句的查询字段、查询条件经过该差异模板变换后是系统已执行的某个sql语句的查询字段、查询条件子集的情况;比如,待查询的sql语句为a,a的查询字段为字段1,查询条件为条件1,某条已执行的sql语句b的查询字段为字段2,查询条件为条件2,对字段1、条件1经过差异模板变换后得到字段1',条件1',当字段1'是字段2的子集、条件1'是条件2的子集时,那么a和b适用包含匹配。[0168]模板匹配:适用于两条sql语句意义完全相同、写法不同,但是两条sql语句可以适用于同一等价交换模板进行变换的情况。[0169]自定义匹配:适用于当前算子可以适用于用户自定义的变换模板的情况。[0170]在本发明一种优选实施例中,基于至少两种预设匹配方式将待匹配的sql语句与至少一条预设sql语句进行递进循环匹配,包括:[0171]对待匹配的sql语句与至少一条预设sql语句进行直接匹配;直接匹配包括对待匹配的sql语句基于预设的语句格式进行调整,并将调整后的待匹配sql语句与至少一条预设sql语句进行匹配;[0172]若直接匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行等价匹配;[0173]若等价匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行包含匹配或模板匹配;等价匹配、包含匹配包括对待匹配的sql语句基于预设的差异模板进行差异变换,并将变换后的待匹配sql语句与至少一条预设sql语句进行匹配;[0174]若包含匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行模板匹配;模板匹配为检测sql语句和至少一条预设sql语句中的任一预设sql语句是否适用于预设的等价变换模板;[0175]若模板匹配成功,则对待匹配的sql语句基于等价变换模板进行等价变换,并将等价变换后的待匹配sql语句与至少一条预设sql语句重复执行等价匹配;若模板匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行自定义匹配;自定义匹配为检测待查询解析树是否适用于预设的自定义变换模板;[0176]若自定义匹配成功,则对待匹配的sql语句与至少一条预设sql语句重复执行等价匹配,或者对待匹配的sql语句与至少一条预设sql语句采用至少两种预设匹配方式中指定的预设匹配方式进行匹配;[0177]若自定义匹配失败,则结束递进循环匹配。[0178]具体而言,如图2所示,针对任一待匹配的sql语句,先进行直接匹配。在每个sql模型中,第一条sql语句都是用来查询源数据表的,从第二条sql语句开始都是用来查询临时表的,所以,在直接匹配的时候,针对查询源数据表的sql语句与查询临时表的sql语句的匹配方式是不相同的。[0179]应用于本发明实施例,在直接匹配时,先检测待匹配的sql语句查询的表是否为源数据表,或者存在等价sql语句,二者不会同时满足。如果查询的表为源数据表,则对待匹配的sql语句基于预设格式进行调整,并将调整后的sql语句与至少一条预设sql语句进行匹配;如果不存在等价sql语句(具体方式在下文实施例中详述),则结束递进循环匹配;其中,调整和匹配的具体方式在下文实施例中详述。[0180]如果直接匹配成功,则结束递进循环匹配;如果直接匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行等价匹配。等价匹配为对待查询的sql语句基于预设差异模板进行差异变换,并将变换后的待匹配sql语句与至少一条预设sql语句进行匹配;其中,差异变换和匹配的具体方式在下文实施例中详述。[0181]如果等价匹配成功,则结束递进循环匹配;如果等价匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行包含匹配或模板匹配。其中,等价匹配失败包括适用预设差异模板失败,以及适用预设差异模板成功后匹配失败;如果是适用预设差异模板失败,则对待匹配的sql语句与至少一条预设sql语句进行模板匹配;如果是适用预设差异模板成功后匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行包含匹配。[0182]包含匹配包括对待匹配的sql语句基于预设差异模板进行差异变换,并将变换后的待匹配sql语句与至少一条预设sql语句进行匹配;其中,差异变换和匹配的具体方式在下文实施例中详述。[0183]如果包含匹配成功,则结束递进循环匹配;如果包含匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行模板匹配。模板匹配包括检测待匹配的sql语句和至少一条预设sql语句中的任一预设sql语句是否适用于预设的等价变换模板;其中,检测的具体方式在下文实施例中详述。[0184]如果模板匹配成功,则对待匹配的sql语句基于等价变换模板进行等价变换,并将等价变换后的待匹配sql语句与至少一条预设sql语句重复执行等价匹配;若模板匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行自定义匹配。自定义匹配包括检测待查询解析树是否适用于预设的自定义变换模板;其中,等价变换和检测的具体方式在下文实施例中详述。[0185]若自定义匹配成功,则对待匹配的sql语句与至少一条预设sql语句重复执行等价匹配,或者对待匹配的sql语句与至少一条预设sql语句采用至少两种预设匹配方式中指定的预设匹配方式进行匹配。[0186]若自定义匹配失败,则结束递进循环匹配。[0187]步骤s102,当基于至少两种预设匹配方式中的任一预设匹配方式匹配得到目标sql语句时,结束递进循环匹配;[0188]具体而言,在基于至少两种预设匹配方式将待匹配的sql语句与至少一条预设sql语句进行递进循环匹配的过程中,当通过任一预设匹配方式匹配得到目标sql语句时,即可结束该递进循环匹配。[0189]步骤s103,当进行递进循环匹配失败时,确定至少一条预设sql语句中不存在与待匹配的sql语句等价的目标sql语句。[0190]具体而言,在基于至少两种预设匹配方式将待匹配的sql语句与至少一条预设sql语句进行递进循环匹配的过程中,如果通过所有的预设匹配方式也没有匹配得到目标sql语句时,即可确定至少一条预设sql语句中不存在与待匹配的sql语句等价的目标sql语句。[0191]在本发明实施例中,针对待匹配的sql语句,基于至少两种预设匹配方式将该待匹配的sql语句与至少一条预设sql语句进行递进循环匹配,该递进循环匹配用于从该至少一条预设sql语句中匹配出与该待匹配的sql语句等价的目标sql语句。在递进循环匹配的过程中,如果基于该至少两种预设匹配方式中的任一预设匹配方式匹配得到了等价的目标sql语句,那么就结束递进循环匹配,并对该目标sql语句进行执行结果的复用;如果通过所有的预设匹配方式都没有匹配得到等价的目标sql语句,那么就可以确定在该至少一条预设sql语句中,不存在与该待匹配的sql语句等价的sql语句,并执行该待匹配的sql语句。这样,在sql模型调度时,在执行sql模型中的任一sql语句时,可以通过上述方法先确定出系统中是否存在等价的目标sql语句,如果存在,则直接对目标sql语句进行执行结果的复用,避免了由于执行该任一sql语句得到相同的执行结果导致的重复执行等操作,减少了由于重复执行等操作导致的大量的资源消耗,同时,有利于提高sql模型的运行效率。[0192]在本发明实施例中提供了直接匹配的具体实现方式,如图3所示,对待匹配的sql语句与至少一条预设sql语句进行直接匹配包括:[0193]步骤s301,基于预设的语句格式对待匹配的sql语句进行格式调整,得到调整后的待匹配sql语句;[0194]针对待匹配的sql语句,可以先基于预设的语句格式对该待匹配的sql语句进行格式调整,得到调整后的待匹配sql语句。其中,预设的语句格式可以是sql语句的统一格式,比如,预设的语句格式为select全字段,那么当待匹配的sql语句为select*或select1时,都可以改成select全字段。[0195]进一步,格式调整还可以删除待匹配的sql语句中非必要的字符,包括删除待匹配的sql语句中非必要的空格、换行符等。比如,将“select字段1from表a”中多余的空格删除,得到“select字段1from表a”。[0196]当然,在实际应用中,对待匹配的sql语句的格式进行调整的其它方式也是适用于本发明实施例的,在实际应用中可以根据实际需求进行设置,本发明实施例对此不作限制。[0197]步骤s302,对调整后的待匹配sql语句进行转换,得到调整后的待匹配sql语句的待查询解析树;[0198]在得到调整后的待匹配sql语句后,即可对调整后的待匹配sql语句进行转换,得到调整后的待匹配sql语句对应的待查询解析树indexsqltree,indexsqltree中包括该调整后的待匹配sql语句对应的临时表表名indexsqlname。[0199]步骤s303,当待匹配的sql语句所查询的表为源数据表时,基于待查询解析树与至少一个预设sql模型各自对应的源表映射信息进行匹配;源表映射信息用于记录查询源数据表的sql语句的第一语句信息,第一语句信息以查询源数据表的sql语句的第一解析树为键;[0200]在对indexsqltree进行匹配时,先检测indexsqltree所查询的表(记为fathertablename)是否为源数据表。如果是,则将indexsqltree与已执行的各个sql模型各自对应的sourcetablemap进行匹配;如果否(fathertablename为临时表),则执行步骤s306。[0201]步骤s304,若存在匹配的第一解析树,则将匹配的第一解析树对应的查询源数据表的sql语句作为等价sql语句;[0202]如果indexsqltree与各个sourcetablemap匹配时存在匹配的第一解析树targetsqlname,那么将targetsqlname对应的预设sql语句(也就是targetsqlname对应的查询源数据表的sql语句)作为调整后的sql语句的等价sql语句。[0203]然后可以对等价sql语句进行执行结果的复用,将等价sql语句的语句信息存储到待匹配的sql模型的modelmap中,即,将indexsqltree中的值equalityope修改为targetsqlname,构造map《indexsqlname,indexsqltree》存入待匹配的sql模型的modelmap中,结束递进循环匹配。[0204]步骤s305,若不存在匹配的第一解析树,则判定直接匹配失败;[0205]如果indexsqltree与各个sourcetablemap匹配时不存在匹配的解析树,那么可判定直接匹配失败,从而开始对待匹配的sql语句与至少一条预设sql语句进行等价匹配。[0206]步骤s306,当待匹配的sql语句所查询的表为临时表时,获取待匹配的sql语句的父sql语句;[0207]当indexsqltree所查询的表fathertablename为临时表时,将indexsqltree与已执行的各个sql模型各自对应的modlemap进行匹配得到匹配的解析树,然后检测匹配的解析树中的equalityope的值(记为equalitymode)是否为null,如果是,则判定待匹配的sql语句不存在等价sql语句,此时将待匹配的sql语句对应的临时表表名和解析树组成map《indexsqlname,indexsqltree》存入待匹配的sql模型的modelmap中,结束递进循环匹配。[0208]如果不为null,则获取待匹配的sql语句的父sql语句,以及父sql语句的解析树fathertablesqltree。[0209]步骤s307,当父sql语句存在等价sql语句时,将待查询解析树中父sql语句的语句信息替换成等价sql语句的语句信息;[0210]如果fathertablesqltree中的equalityope的值不为null,那么表示父sql语句存在等价sql语句,此时将待查询解析树中父sql语句的语句信息替换成等价sql语句的语句信息,即,将indexsqltree中的sqloperator的fathertablename替换成fathertablesqltree的equalityope的值,得到替换后的equalitymode。[0211]步骤s308,根据等价sql语句的语句信息确定出目标sql模型标识;目标sql模型包括至少一条sql语句,每条sql语句具有各自对应的解析树;[0212]根据替换后的equalitymode确定出与待匹配的sql模型近似的目标sql模型(已执行的sql模型)。其中,判断两个sql模型是否近似可以基于两个sql模型的第一条sql语句所查询的表fathertablename是否相同,如果相同,则两个sql模型近似。[0213]步骤s309,根据目标sql模型标识获取目标sql模型包括的各个第二解析树;[0214]确定出目标sql模型后,即可根据目标sql模型标识(记为modelid)在目标sql模型的modelmap中匹配到其所有目标sql语句的语句信息(记为targetmodelopers),其中,各个语句信息包括各个目标sql语句各自对应的第二解析树。[0215]步骤s3010,将待查询解析树与各个第二解析树进行匹配;[0216]获取到targetmodelopers之后,即可将indexsqltree在targetmodelopers中进行匹配,也就是将indexsqltree与各个第二解析树进行匹配。[0217]步骤s3011,若存在匹配的第二解析树,则将匹配的第二解析树对应的sql语句作为等价sql语句;[0218]若存在与indexsqltree匹配的第二解析树,则将匹配的第二解析树对应的sql语句作为待匹配的sql语句等价的sql语句,然后可以对等价sql语句进行执行结果的复用,将等价sql语句的语句信息存储到待匹配的sql模型的modelmap中,即,将indexsqltree中的值equalityope修改为targetsqlname,构造map《indexsqlname,indexsqltree》存入待匹配的sql模型的modelmap中,结束递进循环匹配。[0219]步骤s3012,若不存在匹配的第二解析树,则判定直接匹配失败。[0220]如果indexsqltree与各个第二解析树匹配时不存在匹配的第二解析树,那么可判定直接匹配失败,从而开始对待匹配的sql语句与至少一条预设sql语句进行等价匹配。[0221]进一步,为方便理解,本发明实施例还提供了直接匹配的匹配流程图,如图4所示,具体的匹配流程可参照步骤s301~步骤s3012,在此就不赘述了。[0222]本发明实施例适用于两条sql语句几乎完全相同,只有空格、换行等非必要字符的、不影响sql语法的微小差异的情况,比如:[0223]indexsql:select字段1from表a;[0224]targetsql:select字段1from表a。[0225]在本发明实施例中提供了等价匹配的具体实现方式,如图5所示,对待匹配的sql语句与至少一条预设sql语句进行等价匹配包括:[0226]步骤s501,基于sql语句的查询表和查询条件计算得到待查询解析树与各个第二解析树的各个匹配积分;[0227]在直接匹配时,确定出了目标sql模型和各个第二解析树,为方便描述,在本技术中,将目标sql模型的sourcetablemap和包含各个第二解析树的targetmodelopers集合记为目标map。[0228]在等价匹配时,可以先获取直接匹配得到的目标map,然后遍历目标map中的各个第二解析树,然后计算indexsqltree与各个第二解析树的匹配积分,计算方式如下:[0229]1)查询表(targettable)不相等积分为0,退出匹配积分计算;[0230]2)查询条件(conditions)有一个相等,积1分,依此累加,保存计算得分。[0231]步骤s502,获取各个匹配积分中的最高匹配积分;[0232]计算得到indexsqltree与各个第二解析树的匹配积分之后,获取各个匹配积分中的最高匹配积分。[0233]步骤s503,当最高匹配积分不为预设数值时,获取最高匹配积分对应的目标第二解析树;[0234]其中,预设数值可以设置为0。具体地,当最高匹配积分不为0时,获取最高匹配积分对应的第二解析树作为目标第二解析树targetsqltree。[0235]步骤s504,确定出待查询解析树与目标第二解析树存在差异的第一查询条件,并使用预设的差异模板对第一查询条件进行变换,得到第一变换解析树;[0236]将indexsqltree与targetsqltree进行比较,得到indexsqltree与targetsqltree存在差异的第一查询条件,然后使用预设的差异模板对indexsqltree中的该第一查询条件进行变换,使之与targetsqltree保持一致,从而得到变换后的第一变换解析树。[0237]比如,“wherealexabetween1and20”可变换成“wherealexa》1andalexa《20”。[0238]步骤s505,当第一变换解析树与目标第二解析树等价,则将目标第二解析树对应的sql语句作为等价sql语句;[0239]如果第一变换解析树与targetsqltree等价(判断两个json是不是相等),那么将targetsqltree对应的sql语句作为待匹配的sql语句的等价sql语句,然后可以对等价sql语句进行执行结果的复用,将等价sql语句的语句信息存储到待匹配的sql模型的modelmap中,即,将indexsqltree中的值equalityope修改为targetsqlname,构造map《indexsqlname,indexsqltree》存入待匹配的sql模型的modelmap中,结束递进循环匹配。[0240]步骤s506,当变换后的待查询解析树与目标第二解析树不等价时,则判定等价匹配失败;[0241]如果第一变换解析树与targetsqltree不等价,那么可判定等价匹配失败,从而开始对待匹配的sql语句与至少一条预设sql语句进行包含匹配。[0242]步骤s507,当最高匹配积分为预设数值时,对待匹配的sql语句与至少一条预设sql语句进行模板匹配。[0243]当步骤s502获取到的最高匹配积分为0时,判定等价匹配失败,开始对待匹配的sql语句与至少一条预设sql语句进行模板匹配。[0244]进一步,为方便理解,本发明实施例还提供了等价匹配的匹配流程图,如图6所示,具体的匹配流程可参照步骤s501~步骤s507,在此就不赘述了。[0245]本发明实施例适用于两条sql语句所查询的表相同、查询字段相同,查询条件通过差异模板变换后也完全相同的情况,比如:[0246]indexsql:select表a.字段1,表a.字段2from表ajoin表bwhere表a.字段1=表b.字段1and字段1between1and20;[0247]targetsql:select表a.字段1,表a.字段2from表ajoin表bwhere表a.字段1=表b.字段1and字段1》1and字段1《20。[0248]进一步,本发明实施例中的差异模板包括至少一条差异变换语句。比如,差异模板可以包括:[0249]语句1)别名替换规则:将待匹配sql语句中的别名替换成统一规定格式的别名,避免别名不同对sql等价判断造成影响;[0250]语句2)between替换规则:where字段betweenxxxandxxx《==》where字段》xxxand字段《xxx;[0251]语句3)notbetween规则:where字段notbetweenxxxandxxx《==》where字段《xxxand字段》xxx;[0252]语句4)in替换规则:where字段in('xxx','yyy')《==》where字段='xxx'or字段='xxx';[0253]语句5)重排序规则:待匹配sql语句拥有多个条件,则以目标sql语句条件的顺序为模板,为其条件重排序,避免条件乱序对sql语句等价判断造成影响。[0254]当然,上述模板仅仅只是举例说明,在实际应用中,用户可以根据实际需求对差异模板进行修改,本发明实施例对此不作限制。[0255]在本发明实施例中提供了包含匹配的具体实现方式,如图7所示,对sql语句与至少一条预设sql语句进行包含匹配包括:[0256]步骤s701,当待查询解析树中待查询字段为目标第二解析树中待查询字段的子集时,确定出待查询解析树与目标第二解析树存在差异的第二查询条件;[0257]在包含匹配时,可以先获取目标map和等价匹配得到的targetsqltree,然后检测indexsqltree的targetfields是否是targetsqltree的targetfields的子集,如果是,则将indexsqltree与targetsqltree进行比较,得到indexsqltree与targetsqltree存在差异的第二查询条件;如果否,则判定包含匹配失败,开始对sql语句与至少一条预设sql语句进行模板匹配。[0258]步骤s702,使用差异模板对第二查询条件进行变换,得到第二变换解析树;[0259]使用预设的差异模板对indexsqltree中的该第二查询条件进行变换,使之与targetsqltree保持一致,从而得到变换后的第一变换解析树。[0260]步骤s703,当第二变换解析树中的查询条件为目标第二解析树中的查询条件的子集时,将目标第二解析树对应的sql语句作为等价sql语句;[0261]然后再判断indexsqltree中的查询条件(condition)是否为targetsqltree的子集,如果是,比如,wherealexa》1为wherealexa》2的子集,那么将目标第二解析树对应的sql语句作为待匹配的sql语句的等价sql语句,然后可以建立indexsqltree与targetsqltree之间的关系,比如:[0262]targetsqltree:selecttb1.filed1,tb1.filed2fromtb1jointb2wheretb1.filed1=tb2.filed1andtb1.filed2》1;[0263]indexsqltree:selecttb1.filed1fromtb1jointb2wheretb1.filed1=tb2.filed1andtb1.filed2》2;[0264]则建立关系后indexsqltree对应的待匹配的sql语句变换为:changesql:selectfiled1fromtargetsqlnamewherefiled1》2。[0265]再对等价sql语句进行执行结果的复用,将等价sql语句的语句信息存储到待匹配的sql模型的modelmap中,即,将indexsqltree中的值equalityope修改为changesql,构造map《indexsqlname,indexsqltree》存入待匹配的sql模型的modelmap中,结束递进循环匹配。[0266]步骤s704,当第二变换解析树中的查询条件不为目标第二解析树中的查询条件的子集时,判定包含匹配失败。[0267]如果indexsqltree中的查询条件(condition)不为targetsqltree的子集,那么判定包含匹配失败,开始对sql语句与至少一条预设sql语句进行模板匹配。[0268]进一步,为方便理解,本发明实施例还提供了包含匹配的匹配流程图,如图8所示,具体的匹配流程可参照步骤s701~步骤s704,在此就不赘述了。[0269]本发明实施例适用于两条sql语句所查询的表相同,当前sql语句的查询字段、查询条件经过该差异模板变换后是系统已执行的某个sql语句的查询字段、查询条件子集的情况,比如:[0270]indexsql:select表a.字段1,from表ajoin表bwhere表a.字段1=表b.字段1and字段1between1and18;[0271]targetsql:select表a.字段1,表a.字段2from表ajoin表bwhere表a.字段1=表b.字段1and字段1》1and字段1《20。[0272]进一步,本发明实施例中的差异模板与等价匹配的差异模板相同,在此就不赘述了。[0273]在本发明实施例中提供了模板匹配的具体实现方式,如图9所示,对待匹配的sql语句与至少一条预设sql语句进行模板匹配包括:[0274]步骤s901,检测各个第二解析树和待查询解析树是否适用于预设的等价变换模板;等价变换模板包含至少一条等价变换语句;[0275]在模板匹配时,可以先获取目标map,然后遍历目标map中的各个第二解析树,并检测各个第二解析树和待查询解析树indexsqltree是否适用于预设的等价变换模板中的任一条等价变换语句;其中,等价变换模板包含至少一条预设的等价变换语句。[0276]步骤s902,当任一第二解析树与待查询解析树同时适用于任一条等价变换语句时,判定匹配成功,并将待查询解析树基于任一条等价变换语句进行变换,得到第三变换解析树;[0277]当检测到indexsqltree与任一第二解析树同时适用于任一等价变换语句时,判定匹配成功,将基于该任一等价变换语句对indexsqltree进行变换,得到变换后的第三变换解析树。其中,变换可以包括:[0278]1)将sqloperator改成变换过的sql语句;[0279]2)根据变换过的sql语句得到新的ast,并使用新ast替换indexsqltree的旧ast。[0280]在本发明一种优选实施例中,对待匹配的sql语句与至少一条预设sql语句重复执行等价匹配,包括:[0281]基于第三变换解析树与至少一条预设sql语句重复执行等价匹配。[0282]具体而言,基于第三变换解析树和目标map与至少一条预设sql语句重复执行等价匹配,并继续执行后续的递进循环匹配。[0283]步骤s903,当任一第二解析树与待查询解析树均不适用于任一条等价变换语句时,判定匹配失败。[0284]当检测到indexsqltree与任一第二解析树均不适用于任一等价变换语句时,判定模板匹配失败,开始对sql语句与至少一条预设sql语句进行自定义匹配。[0285]进一步,为方便理解,本发明实施例还提供了模板匹配的匹配流程图,如图10所示,具体的匹配流程可参照步骤s901~步骤s903,在此就不赘述了。[0286]本发明实施例适用于两条sql语句意义完全相同、写法不同,但是两条sql语句可以适用于同一等价交换模板进行变换的情况,比如:[0287]indexsql:select*from表awhere字段1in(select字段1from表bwhere表a.字段1=表b.字段1);[0288]targetsql:select*from表awhereexists(select1from表bwhere表a.字段1=表b.字段1)。[0289]进一步,本发明实施例中的等价变换模板包括至少一条等价变换语句。比如,等价变换模板可以包括:[0290]语句1)select字段from表awhere字段1in(select字段1from表bwhere表a.字段1=表b.字段1)《==》select字段from表awhereexists(select1from表bwhere表a.字段1=表b.字段1);[0291]语句2)select字段from表awhere字段1notin(select字段1from表bwhere表a.字段1=表b.字段1)《==》select字段from表awherenotexists(select1from表bwhere表a.字段1=表b.字段1)《==》select字段from表aleftjoin表bon表a.字段1=表b.字段1where表b.字段1isnull;[0292]语句3)select字段集a,(select字段集bfrom表bwhere表a.字段1=表b.字段1)from表awhere字段2=xxx《==》select字段集a,字段集bfrom表aleftjoin表bon表a.字段1=表b.字段1where字段2=xxx;[0293]语句4)select字段集afrom表awhere字段1in(selectmax(字段1)from表agroupby字段2)《==》select字段集afrom(select字段集a,字段1,max(字段1)over(partitionby字段2)别名from表a)where字段1=别名;[0294]语句5)select*from(selectcount(*)from表awhere字段1=xxx),(selectcount(*)from表awhere字段1=xxx)《==》selectsum(casewhen字段1=xxxthen1end),sum(casewhen字段1=xxxthen1end)from表a;[0295]语句6)select字段集a,字段集bfrom表a,表bwhere表a.字段1=表b.字段1《==》select字段集a,字段集bfrom表ajoin表bon表a.字段1=表b.字段1。[0296]当然,上述模板仅仅只是举例说明,在实际应用中,用户可以根据实际需求对等价交换模板进行修改,本发明实施例对此不作限制。[0297]在本发明实施例中提供了模板匹配的具体实现方式,如图11所示,对sql语句与至少一条预设sql语句进行自定义匹配包括:[0298]步骤s1101,检测待查询解析树是否适用于预设的自定义变换模板;[0299]在模板匹配时,可以先获取indexsqltree和indexsqlname,然后检测indexsqltree是否适用于预设的自定义变换模板。[0300]步骤s1102,若是,则判定匹配成功,并基于自定义变换模板对待查询解析树进行变换,得到第四变换解析树;[0301]如果indexsqltree适用于预设的自定义变换模板,那么判定自定义匹配成功,然后基于自定义变换模板对indexsqltree进行变换,得到第四变换解析树。比如:[0302]用户将数据源表a中的字段feilda修改为feildb,则用户可定义规则:[0303]feilda=a.feildb。[0304]在变换时,将indexsqltree中的feildb替换成feilda即可。[0305]在本发明一种优选实施例中,对sql语句与至少一条预设sql语句重复执行等价匹配,或者对sql语句与至少一条预设sql语句采用至少两种预设匹配方式中指定的预设匹配方式进行匹配,包括:[0306]基于第四变换解析树与至少一条预设sql语句重复执行等价匹配;[0307]或,[0308]基于第四变换解析树与至少一条预设sql语句采用至少两种预设匹配方式中指定的预设匹配方式进行匹配。[0309]具体而言,自定义匹配成功后,可以基于第四变换解析树与至少一条预设sql语句重复执行等价匹配,或者基于第四变换解析树与至少一条预设sql语句采用至少两种预设匹配方式中指定的预设匹配方式进行匹配。[0310]步骤s1103,若否,则判定匹配失败,结束递进循环匹配;[0311]如果indexsqltree不适用于预设的自定义变换模板,则判定匹配失败,结束递进循环匹配,并将待匹配的sql语句对应的临时表表名和解析树组成map《indexsqlname,indexsqltree》存入待匹配模型的modelmap中,以备后续sql模型等价匹配时使用。[0312]进一步,为方便理解,本发明实施例还提供了自定义匹配的匹配流程图,如图12所示,具体的匹配流程可参照步骤s1101~步骤s1103,在此就不赘述了。[0313]本发明实施例适用于当前算子可以适用于用户自定义的变换模板的情况,比如:[0314]用户将数据源表a中的字段feilda修改为feildb,则用户可定义规则:[0315]a.feilda=a.feildb;[0316]indexsql:selectfeildbfrom表a;[0317]变换后的indexsql:selectfeildafrom表a;[0318]然后将变换过后的indexsql通过其它的预设匹配方式进行处理。[0319]进一步,本发明实施例中的自定义模板包括至少一条自定义变换语句。比如,自定义模板可以包括:[0320]语句1)表a.字段1=表a.字段2。[0321]当然,上述模板仅仅只是举例说明,在实际应用中,用户可以根据实际需求对等价交换模板进行修改,本发明实施例对此不作限制。[0322]在本发明实施例中提供了一种应用本技术的sql算子的调度方法,如图13所示,该方法包括:[0323]1)将待执行的sql模型输入系统;[0324]2)检测检测系统中是否含有sourcetablemap和modelmap;[0325]3)若否,则执行4);若是,则执行5);[0326]4)在系统中构建sourcetablemap和modelmap;[0327]5)①取该模型第一句sql算子,将其匹配结果存放在sourcetablemap中;②以该模型标识(modelid)为key,内层map(其实就是一个空的map)为value构建键值对,存放在modelmap中,再对该sql模型中待执行的sql算子进行递进循环匹配,并将匹配结果存储在内层map中;[0328]6)在执行sql算子时,遍历sql模型中的indexsqltree,若indexsqltree中的equalityope不为null,执行7),否则执行8);[0329]7)该sql算子存在等价sql算子,直接复用等价sql算子的执行结果,不必执行该sql算子;[0330]8)该sql算子不可复用,执行indexsqltree中的sqloperator语句,得到执行结果后进行落盘;[0331]9)在查询任一sql算子indexsqltree的执行结果时,若indexsqltree中的equalityope不为null,执行10),否则执行11);[0332]10)该任一sql算子可复用,若equalityope的值为表名,使用select*fromequalityope进行查询,否则直接执行equalityope中的查询语句;[0333]11)该任一sql算子不可复用,使用该任一sql算子对应的临时表表名进行查询:select*fromindexsqlname。[0334]图14为本技术又一实施例提供的一种检测等价语句的装置的结构示意图,如图14所示,本实施例的装置可以包括:[0335]第一处理模块1401,用于针对待匹配的sql语句,基于至少两种预设匹配方式将待匹配的sql语句与至少一条预设sql语句进行递进循环匹配;递进循环匹配用于从至少一条预设sql语句中匹配出与待匹配的sql语句等价的目标sql语句;[0336]第二处理模块1402,用于当基于至少两种预设匹配方式中的任一预设匹配方式匹配得到目标sql语句时,结束递进循环匹配;[0337]第三处理模块1403,用于当进行递进循环匹配失败时,确定至少一条预设sql语句中不存在与待匹配的sql语句等价的目标sql语句。[0338]在本发明一种优选实施例中,第一处理模块包括:[0339]直接匹配子模块,用于对待匹配的sql语句与至少一条预设sql语句进行直接匹配;直接匹配包括对待匹配的sql语句基于预设的语句格式进行调整,并将调整后的待匹配sql语句与至少一条预设sql语句进行匹配;[0340]等价匹配子模块,用于若直接匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行等价匹配;[0341]包含匹配子模块,用于若等价匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行包含匹配或调用模板匹配子模块;等价匹配、包含匹配包括对待匹配的sql语句基于预设的差异模板进行差异变换,并将变换后的待匹配sql语句与至少一条预设sql语句进行匹配;[0342]模板匹配子模块,用于若包含匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行模板匹配;模板匹配包括检测待匹配的sql语句和至少一条预设sql语句中的任一预设sql语句是否适用于预设的等价变换模板;[0343]变换子模块,用于若模板匹配成功,则对待匹配的sql语句基于等价变换模板进行等价变换,并针对等价变换后的待匹配的sql与至少一条预设sql语句调用等价匹配子模块;[0344]自定义匹配子模块,用于若模板匹配失败,则对待匹配的sql语句与至少一条预设sql语句进行自定义匹配;自定义匹配为检测待查询解析树是否适用于预设的自定义变换模板;[0345]若自定义匹配成功,则针对待匹配的sql语句与至少一条预设sql语句调用等价匹配子模块,或者针对待匹配的sql语句与至少一条预设sql语句调用直接匹配子模块、等价匹配子模块、包含匹配子模块、模板匹配子模板中指定的匹配子模块进行匹配;[0346]结束子模块,用于若自定义匹配失败,则结束递进循环匹配。[0347]在本发明一种优选实施例中,直接匹配子模块包括:[0348]格式调整单元,用于基于预设的语句格式对待匹配的sql语句进行格式调整,得到调整后的待匹配的sql语句;[0349]转换单元,用于对调整后的待匹配的sql语句进行转换,得到调整后的待匹配的sql语句的待查询解析树;[0350]第一匹配单元,用于当待匹配的sql语句所查询的表为源数据表时,基于待查询解析树与至少一个预设sql模型各自对应的源表映射信息进行匹配;源表映射信息用于记录查询源数据表的sql语句的第一语句信息,第一语句信息以查询源数据表的sql语句的第一解析树为键;[0351]第一确定单元,用于若存在匹配的第一解析树,则将匹配的第一解析树对应的查询源数据表的sql语句作为等价sql语句;[0352]第一确定单元,还用于若不存在匹配的第一解析树,则判定直接匹配失败。[0353]在本发明一种优选实施例中,直接匹配子模块还包括:[0354]获取单元,用于当待匹配的sql语句所查询的表为临时表时,获取待匹配的sql语句的父sql语句;[0355]替换单元,用于当父sql语句存在等价sql语句时,将待查询解析树中父sql语句的语句信息替换成等价sql语句的语句信息;[0356]第一确定单元,还用于根据等价sql语句的语句信息确定出目标sql模型标识;目标sql模型包括至少一条sql语句,每条sql语句具有各自对应的解析树;[0357]获取单元,还用于根据目标sql模型标识获取目标sql模型包括的各个第二解析树;[0358]第二匹配单元,用于将待查询解析树与各个第二解析树进行匹配;[0359]第一确定单元,还用于若存在匹配的第二解析树,则将匹配的第二解析树对应的sql语句作为等价sql语句;[0360]第一确定单元,还用于若不存在匹配的第二解析树,则判定直接匹配失败。[0361]在本发明一种优选实施例中,等价匹配子模块包括:[0362]计算单元,用于基于sql语句的查询表和查询条件计算得到待查询解析树与各个第二解析树的各个匹配积分;[0363]最高匹配积分获取单元,用于获取各个匹配积分中的最高匹配积分;[0364]目标第二解析树获取单元,用于当最高匹配积分不为预设数值时,获取最高匹配积分对应的目标第二解析树;[0365]第一查询条件确定单元,用于确定出待查询解析树与目标第二解析树存在差异的第一查询条件;[0366]第一变换解析树单元,用于使用预设的差异模板对第一查询条件进行变换,得到第一变换解析树;[0367]第二确定单元,用于当第一变换解析树与目标第二解析树等价,则将目标第二解析树对应的sql语句作为等价sql语句;[0368]第二确定单元,还用于当变换后的待查询解析树与目标第二解析树不等价时,则判定等价匹配失败;[0369]第二确定单元,还用于当最高匹配积分为预设数值时,对待匹配的sql语句与至少一条预设sql语句进行模板匹配。[0370]在本发明一种优选实施例中,包含匹配子模块包括:[0371]第二查询条件确定单元,用于当待查询解析树中待查询字段为目标第二解析树中待查询字段的子集时,确定出待查询解析树与目标第二解析树存在差异的第二查询条件;[0372]第二变换解析树单元,用于使用差异模板对第二查询条件进行变换,得到第二变换解析树;[0373]第三确定子模块,用于当第二变换解析树中的查询条件为目标第二解析树中的查询条件的子集时,将目标第二解析树对应的sql语句作为等价sql语句;[0374]第三确定子模块,还用于当第二变换解析树中的查询条件不为目标第二解析树中的查询条件的子集时,判定包含匹配失败。[0375]在本发明一种优选实施例中,模板匹配子模块包括:[0376]第一检测单元,用于检测各个第二解析树和待查询解析树是否适用于预设的等价变换模板;等价变换模板包含至少一条等价变换语句;[0377]第四确定单元,用于当任一第二解析树与待查询解析树同时适用于任一条等价变换语句时,判定匹配成功;[0378]第三变换解析树单元,用于将待查询解析树基于任一条等价变换语句进行变换,得到第三变换解析树;[0379]第四确定单元,还用于当任一第二解析树与待查询解析树均不适用于任一条等价变换语句时,判定匹配失败;[0380]针对待匹配的sql语句与至少一条预设sql语句调用等价匹配子模块,包括:[0381]基于第三变换解析树与至少一条预设sql语句调用等价匹配子模块。[0382]在本发明一种优选实施例中,自定义匹配子模块包括:[0383]第二检测单元,用于检测待查询解析树是否适用于预设的自定义变换模板;[0384]第四变换解析树单元,用于若待查询解析树适用于预设的自定义变换模板,则判定匹配成功,并基于自定义变换模板对待查询解析树进行变换,得到第四变换解析树;[0385]第五确定单元,用于若待查询解析树不适用于预设的自定义变换模板,则判定匹配失败,结束递进循环匹配;[0386]针对待匹配的sql语句与至少一条预设sql语句调用等价匹配子模块,或者针对待匹配的sql语句与至少一条预设sql语句调用直接匹配子模块、等价匹配子模块、包含匹配子模块、模板匹配子模板中指定的匹配子模块进行匹配,包括:[0387]基于第四变换解析树与至少一条预设sql语句调用等价匹配子模块;[0388]或,[0389]基于第四变换解析树与至少一条预设sql语句调用直接匹配子模块、等价匹配子模块、包含匹配子模块、模板匹配子模板中指定的匹配子模块进行匹配。[0390]本实施例的检测等价语句的装置可执行本技术步骤s101~步骤s103、步骤s301~步骤s3012、步骤s501~步骤s507、步骤s701~步骤s704、步骤s901~步骤s903、步骤s1101~步骤s1103所示的各个方法,其实现原理相类似,此处不再赘述。[0391]在本发明实施例中,针对待匹配的sql语句,基于至少两种预设匹配方式将该待匹配的sql语句与至少一条预设sql语句进行递进循环匹配,该递进循环匹配用于从该至少一条预设sql语句中匹配出与该待匹配的sql语句等价的目标sql语句。在递进循环匹配的过程中,如果基于该至少两种预设匹配方式中的任一预设匹配方式匹配得到了等价的目标sql语句,那么就结束递进循环匹配,并对该目标sql语句进行执行结果的复用;如果通过所有的预设匹配方式都没有匹配得到等价的目标sql语句,那么就可以确定在该至少一条预设sql语句中,不存在与该待匹配的sql语句等价的sql语句,并执行该待匹配的sql语句。这样,在sql模型调度时,在执行sql模型中的任一sql语句时,可以通过上述方法先确定出系统中是否存在等价的目标sql语句,如果存在,则直接对目标sql语句进行执行结果的复用,避免了由于执行该任一sql语句得到相同的执行结果导致的重复执行等操作,减少了由于重复执行等操作导致的大量的资源消耗,同时,有利于提高sql模型的运行效率。[0392]本技术的又一实施例中提供了一种电子设备,该电子设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,与现有技术相比可实现:在本发明实施例中,针对待匹配的sql语句,基于至少两种预设匹配方式将该待匹配的sql语句与至少一条预设sql语句进行递进循环匹配,该递进循环匹配用于从该至少一条预设sql语句中匹配出与该待匹配的sql语句等价的目标sql语句。在递进循环匹配的过程中,如果基于该至少两种预设匹配方式中的任一预设匹配方式匹配得到了等价的目标sql语句,那么就结束递进循环匹配,并对该目标sql语句进行执行结果的复用;如果通过所有的预设匹配方式都没有匹配得到等价的目标sql语句,那么就可以确定在该至少一条预设sql语句中,不存在与该待匹配的sql语句等价的sql语句,并执行该待匹配的sql语句。这样,在sql模型调度时,在执行sql模型中的任一sql语句时,可以通过上述方法先确定出系统中是否存在等价的目标sql语句,如果存在,则直接对目标sql语句进行执行结果的复用,避免了由于执行该任一sql语句得到相同的执行结果导致的重复执行等操作,减少了由于重复执行等操作导致的大量的资源消耗,同时,有利于提高sql模型的运行效率。[0393]在一个可选实施例中提供了一种电子设备,如图15所示,图15所示的电子设备15000包括:处理器15001和存储器15003。其中,处理器15001和存储器15003相连,如通过总线15002相连。可选地,电子设备15000还可以包括收发器15004。需要说明的是,实际应用中收发器15004不限于一个,该电子设备15000的结构并不构成对本技术实施例的限定。[0394]处理器15001可以是cpu,通用处理器,dsp,asic,fpga或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本技术公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器15001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等。[0395]总线15002可包括一通路,在上述组件之间传送信息。总线15002可以是pci总线或eisa总线等。总线15002可以分为地址总线、数据总线、控制总线等。为便于表示,图15中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。[0396]存储器15003可以是rom或可存储静态信息和指令的其他类型的静态存储设备,ram或者可存储信息和指令的其他类型的动态存储设备,也可以是eeprom、cd-rom或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。[0397]存储器15003用于存储执行本技术方案的应用程序代码,并由处理器15001来控制执行。处理器15001用于执行存储器15003中存储的应用程序代码,以实现前述任一方法实施例所示的内容。[0398]其中,电子设备包括但不限于:移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。[0399]本技术的又一实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,在本发明实施例中,针对待匹配的sql语句,基于至少两种预设匹配方式将该待匹配的sql语句与至少一条预设sql语句进行递进循环匹配,该递进循环匹配用于从该至少一条预设sql语句中匹配出与该待匹配的sql语句等价的目标sql语句。在递进循环匹配的过程中,如果基于该至少两种预设匹配方式中的任一预设匹配方式匹配得到了等价的目标sql语句,那么就结束递进循环匹配,并对该目标sql语句进行执行结果的复用;如果通过所有的预设匹配方式都没有匹配得到等价的目标sql语句,那么就可以确定在该至少一条预设sql语句中,不存在与该待匹配的sql语句等价的sql语句,并执行该待匹配的sql语句。这样,在sql模型调度时,在执行sql模型中的任一sql语句时,可以通过上述方法先确定出系统中是否存在等价的目标sql语句,如果存在,则直接对目标sql语句进行执行结果的复用,避免了由于执行该任一sql语句得到相同的执行结果导致的重复执行等操作,减少了由于重复执行等操作导致的大量的资源消耗,同时,有利于提高sql模型的运行效率。[0400]应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。[0401]以上所述仅是本发明的部分实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献