掌桥专利:专业的专利平台
掌桥专利
首页

一种将SQL语句转义为ES语句的方法及系统

文献发布时间:2023-06-19 18:37:28


一种将SQL语句转义为ES语句的方法及系统

技术领域

本发明涉及数据库技术领域,具体而言,涉及一种将SQL语句转义为ES语句的方法及系统。

背景技术

随着数据量的不断增加,传统的结构型数据库查询、更新的性能已经无法满足业务诉求,故而很多应用都引入了elasticsearch(以下简称ES),ES是一个基于Lucene的开源分布式的搜索引擎,在大数据的搜索、分析方面,ES可以提供接近实时的可靠保障,因此ES作为实时数据搜索引擎已经被广泛应用到各个场景中。但是,由于传统的结构型数据库的语法与ES的语法差异很大,想要从数据库查询切换到ES查询,需要开发人员对数据库的每一条SQL语句重新进行开发,整个过程耗时耗力、周期性长。

发明内容

本发明的目的在于提供一种将SQL语句转义为ES语句的方法及系统,其通过对接收到原生SQL语句进行分析,获得原生SQL语句的类型后针对不同类型的SQL语句类型,按照ES的语法对原生SQL语句进行转义处理生成ES语句等步骤,可以将SQL的查询性语句转义为ES的布尔查询语句、将SQL的事务性语句转义为ES的事务操作语句,从而将原生SQL语句自动地转义为ES语句,不需要开发人员针对数据库的每一条SQL语句重新进行开发,节约了人力物力,缩短了开发周期;且可以帮助应用快速地从SQL模式切换至ES模式,应用通过执行自动生成的ES语句可以实时地搜索数据,进而提高数据(或数据库)查询、操作的速度。

本发明的实施例是这样实现的:

第一方面,本申请实施例提供一种将SQL语句转义为ES语句的方法,包括以下步骤:

接收原生SQL语句;

对所述原生SQL语句进行分析,得到所述原生SQL语句的类型;

根据所述原生SQL语句的类型,按ES的语法对所述原生SQL语句进行转义处理,得到对应的ES语句。

在本发明的一些实施例中,所述对所述原生SQL语句进行分析,得到所述原生SQL语句的类型的步骤具体包括:

解析所述原生SQL语句,获得所述原生SQL语句的语句标识;

根据所述语句标识确定所述原生SQL语句的类型,所述原生SQL语句的类型包括查询性语句和事务性语句。

在本发明的一些实施例中,所述根据所述原生SQL语句的类型,按ES的语法对所述原生SQL语句进行转义处理,得到对应的ES语句的步骤具体包括:

若所述原生SQL语句的类型为查询性语句,则按ES的查询语法将所述原生SQL语句转义为ES的布尔查询语句。

在本发明的一些实施例中,所述根据所述原生SQL语句的类型,按ES的语法对所述原生SQL语句进行转义处理,得到对应的ES语句的步骤具体还包括:

若所述原生SQL语句的类型为事务性语句,则按ES的事务操作语法将所述原生SQL语句转义为ES的事务操作语句。

在本发明的一些实施例中,所述按ES的查询语法将所述原生SQL语句转义为ES的布尔查询语句的步骤具体包括:

将原生SQL语句中的数据库schema字段转义为ES的index字段;

将原生SQL语句中的查询条件字段、查询方式字段进行ES转义,并与所述ES的index字段组合成完整的ES的布尔查询语句。

在本发明的一些实施例中,所述按ES的事务操作语法将所述原生SQL语句转义为ES的事务操作语句的步骤具体包括:

将原生SQL语句中的数据库schema字段转义为ES的index字段;

将原生SQL语句中的事务标识字段、操作的目标字段及对应的值ES转义后与所述ES的index字段组合成完整的ES的事务操作语句。

第二方面,本申请实施例提供一种将SQL语句转义为ES语句的系统,其包括:

接收模块,用于接收原生SQL语句;

分析模块,用于对所述原生SQL语句进行分析,得到所述原生SQL语句的类型;

转义模块,用于根据所述原生SQL语句的类型,按ES的语法对所述原生SQL语句进行转义处理,得到对应的ES语句。

在本发明的一些实施例中,所述分析模块具体包括:

解析子模块,用于解析所述原生SQL语句,获得所述原生SQL语句的语句标识;

确定子模块,用于根据所述语句标识确定所述原生SQL语句的类型,所述原生SQL语句的类型包括查询性语句和事务性语句。

第三方面,本申请实施例提供一种电子设备,其包括存储器,用于存储一个或多个程序;处理器,当上述一个或多个程序被上述处理器执行时,实现如上述第一方面中任一项上述的方法。

第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述第一方面中任一项上述的方法。

相对于现有技术,本发明的实施例至少具有如下优点或有益效果:

本发明的实施例提出了一种将SQL语句转义为ES语句的方法,其通过对接收到原生SQL语句进行分析,获得原生SQL语句的类型后针对不同类型的SQL语句类型,按照ES的语法对原生SQL语句进行转义处理生成ES语句等步骤,可以将SQL的查询性语句转义为ES的布尔查询语句、将SQL的事务性语句转义为ES的事务操作语句,从而将原生SQL语句自动地转义为ES语句,不需要开发人员针对数据库的每一条SQL语句重新进行开发,节约了人力物力,缩短了开发周期;且可以帮助应用快速地从SQL模式切换至ES模式,应用通过执行自动生成的ES语句可以实时地搜索数据,进而提高数据(或数据库)查询、操作的速度。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明一种将SQL语句转义为ES语句的方法一实施例的流程图;

图2为本发明实施例中对所述原生SQL语句进行分析,得到所述原生SQL语句的类型的步骤的具体流程图;

图3为本发明实施例中根据所述原生SQL语句的类型,按ES的语法对所述原生SQL语句进行转义处理,得到对应的ES语句的步骤的具体流程图;

图4为本发明实施例中若所述原生SQL语句的类型为查询性语句,则按ES的查询语法将所述原生SQL语句转义为ES的布尔查询语句的具体流程图;

图5为本申请实施例中的若所述原生SQL语句的类型为事务性语句,则按ES的事务操作语法将所述原生SQL语句转义为ES的事务操作语句的具体流程图;

图6为本发明一种将SQL语句转义为ES语句的系统一实施例的结构框图;

图7为本发明实施例提供的一种电子设备的结构框图。

图标:1、接收模块;2、分析模块;3、转义模块;4、处理器;5、存储器;6、数据总线。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。

实施例1

请参阅图1-5,本申请实施例提供了一种将SQL语句转义为ES语句的方法,其通过对接收到原生SQL语句进行分析,获得原生SQL语句的类型后针对不同类型的SQL语句类型,按照ES的语法对原生SQL语句进行转义处理生成ES语句等步骤,可以将SQL的查询性语句转义为ES的布尔查询语句、将SQL的事务性语句转义为ES的事务操作语句,从而将原生SQL语句自动地转义为ES语句,不需要开发人员针对数据库的每一条SQL语句重新进行开发,节约了人力物力,缩短了开发周期。

如图1所示,上述将SQL语句转义为ES语句的方法包括以下步骤:

步骤S101:接收原生SQL语句。

上述步骤中,原生SQL语句可以是传统的结构型数据库的用SQL语言编写的所有数据库操作语句,包括但不限于查询数据、对数据或数据库结构(如表结构等)的增删改操作、存储过程、函数等等语句;在应用需要对数据进行操作的时候,在应用程序内生成对应的原生SQL语句,并需经过后台程序连接数据库、执行SQL语句获取数据再返回数据等一系列的过程,可以看出这个过程比较繁琐、效率较低;因此在接收到应用的原生SQL语句后,可以对SQL语句进行分析并转义为ES语句,然后通过ES服务执行ES语句,借助ES强大的实时数据搜索、处理能力,快速地对数据进行处理。

步骤S102:对所述原生SQL语句进行分析,得到所述原生SQL语句的类型。

其中,如图2所示,上述步骤S102:对所述原生SQL语句进行分析,得到所述原生SQL语句的类型的步骤具体包括:

步骤S1021:解析所述原生SQL语句,获得所述原生SQL语句的语句标识;

步骤S1022:根据所述语句标识确定所述原生SQL语句的类型,所述原生SQL语句的类型包括查询性语句和事务性语句。

上述步骤中,接收到原生SQL语句后,将SQL语句按空格进行切割,得到语句的各个字段,其中,第一个字段即为原生SQL语句的语句标识,语句标识用来表示对应的SQL语句的类型,即表示该语句属于对数据或数据库的哪一类操作,具体可分为查询性语句和事务性语句,查询性语句的语句的标识包括select,事务性语句的标识包括insert、update、delete、alter、create procedure等等。

步骤S103:根据所述原生SQL语句的类型,按ES的语法对所述原生SQL语句进行转义处理,得到对应的ES语句。

相应地,请参阅图3,上述步骤S103:根据所述原生SQL语句的类型,按ES的语法对所述原生SQL语句进行转义处理,得到对应的ES语句的步骤具体包括:

步骤S1031:若所述原生SQL语句的类型为查询性语句,则按ES的查询语法将所述原生SQL语句转义为ES的布尔查询语句。

上述步骤中,若原生SQL语句的类型为查询性语句,即语句的标识包括select,则将该select语句转义为ES语法的布尔查询语句,即boolQuery语句。

其中,如图4所示,上述步骤S1031:若所述原生SQL语句的类型为查询性语句,则按ES的查询语法将所述原生SQL语句转义为ES的布尔查询语句具体包括:

步骤S10311:将原生SQL语句中的数据库schema字段转义为ES的index字段;

步骤S10312:将原生SQL语句中的查询条件字段、查询方式字段进行ES转义,并与所述ES的index字段组合成完整的ES的布尔查询语句。

上述步骤中,以查询性语句select name,age from user where age=’18’andname!=’zhangsan’为例,在将select语句转义为ES语法的boolQuery语句即{"query":{"bool":{}}}之后,将解析原生SQL语句得到的字段中的数据库schema(如表、视图等)字段,即user字段,转义为ES的index索引,如user/_search,再结合解析得到的其他字段如查询方式字段、查询条件字段的ES转义,如将查询方式字段select转为get、将等于和不等于等查询条件转义为ES的must、must_not相应语句等,最后与ES的index字段user/_search进行组合,得到完整的ES的布尔查询语句,即get user/_search{"query":{"bool":{"must":[{"match":{"age":"11"}}],"must_not":[{"match":{"name":"zhangsan"}}]}}}。需要说明的是,原SQL的具体查询方式如使用聚合函数MAX()、MIN()、COUNT()、SUM()、AVG()等的聚合查询、分组查询(group by)、分页查询等,可以作为ES语句中的子字段,附在ES完整的语句中,如get user/_search{"query":{"bool":{"must":[{"match":{"age":"11"}}],"must_not":[{"match":{"name":"zhangsan"}}],"method":MIN}}}等等。

步骤S1032:若所述原生SQL语句的类型为事务性语句,则按ES的事务操作语法将所述原生SQL语句转义为ES的事务操作语句。

上述步骤中,若原生SQL语句的类型为事务性语句,即语句的标识包括insert、update、delete、alter、create procedure等字段,则将该事务性语句转义为ES语法的事务操作语句,如数据库schema表结构的操作语句、表数据的操作语句等。

其中,如图5所示,上述步骤S1032:若所述原生SQL语句的类型为事务性语句,则按ES的事务操作语法将所述原生SQL语句转义为ES的事务操作语句具体包括:

步骤S10321:将原生SQL语句中的数据库schema字段转义为ES的index字段;

步骤S10322:将原生SQL语句中的事务标识字段、操作的目标字段及对应的值ES转义后与所述ES的index字段组合成完整的ES的事务操作语句。

上述步骤中,以事务操作语句insert into user(name,age)values(’lisi’,’18’)为例,可以将语句中的insert into(数据插入操作)的事务标识字段转义为ES语法的put,然后将解析原生SQL语句得到的字段中的数据库schema(如表、视图等)字段,即user字段,转义为ES的index索引,如user/_doc/id,再结合解析得到的其他字段如操作的目标字段及其对应的值的ES转义,如将操作的目标字段(name,age)及其对应的值(’lisi’,’18’)转为键值对{"age":18,"name":"lisi"},最后与ES的index字段user/_doc/id、事务标识字段put进行组合,得到完整的ES的事务操作语句,即put user/_doc/id{"age":18,"name":"lisi"}。

通过上述对接收到原生SQL语句进行分析,获得原生SQL语句的类型后针对不同类型的SQL语句类型,按照ES的语法对原生SQL语句进行转义处理生成ES语句等步骤,可以将SQL的查询性语句转义为ES的布尔查询语句、将SQL的事务性语句转义为ES的事务操作语句,从而将原生SQL语句自动地转义为ES语句,不需要开发人员针对数据库的每一条SQL语句重新进行开发,节约了人力物力,缩短了开发周期;且可以帮助应用快速地从SQL模式切换至ES模式,应用通过执行自动生成的ES语句可以实时地搜索数据,进而提高数据(或数据库)查询、操作的速度。

需要说明的是,本发明实施例中未具体展开说明的技术内容,可以通过现有的相关技术实现,属于现有技术,在本发明实施例中不再赘述。

实施例2

相应地,请参阅图6,本申请实施例提供了一种将SQL语句转义为ES语句的系统,其包括:

接收模块1,用于接收原生SQL语句;分析模块2,用于对所述原生SQL语句进行分析,得到所述原生SQL语句的类型;转义模块3,用于根据所述原生SQL语句的类型,按ES的语法对所述原生SQL语句进行转义处理,得到对应的ES语句。

其中,所述分析模块2具体包括:解析子模块,用于解析所述原生SQL语句,获得所述原生SQL语句的语句标识;确定子模块,用于根据所述语句标识确定所述原生SQL语句的类型,所述原生SQL语句的类型包括查询性语句和事务性语句。

上述系统具体实现过程请参照实施例1中提供的一种将SQL语句转义为ES语句的方法,在此不再赘述。

实施例3

请参阅图7,本申请实施例提供了一种电子设备,该电子设备包括至少一个处理器4、至少一个存储器5和数据总线6;其中:处理器4与存储器5通过数据总线6完成相互间的通信;存储器5存储有可被处理器4执行的程序指令,处理器4调用程序指令以执行一种将SQL语句转义为ES语句的方法。例如实现:

接收原生SQL语句;对所述原生SQL语句进行分析,得到所述原生SQL语句的类型;根据所述原生SQL语句的类型,按ES的语法对所述原生SQL语句进行转义处理,得到对应的ES语句。

其中,存储器5可以是但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。

处理器4可以是一种集成电路芯片,具有信号处理能力。该处理器4可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

可以理解,图7所示的结构仅为示意,电子设备还可包括比图7中所示更多或者更少的组件,或者具有与图7所示不同的配置。图7中所示的各组件可以采用硬件、软件或其组合实现。

实施例4

本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器4执行时实现一种将SQL语句转义为ES语句的方法。例如实现:

接收原生SQL语句;对所述原生SQL语句进行分析,得到所述原生SQL语句的类型;根据所述原生SQL语句的类型,按ES的语法对所述原生SQL语句进行转义处理,得到对应的ES语句。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其它的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

技术分类

06120115631594