CN117667968A - 一种数据查询方法及装置 - Google Patents
一种数据查询方法及装置 Download PDFInfo
- Publication number
- CN117667968A CN117667968A CN202211007896.7A CN202211007896A CN117667968A CN 117667968 A CN117667968 A CN 117667968A CN 202211007896 A CN202211007896 A CN 202211007896A CN 117667968 A CN117667968 A CN 117667968A
- Authority
- CN
- China
- Prior art keywords
- query
- request
- sub
- database
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 238000013500 data storage Methods 0.000 claims description 21
- 238000004891 communication Methods 0.000 claims description 3
- 238000012360 testing method Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 13
- 238000004458 analytical method Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 7
- 238000004590 computer program Methods 0.000 description 6
- 230000001360 synchronised effect Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 229910052739 hydrogen Inorganic materials 0.000 description 1
- 239000001257 hydrogen Substances 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据查询方法及装置,获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求,执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中,对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。即本发明中,将查询请求拆分为查询子请求,并分别执行查询子请求,得到查询子结果后进行汇总操作。不再需要将待查询的多个不同的数据库的内容存储到同一目标数据库,节省了数据同步步骤,进而缩短了数据查询时间,提高数据查询效率。
Description
技术领域
本发明涉及数据查询领域,更具体的说,涉及一种数据查询方法及装置。
背景技术
随着数据查询能力的逐渐提高,跨库查询的需求也越来越多。跨库查询是指在同一查询SQL(StructuredQueryLanguage,结构化查询语言)中需要同时查询多个不同的数据库。
目前,在进行跨库查询时,需要将待查询的多个不同的数据库的内容存储到同一目标数据库,然后对该目标数据库进行查询操作,从而间接实现跨库查询。但是这种方式,需要先进行数据同步操作,使得数据查询时间较长,降低数据查询效率。
发明内容
鉴于上述问题,本发明提供一种克服上述问题或者至少部分地解决上述问题的一种数据查询方法及装置。
一种数据查询方法,包括:
获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求;
执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中;
对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。
可选地,按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求,包括:
生成所述查询请求的语法结构树;
从所述语法结构树的根节点开始,对所述语法结构树的各个分支按照节点顺序依次遍历,得到至少一个查询子请求。
可选地,生成所述查询请求的语法结构树,包括:
获取所述查询请求中的数据库名标识,并按照数据库名标识与实际库名的对应关系,确定所述数据库名标识对应的实际库名;
生成所述查询请求的语法结构树,并将所述语法结构树中的数据库名标识替换为相应的实际库名。
可选地,执行所述查询子请求,得到查询子结果,包括:
确定所述查询子请求对应的待查询数据库,并获取所述待查询数据库的连接配置信息;
通过所述连接配置信息与所述待查询数据库连接;
在与所述待查询数据库成功连接后,执行所述查询子请求,得到查询子结果。
可选地,将所述查询子结果存储到同一数据库中,包括:
在同一数据库确定出与所述查询子结果的数量相同的数据存储文件,并将所述查询子结果存储到相应的数据存储文件中。
可选地,对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果,包括:
获取所述数据存储文件的文件名称,并将所述查询请求中的数据库名标识替换为相应的数据存储文件的文件名称,得到汇总请求;
执行所述汇总请求,得到查询请求的查询结果。
一种数据查询装置,包括:
请求确定模块,用于获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求;
请求执行模块,用于执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中;
数据汇总模块,用于对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。
可选地,所述请求确定模块包括:
结构树生成子模块,用于生成所述查询请求的语法结构树;
遍历子模块,用于从所述语法结构树的根节点开始,对所述语法结构树的各个分支按照节点顺序依次遍历,得到至少一个查询子请求。
一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述的数据查询方法。
一种电子设备,设备包括至少一个处理器、以及与处理器连接的至少一个存储器、总线;其中,所述处理器、所述存储器通过所述总线完成相互间的通信;所述处理器用于调用所述存储器中的程序指令,以执行上述的数据查询方法。
借由上述技术方案,本发明提供了一种数据查询方法及装置,获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求,执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中,对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。即本发明中,将查询请求拆分为查询子请求,并分别执行查询子请求,得到查询子结果后进行汇总操作。不再需要将待查询的多个不同的数据库的内容存储到同一目标数据库,节省了数据同步步骤,进而缩短了数据查询时间,提高数据查询效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例中的一种数据同步与跨库查询场景的示意图;
图2示出了本发明实施例中的一种数据查询方法的方法流程图;
图3示出了本发明实施例中的一种数据跨库查询场景的示意图;
图4示出了本发明实施例中的另一种数据查询方法的方法流程图;
图5示出了本发明实施例中的一种元信息库存储信息的示意图;
图6示出了本发明实施例中的一种语法结构树的示意图;
图7示出了本发明实施例中的一种SQL拆分的场景示意图;
图8示出了本发明实施例中的另一种数据跨库查询场景的示意图;
图9示出了本发明实施例中的一种数据查询装置的结构示意图;
图10示出了本发明实施例中的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
随着数据查询能力的逐渐提高,跨库查询的需求也越来越多。跨库查询是指在同一查询SQL中需要同时查询多个不同的数据库。
目前,在进行跨库查询时,需要先跟指定的数据库创建连接,此时输入的SQL,会查询已经连接的数据库的内容,如创建与数据库A、与数据库B、或与数据库C三个连接中的一个。也就是说,在进行同一SQL查询时,由于受到数据库厂商工具的限制,不能做到同一连接同时连三个数据库。因此,同一个SQL是不可能同时查询ABC三个类型的数据库的。
为此,需要将待查询的多个不同的数据库的内容存储到同一目标数据库,如将A、B、C三个库中的内容,同时同步到一个独立的数据库D中,此时与数据库D建立一对一连接,并查询数据库D,间接模拟出跨库查询。
举例来说,某个企业的多个项目单独开发,其中第一项目的数据存储在Oracle(一种商业数据库)中、第二项目的数据是存储在MySQL(一种开源数据库)中、第三项目的数据存储在SQLServer(一种商业数据库)中。
如果想对浏览的用户信息做分析,此时,需要跨不同类型的关系型数据库,此时需要将不同数据库中的信息同步到一个专用的查询系统中。
如图1所示,需要将Oracle、MySQL、SQLServer的数据同步到另一个关系型数据库中,比如都同步到PostgreSQL(一种开源数据库)中,PostgreSQL中事先建好了单独的查询库、用于分析的表,这个分析表包括了MySQL、Oracle、SQLServer三种数据库的所有信息,是一个信息汇总的库。
之后单独对PostgreSQL库中的表做查询,此时相当于对一种固定的数据库做查询,是可实现的。
但是这种方式,需要先进行数据同步操作,使得数据查询时间较长,降低数据查询效率。
另外,如将MySQL、Oracle、SQLServer这些用于生产服务的数据,需要将所有的数据同步到PostgreSQL中,造成数据冗余。
此外,数据同步的时候会占用大量网络带宽,将MySQL、Oracle、SQLServer的数据同步到PostgreSQL可能会存在一些延迟。且用于分析的PostgreSQL也需要单独的物理机/虚拟机,如果数据量很大,需要搭建更多的机器,造成资源浪费。
为了解决这一技术问题,发明人经过研究发现,同一SQL不能连接多个数据库,若是将该SQL拆分为多个子SQL,则每一子SQL可以连接一数据库,实现了查询多个数据库中的数据的效果,最终,将每一子SQL的查询子结果汇总即可。
更具体的,本发明实施例提供了一种数据查询方法及装置,获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求,执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中,对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。即本发明中,将查询请求拆分为查询子请求,并分别执行查询子请求,得到查询子结果后进行汇总操作。不再需要将待查询的多个不同的数据库的内容存储到同一目标数据库,节省了数据同步步骤,进而缩短了数据查询时间,提高数据查询效率。
在上述内容的基础上,本发明的实施例提供了一种数据查询方法,参照图2,可以包括:
S11、获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求。
本实施例中,参照图3,客户端可以发送查询请求,查询请求可以是一段程序,也可以是REST-API调用。如为JDBC的请求、接收远程命令行请求、接收REST-API请求等。
图3中的服务端、解析引擎和执行引擎构成本发明中的查询设备,如查询服务器。服务端接收到该查询请求之后,发送给解析引擎进行解析。
解析引擎将用户的查询请求进行解析,判断是单数据源查询、还是多数据源查询,并判断出需要执行哪些具体的库。解析引擎将具体的SQL解析后,交给后面的执行引擎。执行引擎负责具体的SQL执行操作,将某一个SQL发往具体的数据库,或者将几个SQL发往具体的数据库并接收返回的数据,然后执行查询结果汇总操作。
本实施例中,可以是解析引擎执行“按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求”的操作。将一个查询请求拆分为至少一个查询子请求后,每个查询子请求可以独立执行查询操作。
S12、执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中。
本实施例中,上述的执行引擎执行所述查询子请求,得到查询子结果。为了实现查询子结果的汇总,需要将所述查询子结果存储到同一数据库中,如存储在MySQL、Oracle、SQLServer、或PostgreSQL中。
S13、对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。
具体的,仍是使用执行引擎汇总查询子结果,得到查询请求的查询结果。
本实施例中,获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求,执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中,对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。即本发明中,将查询请求拆分为查询子请求,并分别执行查询子请求,得到查询子结果后进行汇总操作。不再需要将待查询的多个不同的数据库的内容存储到同一目标数据库,节省了数据同步步骤,进而缩短了数据查询时间,提高数据查询效率。
此外,由于本发明不需要进行同步,则能够避免同步占用资源以及数据冗余的问题,以及资源浪费问题。
上述实施例提及了“按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求”,现对其具体实现过程进行介绍。参照图4,可以包括:
S21、生成所述查询请求的语法结构树。
本实施例中,以查询请求为:
SELECT*FROMt3.test_3AScJOIN(
SELECTa.id,b.snameFROMt1.test_1ASaJOINt2.test_2ASb
ONa.id=b.idWHEREa.id>10ANDb.id<100
)ASt
ONc.id=t.idWHEREc.id>20
为例,介绍生成语法结构树的过程。
在实际应用中,若是一个SQL需要查询ABC三个数据库的内容,解析引擎需要将SQL中查询ABC的内容拆分出来,ABC中可能包含了重名的库,假设A数据库有一个test库,B数据库有test库,C数据库也有test库,ABC是三个不同类型的数据库,数据库本身是不允许有重名的数据库,所以test库在A中必然只有一份,但是没法保证B数据库也有一个test库,C也是一样。
那么当一个SQL中包含了test这个库,就没办法区分到底是属于A的,还是属于B的。所以需要给test增加一个唯一的标识,本实施例中可以称为数据库名标识,如别名,在所使用的所有数据库中,别名是唯一的。进而通过别名,就确保了查询的数据库的唯一性,如,通过test的别名,就能知道这个是属于ABC哪一数据库了。
用户端在发送查询请求,如SQL的时候,会将要查询的数据名替换为相应的数据库名标识,所以,为了确定出SQL中的数据库名标识具体对应哪一实际数据库,需要建立数据库名标识与实际库名的对应关系,对应关系可以存储到元信息库中。以MySQL、Oracle、SQLServer为例,元信息库库用来保存MySQL、Oracle、SQLServer三个生产库的数据库名标识与实际库名的对应关系。
元信息库可以使用任意类型的关系数据库,比如可以用MySQL、PostgreSql作为元信息库都是可以的。
参照图5,元信息库中有一个元信息表,表中最重要的有三列:
真实库名,这一列对应一个具体类型的数据库中的某个具体的库,比如MySQL类型的数据库中的mysql_test库;或者是Oracle类型的数据库中的oracle_test库。
别名列(即数据库名标识),由于元信息库中可能会保存非常多的真实库,其库名可能会冲突,比如MySQL类型的库中可能有一个叫做a的库,Oracle类型的库中可能也有一个叫a的库。如果仅仅通过SQL是无法分辨出这个a库到底是属于MySQL的、还是数据Oracle的。所以需要加一个别名来做区分,这个别名是是唯一列,保证不重复。
在实际编写SQL时,仅需要在SQL中写入别名,通过别名+表名唯一定位一个数据库表。不需要写入真实库名,仅需要通过数据库名标识与实际库名的对应关系查询到别名对应的真实库名。
此外,元信息库还会存储有数据库的连接配置信息,具体见图5的配置信息列,连接配置信息是指真实库的具体连接信息,比如连接mysql_test这个库的url、端口、登录用户名、密码等。通过连接配置信息连接数据库。
本发明的另一实现方式中,生成所述查询请求的语法结构树,可以包括:
1)获取所述查询请求中的数据库名标识,并按照数据库名标识与实际库名的对应关系,确定所述数据库名标识对应的实际库名。
具体,可以直接查询数据库名标识与实际库名的对应关系,得到所述数据库名标识对应的实际库名。
如,SELECT*FROMt1.test_1ASaWHEREa.id>10
是客户端发送到服务端的一个具体SQL,之后解析引擎会将这个SQL解析,并会将别名(t1)替换成真实库名(mysql_test)。
在具体替换时,可以在生成语法结构树之前,也可以在生成语法结构树之后,将所述语法结构树中的数据库名标识替换为相应的实际库名。本实施例中不做要求。
2)生成所述查询请求的语法结构树,并将所述语法结构树中的数据库名标识替换为相应的实际库名。
本实施例中,可以通过编译技术生成所述查询请求的语法结构树。语法结构树可以如图6所示。
生成语法结构树后,将语法结构树中的数据库名标识替换为相应的实际库名。
在实际应用中,无论多么复杂的SQL,最后都会解析成如图6所示的语法树结构。遍历这棵语法树,所有的叶子节点都指向了一个具体的库和表(如t1.test_1)。
遍历这棵树后会得到下面三个别名:
t1.test_1
t2.test_2
t3.test_3
使用t1、t2、t3去元信息库的表查询,会得到三个真实库:
mysql_test、oracle_test、sqlserver_test。
从别名反解析得到的真实库名数量和类型,可以发现这需要查询3个数据库,是一个跨多个数据源的查询,所以需要做SQL拆分处理。
S22、从所述语法结构树的根节点开始,对所述语法结构树的各个分支按照节点顺序依次遍历,得到至少一个查询子请求。
具体的,参照图6,图6中的语法结构树有三个分支,每一分支从根节点开始遍历,会生成一个查询子请求,则该语法结构树生成三个查询子请求。
图6是JOIN再嵌套JOIN,所以需要用递归的方式再进行拆分。
拆分出来三条SQL:
1、SELECTa.idFROMmysql_testASaWHEREa.id>10
2、SELECTb.snameFROMt2.test_2ASbWHEREb.id<100
3、SELECT*FROMt3.test_3AScWHEREc.id>20
这三条SQL中的库名已经被替换成了真实的库名(别名替换为真实库名),所以这三个SQL都是可以被执行的SQL。
需要说明的是,对于图6中的FILTER节点,每一分支的该结果,代表该数据库的查询设定条件,最左边一支,t1.test_1对于的FILTER节点的内容为:WHEREa.id>10。其余FILTER节点类同。
在实际应用中,对于任意一个SQL,基于构建语法结构树得到查询子氢气的过程如下:
根据SQL的语法,普通的select*from库.表,这一定是一个针对一个数据库的查询,不可能是出现跨库查询的
而可能出现跨库的,只有多表连接的情况,有:
1)JOIN查询
2)子查询
3)UNION查询
4)UNIONALL查询
对于第二种,可以使用现有技术方案,转为JOIN查询,所以只需要处理(1)、(3)、(4)这几种就可以了。
JOIN、UNION、UNIONALL都语法上来说,都是左右两边都是子节点。
也就是上图的样子,那么出现跨两个库的查询,也就是A数据库JOIN B数据库这种情况,或者是:
A数据库UNIONB数据库,以及A数据库UNIONALLB数据库
而JOIN可以递归查询的,也就是上图中,最上面的JOIN,它的左节点,也是一个JOIN(成为JOIN’),于是再递归处理JOIN’,直到某个JOIN左右两边都是简答查询(select*from库.表这种结构)。
那么整体逻辑是:
将子查询变成JOIN查询(如果没有子查询,相当于没变化);
对JOIN、UNION、UNIONALL应用相同的逻辑;
递归的找出JOIN的左右节点,如果左右节点都是普通查询则结束;
否则,继续递归的处理左右节点,直到左右节点都是非JOIN、UNION、UNIONALL。
(3)、(4)两步中,会解析出具体的查询,也就是上图那种,将这些简单查询全部保存下来,也就拿到了跨库查询中的所有单库查询,现在的每个查询都是查询一个具体库。
根据上图其实能发现,如果有N个JOIN节点,那个可以得到N+1个普通查询,也就是N+1次查询真实的数据库,这N+1次都是一个完整查询中的部分结果。
分别执行这N+1次查询,并将结果每次查询的结果保存起来,放到一个独立的数据库,比如D中。用最开始的那个汇总查询,去查D库,就能得到最终结果
在本实施例的基础上,执行所述查询子请求,得到查询子结果,包括:
1)确定所述查询子请求对应的待查询数据库,并获取所述待查询数据库的连接配置信息。
2)通过所述连接配置信息与所述待查询数据库连接。
本实施例中,连接配置信息在上述的元信息库中查询,查询得到后,通过所述连接配置信息与所述待查询数据库连接。
3)在与所述待查询数据库成功连接后,执行所述查询子请求,得到查询子结果。
本实施例中,执行引擎执行查询子请求,得到查询子结果。如存在三条SQL,分别查询MySQL、Oracle、SQLServer这三个数据库,则分别向MySQL、Oracle、SQLServer发送三个查询子请求。
在查询得到查询子结果之后,所述查询子结果存储到同一数据库中,具体的,可以是在同一数据库确定出与所述查询子结果的数量相同的数据存储文件,并将所述查询子结果存储到相应的数据存储文件中。
仍以上述实施例为例进行说明,由于这三个SQL都是拆分后的SQL,只是最终查询SQL的一部分,所以需要将这三个SQL查询后的结果先临时保存下来,分别记作tmp_1表、tmp_2表、tmp_3表,tmp_1表、tmp_2表、tmp_3表即为上述的数据存储文件。
这三个临时表可以保存在任意的关系型数据库中,也可以保存在Hadoop(一种开源的分布式文件系统)这样的分布式文件系统中。
在得到tmp_1表、tmp_2表、tmp_3表之后,需要对tmp_1表、tmp_2表、tmp_3表的内容进行汇总。此时需要对查询请求,即原始的SQL进行改写,具体是将获取所述数据存储文件的文件名称,并将所述查询请求中的数据库名标识替换为相应的数据存储文件的文件名称,得到汇总请求。则将原始SQL(也称为汇总请求,汇总SQL)改为如下:
SELECT*FROMtmp_3AScJOIN(
SELECTa.id,b.snameFROMtmp_1ASaJOINtmp_2ASb
ONa.id=b.idWHEREa.id>10ANDb.id<100
)AStONc.id=t.idWHEREc.id>20
具体也可参照图8。此后,执行所述汇总请求,得到查询请求的查询结果。具体的,执行引擎执行该汇总SQL,去查询tmp_1、tmp_2、tmp_3表,就可以汇总得到最终结果了,这个结果就是查询MySQL、Oracle、SQLServer三个类型数据库的结果。将最终结果通过服务端返回给客户端,整个查询过程就完成了。
本实施例中,通过设置别名的方式,来区分不同数据库中的相同名称中数据库中的具体数据库。此外,通过构建结构语法树的方式,来拆分SQL,实现跨库查询功能。
可选地,在上述数据查询方法的实施例的基础上,本发明的另一实施例提供了一种数据查询装置,参照图9,包括:
请求确定模块11,用于获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求;
请求执行模块12,用于执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中;
数据汇总模块13,用于对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。
进一步,所述请求确定模块包括:
结构树生成子模块,用于生成所述查询请求的语法结构树;
遍历子模块,用于从所述语法结构树的根节点开始,对所述语法结构树的各个分支按照节点顺序依次遍历,得到至少一个查询子请求。
进一步,结构树生成子模块具体用于:
获取所述查询请求中的数据库名标识,并按照数据库名标识与实际库名的对应关系,确定所述数据库名标识对应的实际库名,生成所述查询请求的语法结构树,并将所述语法结构树中的数据库名标识替换为相应的实际库名。
进一步,请求执行模块12用于执行所述查询子请求,得到查询子结果时,具体用于:
确定所述查询子请求对应的待查询数据库,并获取所述待查询数据库的连接配置信息,通过所述连接配置信息与所述待查询数据库连接,在与所述待查询数据库成功连接后,执行所述查询子请求,得到查询子结果。
进一步,请求执行模块12用于将所述查询子结果存储到同一数据库中时,具体用于:
在同一数据库确定出与所述查询子结果的数量相同的数据存储文件,并将所述查询子结果存储到相应的数据存储文件中。
进一步,数据汇总模块13具体用于:
获取所述数据存储文件的文件名称,并将所述查询请求中的数据库名标识替换为相应的数据存储文件的文件名称,得到汇总请求,执行所述汇总请求,得到查询请求的查询结果。
本实施例中,获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求,执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中,对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。即本发明中,将查询请求拆分为查询子请求,并分别执行查询子请求,得到查询子结果后进行汇总操作。不再需要将待查询的多个不同的数据库的内容存储到同一目标数据库,节省了数据同步步骤,进而缩短了数据查询时间,提高数据查询效率。
需要说明的是,本实施例中的各个模块、子模块的工作过程,请参照上述实施例中的相应说明,在此不再赘述。
所述数据查询装置包括处理器和存储器,上述请求确定模块、请求执行模块、和数据汇总模块等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来提高数据查询效率。
本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述数据查询方法。
本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述数据查询方法。
本发明实施例提供了一种电子设备,参照图10,电子设备包括至少一个处理器701、以及与处理器701连接的至少一个存储器702、总线703;其中,处理器701、存储器702通过总线703完成相互间的通信;处理器701用于调用存储器702中的程序指令,以执行上述的数据查询方法。本文中的电子设备可以是服务器、PC、PAD、手机等。
本申请还提供了一种计算机程序产品,当在电子设备上执行时,适于执行初始化有如下方法步骤的程序:
一种数据查询方法,包括:
获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求;
执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中;
对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。
进一步,按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求,包括:
生成所述查询请求的语法结构树;
从所述语法结构树的根节点开始,对所述语法结构树的各个分支按照节点顺序依次遍历,得到至少一个查询子请求。
进一步,生成所述查询请求的语法结构树,包括:
获取所述查询请求中的数据库名标识,并按照数据库名标识与实际库名的对应关系,确定所述数据库名标识对应的实际库名;
生成所述查询请求的语法结构树,并将所述语法结构树中的数据库名标识替换为相应的实际库名。
进一步,执行所述查询子请求,得到查询子结果,包括:
确定所述查询子请求对应的待查询数据库,并获取所述待查询数据库的连接配置信息;
通过所述连接配置信息与所述待查询数据库连接;
在与所述待查询数据库成功连接后,执行所述查询子请求,得到查询子结果。
进一步,将所述查询子结果存储到同一数据库中,包括:
在同一数据库确定出与所述查询子结果的数量相同的数据存储文件,并将所述查询子结果存储到相应的数据存储文件中。
进一步,对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果,包括:
获取所述数据存储文件的文件名称,并将所述查询请求中的数据库名标识替换为相应的数据存储文件的文件名称,得到汇总请求;
执行所述汇总请求,得到查询请求的查询结果。
本申请是参照根据本申请实施例的方法、装置、电子设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程设备的处理器以产生一个机器,使得通过计算机或其他可编程设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
在一个典型的配置中,电子设备包括一个或多个处理器(CPU)、存储器和总线。电子设备还可以包括输入/输出接口、网络接口等。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种数据查询方法,其特征在于,包括:
获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求;
执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中;
对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。
2.根据权利要求1所述的数据查询方法,其特征在于,按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求,包括:
生成所述查询请求的语法结构树;
从所述语法结构树的根节点开始,对所述语法结构树的各个分支按照节点顺序依次遍历,得到至少一个查询子请求。
3.根据权利要求2所述的数据查询方法,其特征在于,生成所述查询请求的语法结构树,包括:
获取所述查询请求中的数据库名标识,并按照数据库名标识与实际库名的对应关系,确定所述数据库名标识对应的实际库名;
生成所述查询请求的语法结构树,并将所述语法结构树中的数据库名标识替换为相应的实际库名。
4.根据权利要求1所述的数据查询方法,其特征在于,执行所述查询子请求,得到查询子结果,包括:
确定所述查询子请求对应的待查询数据库,并获取所述待查询数据库的连接配置信息;
通过所述连接配置信息与所述待查询数据库连接;
在与所述待查询数据库成功连接后,执行所述查询子请求,得到查询子结果。
5.根据权利要求1所述的数据查询方法,其特征在于,将所述查询子结果存储到同一数据库中,包括:
在同一数据库确定出与所述查询子结果的数量相同的数据存储文件,并将所述查询子结果存储到相应的数据存储文件中。
6.根据权利要求1所述的数据查询方法,其特征在于,对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果,包括:
获取所述数据存储文件的文件名称,并将所述查询请求中的数据库名标识替换为相应的数据存储文件的文件名称,得到汇总请求;
执行所述汇总请求,得到查询请求的查询结果。
7.一种数据查询装置,其特征在于,包括:
请求确定模块,用于获取查询请求,并按照所述查询请求的语法结构,对所述查询请求进行拆分操作,得到至少一个查询子请求;
请求执行模块,用于执行所述查询子请求,得到查询子结果,并将所述查询子结果存储到同一数据库中;
数据汇总模块,用于对存储到同一数据库中的所述查询子结果进行汇总,得到所述查询请求的查询结果。
8.根据权利要求7所述的数据查询装置,其特征在于,所述请求确定模块包括:
结构树生成子模块,用于生成所述查询请求的语法结构树;
遍历子模块,用于从所述语法结构树的根节点开始,对所述语法结构树的各个分支按照节点顺序依次遍历,得到至少一个查询子请求。
9.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如权利要求1-6中任一项所述的数据查询方法。
10.一种电子设备,设备包括至少一个处理器、以及与处理器连接的至少一个存储器、总线;其中,所述处理器、所述存储器通过所述总线完成相互间的通信;所述处理器用于调用所述存储器中的程序指令,以执行如权利要求1-6中任一项所述的数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211007896.7A CN117667968A (zh) | 2022-08-22 | 2022-08-22 | 一种数据查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211007896.7A CN117667968A (zh) | 2022-08-22 | 2022-08-22 | 一种数据查询方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117667968A true CN117667968A (zh) | 2024-03-08 |
Family
ID=90062890
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211007896.7A Pending CN117667968A (zh) | 2022-08-22 | 2022-08-22 | 一种数据查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117667968A (zh) |
-
2022
- 2022-08-22 CN CN202211007896.7A patent/CN117667968A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107038207B (zh) | 一种数据查询方法、数据处理方法及装置 | |
CN107368503B (zh) | 基于Kettle的数据同步方法和系统 | |
Wylot et al. | Diplocloud: Efficient and scalable management of rdf data in the cloud | |
JP2017520047A (ja) | データクエリ方法及び装置 | |
US8712994B2 (en) | Techniques for accessing a parallel database system via external programs using vertical and/or horizontal partitioning | |
CN104123288A (zh) | 一种数据查询方法及装置 | |
CN109145055B (zh) | 一种基于Flink的数据同步方法和系统 | |
WO2021259217A1 (zh) | 数据的关联查询方法、装置、设备及存储介质 | |
CN113177090A (zh) | 数据处理方法及装置 | |
CN114297204A (zh) | 一种异构数据源的数据存储、检索方法及装置 | |
CN111125216B (zh) | 数据导入Phoenix的方法及装置 | |
CN113515564A (zh) | 基于j2ee的数据访问方法、装置、设备及存储介质 | |
CN111078728B (zh) | 一种数据库归档模式下跨库查询方法和装置 | |
CN107220265B (zh) | 一种数据库语句编译和执行方法及装置 | |
CN112541001A (zh) | 数据查询方法、装置、存储介质及设备 | |
US11620285B2 (en) | Automatic database query translation | |
CN117667968A (zh) | 一种数据查询方法及装置 | |
CN112527792A (zh) | 一种数据存储方法、装置、设备和存储介质 | |
CN111125090A (zh) | 数据存取方法及装置 | |
US10042957B2 (en) | Devices and methods for implementing dynamic collaborative workflow systems | |
CN113268483A (zh) | 请求处理方法和装置、电子设备和存储介质 | |
CN112749189A (zh) | 数据查询方法及装置 | |
CN108228604B (zh) | 基于内存对象的模型构建方法、信息查询方法及装置 | |
CN111813801B (zh) | 一种数据检索方法及装置 | |
CN114969200B (zh) | 数据同步方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |