CN116089476B - 数据查询方法、装置及电子设备 - Google Patents
数据查询方法、装置及电子设备 Download PDFInfo
- Publication number
- CN116089476B CN116089476B CN202310364018.9A CN202310364018A CN116089476B CN 116089476 B CN116089476 B CN 116089476B CN 202310364018 A CN202310364018 A CN 202310364018A CN 116089476 B CN116089476 B CN 116089476B
- Authority
- CN
- China
- Prior art keywords
- target
- node
- query
- type
- execution plan
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- 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
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种数据查询方法、装置及电子设备,涉及数据处理技术领域,该方法包括:获取待查询的查询语句;待查询的查询语句是基于至少一种数据源的配置信息确定的;配置信息包括数据源名称和数据源类型;将待查询的查询语句转化为抽象语法树;抽象语法树包括至少一个语法节点;各语法节点分别对应初始查询类型;基于各初始查询类型、待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对抽象语法树进行分解转化,确定目标逻辑执行计划;目标逻辑执行计划包括至少一个子逻辑执行计划;基于目标逻辑执行计划,确定查询结果,通过目标逻辑执行计划可以查询多种数据源对应的数据,提升了数据的查询能力和应用能力。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种数据查询方法、装置及电子设备。
背景技术
随着网络设备的更新优化和网络技术的不断成熟,每个服务和应用处理的数据呈现爆炸性增加,每个服务和应用处理的数据都在太兆(TB)级。在数据处理的过程中,涉及多种数据存储介质,而每种数据存储介质都提供了自身的数据存储方法。
当每增加一种数据存储介质,服务和应用就需要去学习数据存储的方法和优化方案,这无疑增加了程序开发的周期和难度,而且如果我们需要查询各种数据存储介质中的关联数据时没有统一的方案,这也增加了服务开发时的复杂度。因此,提供一种能够查询多种数据存储介质中存储的不同类型的数据是亟需解决的问题。
发明内容
本发明提供一种数据查询方法、装置及电子设备,用以提供一种能够查询多种数据存储介质中存储的不同类型的数据的技术方案。
本发明提供一种数据查询方法,包括:
获取待查询的查询语句;所述待查询的查询语句是基于至少一种数据源的配置信息确定的;所述配置信息包括数据源名称和数据源类型;
将所述待查询的查询语句转化为抽象语法树;所述抽象语法树包括至少一个语法节点;各所述语法节点分别对应初始查询类型;
基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对所述抽象语法树进行分解转化,确定目标逻辑执行计划;所述目标逻辑执行计划包括至少一个子逻辑执行计划;
基于所述目标逻辑执行计划,确定查询结果。
根据本发明提供的一种数据查询方法,所述基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对所述抽象语法树进行分解转化,确定目标逻辑执行计划,包括:
基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,将各所述语法节点分解转化为各所述数据源的查询语法,并将所述查询语法封装至预先构建的初始逻辑执行计划当中,得到所述目标逻辑执行计划。
根据本发明提供的一种数据查询方法,所述将各所述语法节点分解转化为各所述数据源的查询语法,并将所述查询语法封装至预先构建的初始逻辑执行计划当中,得到所述目标逻辑执行计划,包括:
判断所述抽象语法树中包括的第一语法节点对应的所述初始查询类型是否为预设的第一目标类型;
在所述第一语法节点对应的所述初始查询类型为第一目标类型的情况下,将所述第一语法节点转化为所述第一目标类型对应的第一目标节点;
依次从所述第一目标节点中取出至少一个第一子节点,并将各所述第一子节点分别封装至所述初始逻辑执行计划中的第一目标模型;
从所述第一目标节点中取出第二子节点;
在所述第二子节点对应的所述初始查询类型不满足第二目标类型的情况下,将所述第二子节点封装至所述初始逻辑执行计划中的第二目标模型;
在所述第二子节点对应的所述初始查询类型满足第二目标类型的情况下,将所述第二子节点转化为所述第二目标类型对应的第二目标节点;
基于所述第一目标模型、所述第二目标模型和所述第二目标节点,确定所述目标逻辑执行计划。
根据本发明提供的一种数据查询方法,所述基于所述第一目标模型、所述第二目标模型和所述第二目标节点,确定所述目标逻辑执行计划,包括:
从所述第二目标节点中取出第三子节点,并构建第一子逻辑执行计划;
将所述第三子节点封装至所述第一子逻辑执行计划中的第二子节点;
取出与所述第二目标节点中的第四子节点的关联条件,并将所述关联条件封装至所述第一子逻辑执行计划中的第一条件;
将所述第二目标节点的类型封装至所述第一子逻辑执行计划中的关联类型中;
从所述第二子节点中取出与所述第三子节点对应的查询条件,并将所述查询条件封装至所述第一子逻辑执行计划中的所述第一目标模型;
将所述第一子逻辑执行计划封装至所述初始逻辑执行计划中的异步执行列表;
从所述第二目标节点中取出所述第四子节点,并判断所述第四子节点对应的所述初始查询类型是否为所述第二目标类型;
在所述第四子节点对应的所述初始查询类型满足所述第二目标类型的情况下,将所述第四子节点转化为所述第二目标类型对应的第二目标节点;
在所述第四子节点对应的所述初始查询类型不满足所述第二目标类型的情况下,将所述第四子节点封装至所述初始逻辑执行计划中的所述第二目标模型;
基于所述第一目标模型、所述第二目标模型和所述异步执行列表,确定所述目标逻辑执行计划。
根据本发明提供的一种数据查询方法,所述方法还包括:
在所述抽象语法树中包括的第一语法节点对应的所述初始查询类型为第三目标类型的情况下,将所述第一语法节点转化为所述第三目标类型对应的第三目标节点;
依次从所述第三目标节点中取出至少一个第五子节点;
将各所述第五子节点分别封装至所述初始逻辑执行计划中的第三目标模型;
从所述第三目标节点中取出第六子节点,重复执行上述判断所述抽象语法树中包括的第一语法节点对应的所述初始查询类型是否为预设的第一目标类型的步骤。
根据本发明提供的一种数据查询方法,所述方法还包括:
在所述第一子节点中包括子查询节点的情况下,将所述子查询节点对应的第二子逻辑执行计划封装至所述初始逻辑执行计划中的同步执行列表。
根据本发明提供的一种数据查询方法,所述基于所述目标逻辑执行计划,确定查询结果,包括:
判断所述目标逻辑执行计划中的所述第一目标模型是否存在;
在所述第一目标模型存在的情况下,基于所述第二子节点,确定目标数据源类型;
在所述同步执行列表不为空的情况下,执行所述同步执行列表,并将执行结果作为构建查询的查询条件;
基于所述目标数据源类型,将所述查询条件转化为所述目标数据源类型对应的查询语法;
调用所述目标数据源类型对应的查询驱动,得到查询结果。
根据本发明提供的一种数据查询方法,所述方法还包括:
在所述第一目标模型不存在的情况下,判断所述异步执行列表是否为空;
在所述异步执行列表不为空的情况下,获取每个异步执行列表的执行结果;
将每个异步执行列表的执行结果合并为一个结果集;
对所述结果集进行过滤,得到过滤后的查询结果。
本发明还提供一种数据查询装置,包括:
第一获取模块,用于获取待查询的查询语句;所述待查询的查询语句是基于至少一种数据源的配置信息确定的;所述配置信息包括数据源名称和数据源类型;
抽象模块,用于将所述待查询的查询语句转化为抽象语法树;所述抽象语法树包括至少一个语法节点;各所述语法节点分别对应初始查询类型;
分解模块,用于基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对所述抽象语法树进行分解转化,确定目标逻辑执行计划;所述目标逻辑执行计划包括至少一个子逻辑执行计划;
确定模块,用于基于所述目标逻辑执行计划,确定查询结果。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述数据查询方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述数据查询方法。
本发明提供的数据查询方法、装置及电子设备,通过获取待查询的查询语句,待查询的查询语句是基于至少一种数据源的配置信息确定的,配置信息包括数据源名称和数据源类型;再将待查询的查询语句转化为抽象语法树,抽象语法树包括至少一个语法节点;各语法节点分别对应初始查询类型;基于各初始查询类型、待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对抽象语法树进行分解转化,确定目标逻辑执行计划;目标逻辑执行计划包括至少一个子逻辑执行计划;再基于目标逻辑执行计划,确定查询结果,实现了将抽象语法树分解转化为目标逻辑执行计划,进而可以查询多种数据源对应的数据,提升了服务应用开发时不同存储介质中数据的查询能力和数据的应用能力,缩短服务应用的开发周期,提升了工作效率。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的数据查询方法的流程示意图;
图2是本发明提供的将多个语法节点分解转化为多个数据源的查询语法的流程示意图;
图3是本发明提供的执行查询得到查询结果的流程示意图;
图4是本发明提供的数据查询装置的结构示意图;
图5是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图3描述本发明的数据查询方法。
图1是本发明提供的数据查询方法的流程示意图,如图1所示,该方法包括步骤101-步骤104;其中,
步骤101,获取待查询的查询语句;所述待查询的查询语句是基于至少一种数据源的配置信息确定的;所述配置信息包括数据源名称和数据源类型。
需要说明的是,本发明提供的数据查询方法适用于数据查询的场景中,该方法的执行主体可以为数据查询装置,例如电子设备、或者该数据查询装置中的用于执行数据查询方法的控制模块。
具体地,在查询数据之前,需要将查询的至少一种数据源的配置信息配置进查询系统,并且为每一种数据源设置一个全局唯一的数据源名称,数据源对应的数据可以为结构化数据,也可以为半结构化数据。例如,使用jdbc查询结构化数据时,将数据库的连接信息、用户名和密码信息配置到查询系统中;在查询文件、JSON和XML数据时,将查询文件、JSON和XML数据的配置信息配置到查询系统中,方便后续查询时获取到相应的配置信息。
表1为数据源的配置信息,如表1所示,配置信息主要包括数据源名称、数据源类型、服务器IP、端口、路径、用户名和密码等信息。需要说明的是,表1中所示的配置信息只是一些常见的配置项,具体可以根据不同数据源增加相关的专项配置,以提高数据源的可用性。
表1. 数据源的配置信息
进一步地,在将配置信息配置完成之后,采用sql语言编写待查询的查询语句。由于sql语言可以兼容sql-99的所有查询语法标准,而且sql在结构化数据查询过程中的优势非常明显,已经被大部分人所熟知和掌握,从而来提高查询的易用性。需要说明的是,编写的待查询的查询语句的表名称前需要加上数据源名称,根据数据源名称可以获知针对的是哪个数据源进行的数据查询。
例如,配置了Mysql和Oracle数据源,其中,Mysql如下:
[
{
"dataSource": "mysql",
"jdbcDriver": "com.mysql.jdbc.Driver",
"jdbcUrl": "jdbc:mysql://localhost:3306/test",
"jdbcUser": "root",
"jdbcPassword": "123456"
},
{
"dataSource": "oracle",
"jdbcDriver": "oracle.jdbc.OracleDriver",
"jdbcUrl": "jdbc:oracle:thin:@localhost:1521:xe",
"jdbcUser": "TEST",
"jdbcPassword": "123456"
}
]
针对这样的数据源配置,待查询的查询语句可以为:select m.id,m.name,o.id,o.name from mysql.test1 m inner join oracle.test2 o on m.id = o.id where id>1。
步骤102,将所述待查询的查询语句转化为抽象语法树;所述抽象语法树包括至少一个语法节点;各所述语法节点分别对应初始查询类型。
具体地,采用JavaCC及JJTree工具,将获取的待查询的查询语句转化为抽象成语法树;其中,抽象语法树包括至少一个语法节点,例如,语法节点为from节点、select节点、join节点和where节点。初始查询类型为抽象语法树中各语法节点的类型。
步骤103,基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对所述抽象语法树进行分解转化,确定目标逻辑执行计划;所述目标逻辑执行计划包括至少一个子逻辑执行计划。
具体地,查询各个数据源的语法需要遍历抽象语法树,根据抽象语法树中各个语法节点的初始查询类型、待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对抽象语法树进行分解转化,将待查询的查询语句分解为各种数据源的查询语法,并将查询语法封装至预先构建的初始逻辑执行计划当中,得到目标逻辑执行计划;其中,目标逻辑执行计划包括至少一个子逻辑执行计划。
目标逻辑执行计划如下所示:
ExecuteSqlStack
dataSourceType:String
joinType:String
JoinCondition:List<JoinConditionModel>
returnFields:List<ReturnResultModel>
fromModel:FromModel
whereModel: WhereModel
groupByModel:GroupByModel
havingModel: HavingModel
orderListModel:OrderListModel
fetch:Integer
offset:Integer
synList:List<ExecuteSqlStack>
asynList:Stack<ExecuteSqlStack>
其中,returnFields、FromModel、WhereModel、GroupByModel、HavingModel和OrderListModel中都有两个属性初始查询类型(original)和目标查询类型(target)两个属性;其中,original用来存放原始的从抽象语法树中分解出来的语法节点,target用来存放由抽象语法树节点根据待查询的查询语句中包括的多个数据源类型转化为各数据源类型对应的查询语法。
步骤104,基于所述目标逻辑执行计划,确定查询结果。
具体地,根据目标逻辑执行计划,可以进一步确定最终的查询结果。
本发明提供的数据查询方法,通过获取待查询的查询语句,待查询的查询语句是基于至少一种数据源的配置信息确定的,配置信息包括数据源名称和数据源类型;再将待查询的查询语句转化为抽象语法树,抽象语法树包括至少一个语法节点;各语法节点分别对应初始查询类型;基于各初始查询类型、待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对抽象语法树进行分解转化,确定目标逻辑执行计划;目标逻辑执行计划包括至少一个子逻辑执行计划;再基于目标逻辑执行计划,确定查询结果,实现了将抽象语法树分解转化为目标逻辑执行计划,进而可以查询多种数据源对应的数据,提升了服务应用开发时不同存储介质中数据的查询能力和数据的应用能力,缩短服务应用的开发周期,提升了工作效率。
可选地,上述步骤103的具体实现方式包括以下步骤:
基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,将各所述语法节点分解转化为各所述数据源的查询语法,并将所述查询语法封装至预先构建的初始逻辑执行计划当中,得到所述目标逻辑执行计划。
具体地,根据抽象语法树中的各语法节点分别对应的初始查询类型、待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,通过遍历抽象语法树中的每个语法节点,将各语法节点分解转化为待查询的查询语句中各数据源的查询语法。进一步地,预先构建一个初始逻辑执行计划,再将分解转化之后的查询语法封装至预先构建的初始逻辑执行计划当中,可以进一步得到目标逻辑执行计划。
接下来对将各语法节点分解转化为各数据源的查询语法的具体实现过程进行进一步的描述。
可选地,所述将各所述语法节点分解转化为各所述数据源的查询语法,并将所述查询语法封装至预先构建的初始逻辑执行计划当中,得到所述目标逻辑执行计划,包括:
a)判断所述抽象语法树中包括的第一语法节点对应的所述初始查询类型是否为预设的第一目标类型。
具体地,第一语法节点为SqlNode节点,第一目标类型为SqlSelect类型,即判断SqlNode节点对应的初始查询类型是否为SqlSelect类型。
b)在所述第一语法节点对应的所述初始查询类型为第一目标类型的情况下,将所述第一语法节点转化为所述第一目标类型对应的第一目标节点。
具体地,第一目标节点为SqlSelect节点。在第一语法节点对应的初始查询类型为第一目标类型的情况下,将第一语法节点转化为SqlSelect节点。
c)依次从所述第一目标节点中取出至少一个第一子节点,并将各所述第一子节点分别封装至所述初始逻辑执行计划中的第一目标模型。
具体地,第一子节点为SelectList节点、GroupBy节点、Having节点或者Where节点,第一目标模型为ReTurnFidlds、GroupByModel、HavingModel或者WhereModel。依次从第一目标节点(SqlSelect节点)中取出查询的SelectList节点、GroupBy节点、Having节点或者Where节点,并将SelectList节点、GroupBy节点、Having节点或者Where节点分别封装至初始逻辑执行计划中的ReTurnFidlds、GroupByModel、HavingModel或者WhereModel的结构中。
d)从所述第一目标节点中取出第二子节点。
具体地,第二子节点为From节点。再从第一目标节点(SqlSelect节点)中取出From节点。
e)在所述第二子节点对应的所述初始查询类型不满足第二目标类型的情况下,将所述第二子节点封装至所述初始逻辑执行计划中的第二目标模型。
具体地,第二目标类型为join类型,第二目标模型为FromModel。判断第二子节点(From节点)对应的初始查询类型是否为join类型;在第二子节点(From节点)对应的初始查询类型不是join类型的情况下,将第二子节点(From节点)封装至初始逻辑执行计划中的第二目标模型(FromModel)结构中。
f)在所述第二子节点对应的所述初始查询类型满足第二目标类型的情况下,将所述第二子节点转化为所述第二目标类型对应的第二目标节点。
具体地,第二目标节点为SqlJoinNode节点。在第二子节点对应的初始查询类型满足第二目标类型的情况下,将第二子节点(From节点)转化为第二目标类型(join类型)对应的第二目标节点(SqlJoinNode节点)。
g)基于所述第一目标模型、所述第二目标模型和所述第二目标节点,确定所述目标逻辑执行计划。
具体地,根据第一目标模型、第二目标模型和第二目标节点,可以进一步确定目标逻辑执行计划。
可选地,所述基于所述第一目标模型、所述第二目标模型和所述第二目标节点,确定所述目标逻辑执行计划,包括:
1)从所述第二目标节点中取出第三子节点,并构建第一子逻辑执行计划。
具体地,第三子节点为第二目标节点的right节点,其中,right节点可以为具体的查询表格。从第二目标节点(SqlJoinNode节点)中取出第三子节点,并构建一个新的第一子逻辑执行计划。
2)将所述第三子节点封装至所述第一子逻辑执行计划中的第二子节点。
具体地,将第三子节点(right节点)封装至第一子逻辑执行计划中的第二子节点(From节点)。
3)取出与所述第二目标节点中的第四子节点的关联条件,并将所述关联条件封装至所述第一子逻辑执行计划中的第一条件。
具体地,第四子节点为left节点,第一条件为JoinCondition。取出与第二目标节点中的第四子节点(left节点)的关联条件,并将关联条件封装至第一子逻辑执行计划中的第一条件(JoinCondition)。
4)将所述第二目标节点的类型封装至所述第一子逻辑执行计划中的关联类型中。
具体地,关联类型为joinType。取出第二目标节点(join节点)的类型,并将join节点的类型封装至第一子逻辑执行计划中的关联类型(joinType)中。
5)从所述第二子节点中取出与所述第三子节点对应的查询条件,并将所述查询条件封装至所述第一子逻辑执行计划中的所述第一目标模型。
具体地,从第二子节点(From节点)中取出与第三子节点(right节点)同表的查询条件,并将查询条件封装至第一子逻辑执行计划中的第一目标模型(WhereModel)中。
6)将所述第一子逻辑执行计划封装至所述初始逻辑执行计划中的异步执行列表。
具体地,异步执行列表为asynList。将第一子逻辑执行计划封装至初始逻辑执行计划中的异步执行列表(asynList)。
7)从所述第二目标节点中取出所述第四子节点,并判断所述第四子节点对应的所述初始查询类型是否为所述第二目标类型。
具体地,从第二目标节点(SqlJoinNode节点)中取出第四子节点(left节点),进一步判断第四子节点对应的初始查询类型是否为join类型。
8)在所述第四子节点对应的所述初始查询类型满足所述第二目标类型的情况下,将所述第四子节点转化为所述第二目标类型对应的第二目标节点。
具体地,在第四子节点对应的初始查询类型是第二目标类型的情况下,返回将第四子节点转化为第二目标类型对应的第二目标节点的执行逻辑。
9)在所述第四子节点对应的所述初始查询类型不满足所述第二目标类型的情况下,将所述第四子节点封装至所述初始逻辑执行计划中的所述第二目标模型。
具体地,在所述第四子节点对应的初始查询类型不是第二目标类型的情况下,返回将第四子节点封装至初始逻辑执行计划中的第二目标模型(FromModel)结构中的执行逻辑。
10)基于所述第一目标模型、所述第二目标模型和所述异步执行列表,确定所述目标逻辑执行计划。
具体地,根据第一目标模型、第二目标模型和异步执行列表,分别将第一目标模型、第二目标模型和异步执行列表封装至初始逻辑执行计划中,得到目标逻辑执行计划。
可选地,所述方法还包括:
1、在所述抽象语法树中包括的第一语法节点对应的所述初始查询类型为第三目标类型的情况下,将所述第一语法节点转化为所述第三目标类型对应的第三目标节点。
具体地,第三目标类型为SqlOrderBy类型,第三目标节点为SqlOrderBy节点。在判断抽象语法树中包括的第一语法节点(SqlNode节点)对应的初始查询类型为第三目标类型(SqlOrderBy类型)的情况下,将第一语法节点(SqlNode节点)转化为第三目标类型(SqlOrderBy类型)对应的第三目标节点(SqlOrderBy节点)。
2、依次从所述第三目标节点中取出至少一个第五子节点。
具体地,第五子节点为Fetch节点、Offset节点或者OrderByList节点。依次从第三目标节点(SqlOrderBy节点)中取出Fetch节点、Offset节点和OrderByList节点。
3、将各所述第五子节点分别封装至所述初始逻辑执行计划中的第三目标模型。
具体地,第三目标模型为Fetch、Offset或者OrderListModel。将Fetch节点、Offset节点和OrderByList节点分别封装至初始逻辑执行计划中的Fetch、Offset或者OrderListModel的结构中。
4、从所述第三目标节点中取出第六子节点,重复执行上述判断所述抽象语法树中包括的第一语法节点对应的所述初始查询类型是否为预设的第一目标类型的步骤。
具体地,第六子节点为Query节点。再从第三目标节点(SqlOrderBy节点)中取出Query节点,返回再次重复执行上述判断抽象语法树中包括的第一语法节点对应的初始查询类型是否为预设的第一目标类型的步骤。
可选地,所述方法还包括:
在所述第一子节点中包括子查询节点的情况下,将所述子查询节点对应的第二子逻辑执行计划封装至所述初始逻辑执行计划中的同步执行列表。
具体地,在第一子节点(Where节点或者SelectList节点)中如果包括子查询的节点的情况下,子查询的节点的分解的具体实现过程如上述判断抽象语法树中包括的第一语法节点对应的初始查询类型是否为预设的第一目标类型的步骤,唯独不同之处在于将子查询节点对应的第二子逻辑执行计划(即新构建的子逻辑执行计划)封装至同步执行逻辑集合中的同步执行列表(synList)中,使得在具体执行目标逻辑执行计划时会先执行同步执行同步执行列表(synList)中的查询,并将查询的结果整体作为条件或者返回值传入整体的查询中。
图2是本发明提供的将多个语法节点分解转化为多个数据源的查询语法的流程示意图,如图2所示,包括:
步骤201,判断第一语法节点(SqlNode节点)对应的初始查询类型是否为预设的第一目标类型(SqlSelect类型)。若第一语法节点(SqlNode节点)对应的初始查询类型为预设的第一目标类型(SqlSelect类型),则转至步骤202;若第一语法节点(SqlNode节点)对应的初始查询类型不是预设的第一目标类型(SqlSelect类型),转至步骤212。
步骤202,将第一语法节点(SqlNode节点)转化为第一目标类型对应的第一目标节点(SqlSelect节点)。
步骤203,依次从第一目标节点(SqlSelect节点)中取出至少一个第一子节点(SelectList节点、GroupBy节点、Having节点和Where节点),并将每个第一子节点分别封装至初始逻辑执行计划中的第一目标模型(ReTurnFidlds、GroupByModel、HavingModel或者WhereModel)的结构中。
步骤204,从第一目标节点(SqlSelect节点)中取出第二子节点(From节点)。
步骤205,判断第二子节点(From节点)对应的初始查询类型是否为第二目标类型(join类型)。在第二子节点(From节点)对应的初始查询类型不是第二目标类型(join类型)的情况下,转至步骤206;在第二子节点(From节点)对应的初始查询类型是第二目标类型(join类型)的情况下,转至步骤207。
步骤206,将第二子节点(From节点)封装至初始逻辑执行计划中的第二目标模型(FromModel)的结构中。
步骤207,将第二子节点(From节点)转化为第二目标类型对应的第二目标节点(SqlJoinNode节点);从第二目标节点(SqlJoinNode节点)中取出第三子节点(right节点),并构建第一子逻辑执行计划;将第三子节点(right节点)封装至第一子逻辑执行计划中的第二子节点(From节点);取出与第二目标节点中的第四子节点(left节点)的关联条件,并将关联条件封装至第一子逻辑执行计划中的第一条件(JoinCondition);取出第二目标节点(join节点)的类型,并将join节点的类型封装至第一子逻辑执行计划中的关联类型(joinType)中;从第二子节点(From节点)中取出与第三子节点(right节点)同表的查询条件,并将查询条件封装至第一子逻辑执行计划中的第一目标模型(WhereModel)中,将第一子逻辑执行计划封装至初始逻辑执行计划中的异步执行列表(asynList)。
步骤208,从第二目标节点(SqlJoinNode节点)中取出第四子节点(left节点),转至步骤205,即判断第四子节点对应的初始查询类型是否为第二目标类型(join类型)。在第四子节点对应的初始查询类型是第二目标类型的情况下,转至步骤207,即将第四子节点转化为第二目标类型对应的第二目标节点的执行逻辑;在第四子节点对应的初始查询类型不满足第二目标类型的情况下,将第四子节点封装至初始逻辑执行计划中的第二目标模型(FromModel)结构中的执行逻辑。
步骤209,根据第一目标模型、第二目标模型和异步执行列表,确定目标逻辑执行计划(组装结果)。
步骤210,在判断抽象语法树中包括的第一语法节点(SqlNode节点)对应的初始查询类型为第三目标类型(SqlOrderBy类型)的情况下,将第一语法节点(SqlNode节点)转化为第三目标类型(SqlOrderBy类型)对应的第三目标节点(SqlOrderBy节点)。
步骤211,依次从第三目标节点(SqlOrderBy节点)中取出至少一个第五子节点(Fetch节点、Offset节点和OrderByList节点)。将Fetch节点、Offset节点和OrderByList节点分别封装至初始逻辑执行计划中的Fetch、Offset和OrderListModel的结构中。
步骤212,从第三目标节点(SqlOrderBy节点)中取出第六子节点(Query节点),返回再次重复执行上述步骤201。
本发明提供的数据查询方法,通过对抽象语法树中的多个语法节点进行分解转化为各数据源的查询语法,从而得到目标逻辑执行计划,使得在具体执行数据查询时,可以查询不同数据源的数据,以及能够查询不同数据存储介质中不同结构的数据,不会受到数据源的限制,从而提高了服务应用开发时不同存储介质中数据的应用和查询能力,缩短服务和应用的开发周期,提高工作效率。
可选地,所述基于所述目标逻辑执行计划,确定查询结果,包括:
1)判断所述目标逻辑执行计划中的所述第一目标模型是否存在。
具体地,第一目标模型为FromModel,判断目标逻辑执行计划中的第一目标模型(FromModel)是否存在。
2)在所述第一目标模型存在的情况下,基于所述第二子节点,确定目标数据源类型。
具体地,在第一目标模型(FromModel)存在的情况下,通过第二子节点(From节点)获取到目标数据源类型和表信息。
3)在所述同步执行列表不为空的情况下,执行所述同步执行列表,并将执行结果作为构建查询的查询条件。
具体地,判断同步执行列表是否为空,由于同步执行列表中存储的是子查询的节点,因此,在同步执行列表不为空的情况下,先执行同步执行列表,并将同步执行列表的执行结果作为构建查询的查询条件。
4)基于所述目标数据源类型,将所述查询条件转化为所述目标数据源类型对应的查询语法。
具体地,根据目标数据源类型,将查询条件转化为目标数据源类型对应的查询语法。例如,查询表为user,查询条件为id>1 and age<30,如果目标数据源类型为jdbc,则转化完的查询语法为:select m.id,m.name,o.id,o.name from user where id>1 and age<30;如果目标数据源类型为ElasticSearch,则转化完的查询语法为:
GET user/_search
{
“query”:{
“range”:{
“id”:{
“gte”:1,
},
“age”:{
“lte”:30
}
}
}
}
需要说明的是,目标逻辑执行计划中的其他节点的转化与Where节点的转化类似,对此不再重复。
5)调用所述目标数据源类型对应的查询驱动,得到查询结果。
具体地,查询驱动即为目标数据源的查询驱动,例如,目标数据源类型为Mysql,则查询驱动为Mysql的查询驱动。调用目标数据类型对应的查询驱动,可以得到查询结果。
可选地,所述方法还包括:
a)在所述第一目标模型不存在的情况下,判断所述异步执行列表是否为空。
具体地,由于异步执行列表中存储的是第一子逻辑执行计划,因此,在判断目标逻辑执行计划中的第一目标模型(FromModel)不存在的情况下,进一步判断异步执行列表是否为空。
b)在所述异步执行列表不为空的情况下,获取每个异步执行列表的执行结果。
具体地,在异步执行列表不为空的情况下,获取每个异步执行列表中第一子逻辑执行计划的执行结果。需要说明的是,每个第一子逻辑执行执行计划均是预先开始执行一次,得到每个第一子逻辑执行计划的执行结果。
c)将每个异步执行列表的执行结果合并为一个结果集。
具体地,从第一子逻辑执行计划中判断joinType类型,再结合关联条件,将两个异步执行列表的执行结果合并为一个结果,进而依次类推将所有异步执行列表的执行结果合并为一个结果集。
d)对所述结果集进行过滤,得到过滤后的查询结果。
具体地,在结果集上先执行查询条件过滤,即将结果集根据相应的查询条件进行过滤,得到过滤后的查询结果集,并返回过滤后的查询结果。进一步地,针对过滤后的查询结果集,如果分组、排序和获取查询结果集数量的操作都可以在过滤后的查询结果集上执行。
图3是本发明提供的执行查询得到查询结果的流程示意图,如图3所示,需要说明的是,执行查询的前提条件是将一个融合查询已经完全分解到目标逻辑执行计划中,执行查询得到查询结果的具体执行逻辑包括步骤301-步骤313,其中:
步骤301,判断目标逻辑执行计划中的第一目标模型(FromModel)是否存在;在第一目标模型存在的情况下,转至步骤302;在第一目标模型不存在的情况下,转至步骤307。
步骤302,基于第二子节点,确定目标数据源类型。
步骤303,判断同步执行列表是否为空。在同步执行列表不为空的情况下,转至步骤304;在同步执行列表不为空的情况下,转至步骤313。
步骤304,先执行同步执行列表,并将同步执行列表的执行结果作为构建查询的查询条件。
步骤305,基于目标数据源类型,将查询条件转化为目标数据源类型对应的查询语法。
步骤306,调用所述目标数据源类型对应的查询驱动,得到查询结果。
步骤307,判断异步执行列表是否为空。在异步执行列表不为空的情况下,转至步骤308;在异步执行列表为空的情况下,转至步骤313。
步骤308,获取每个异步执行列表的执行结果。
步骤309,将每个异步执行列表的执行结果合并为一个结果集。
步骤310,对结果集进行过滤,得到过滤后的查询结果。
步骤311,执行分组和排序。
步骤312,获取查询结果集数量。
步骤313,结束。
下面对本发明提供的数据查询装置进行描述,下文描述的XX装置与上文描述的数据查询方法可相互对应参照。
图4是本发明提供的数据查询装置的结构示意图,如图4所示,数据查询装置400包括第一获取模块401、抽象模块402、分解模块403和确定模块404;其中,
第一获取模块401,用于获取待查询的查询语句;所述待查询的查询语句是基于至少一种数据源的配置信息确定的;所述配置信息包括数据源名称和数据源类型;
抽象模块402,用于将所述待查询的查询语句转化为抽象语法树;所述抽象语法树包括至少一个语法节点;各所述语法节点分别对应初始查询类型;
分解模块403,用于基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对所述抽象语法树进行分解转化,确定目标逻辑执行计划;所述目标逻辑执行计划包括至少一个子逻辑执行计划;
确定模块404,用于基于所述目标逻辑执行计划,确定查询结果。
本发明提供的数据查询装置,通过获取待查询的查询语句,待查询的查询语句是基于至少一种数据源的配置信息确定的,配置信息包括数据源名称和数据源类型;再将待查询的查询语句转化为抽象语法树,抽象语法树包括至少一个语法节点;各语法节点分别对应初始查询类型;基于各初始查询类型、待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对抽象语法树进行分解转化,确定目标逻辑执行计划;目标逻辑执行计划包括至少一个子逻辑执行计划;再基于目标逻辑执行计划,确定查询结果,实现了将抽象语法树分解转化为目标逻辑执行计划,进而可以查询多种数据源对应的数据,提升了服务应用开发时不同存储介质中数据的查询能力和数据的应用能力,缩短服务应用的开发周期,提升了工作效率。
可选地,所述分解模块403,具体用于:
基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,将各所述语法节点分解转化为各所述数据源的查询语法,并将所述查询语法封装至预先构建的初始逻辑执行计划当中,得到所述目标逻辑执行计划。
可选地,所述分解模块403,具体用于:
判断所述抽象语法树中包括的第一语法节点对应的所述初始查询类型是否为预设的第一目标类型;
在所述第一语法节点对应的所述初始查询类型为第一目标类型的情况下,将所述第一语法节点转化为所述第一目标类型对应的第一目标节点;
依次从所述第一目标节点中取出至少一个第一子节点,并将各所述第一子节点分别封装至所述初始逻辑执行计划中的第一目标模型;
从所述第一目标节点中取出第二子节点;
在所述第二子节点对应的所述初始查询类型不满足第二目标类型的情况下,将所述第二子节点封装至所述初始逻辑执行计划中的第二目标模型;
在所述第二子节点对应的所述初始查询类型满足第二目标类型的情况下,将所述第二子节点转化为所述第二目标类型对应的第二目标节点;
基于所述第一目标模型、所述第二目标模型和所述第二目标节点,确定所述目标逻辑执行计划。
可选地,所述分解模块403,具体用于:
从所述第二目标节点中取出第三子节点,并构建第一子逻辑执行计划;
将所述第三子节点封装至所述第一子逻辑执行计划中的第二子节点;
取出与所述第二目标节点中的第四子节点的关联条件,并将所述关联条件封装至所述第一子逻辑执行计划中的第一条件;
将所述第二目标节点的类型封装至所述第一子逻辑执行计划中的关联类型中;
从所述第二子节点中取出与所述第三子节点对应的查询条件,并将所述查询条件封装至所述第一子逻辑执行计划中的所述第一目标模型;
将所述第一子逻辑执行计划封装至所述初始逻辑执行计划中的异步执行列表;
从所述第二目标节点中取出所述第四子节点,并判断所述第四子节点对应的所述初始查询类型是否为所述第二目标类型;
在所述第四子节点对应的所述初始查询类型满足所述第二目标类型的情况下,将所述第四子节点转化为所述第二目标类型对应的第二目标节点;
在所述第四子节点对应的所述初始查询类型不满足所述第二目标类型的情况下,将所述第四子节点封装至所述初始逻辑执行计划中的所述第二目标模型;
基于所述第一目标模型、所述第二目标模型和所述异步执行列表,确定所述目标逻辑执行计划。
可选地,所述数据查询装置400还包括:
转化模块,用于在所述抽象语法树中包括的第一语法节点对应的所述初始查询类型为第三目标类型的情况下,将所述第一语法节点转化为所述第三目标类型对应的第三目标节点;
第二获取模块,用于依次从所述第三目标节点中取出至少一个第五子节点;
第一封装模块,用于将各所述第五子节点分别封装至所述初始逻辑执行计划中的第三目标模型;
第三获取模块,用于从所述第三目标节点中取出第六子节点,重复执行上述判断所述抽象语法树中包括的第一语法节点对应的所述初始查询类型是否为预设的第一目标类型的步骤。
可选地,所述数据查询装置400还包括:
第二封装模块,用于在所述第一子节点中包括子查询节点的情况下,将所述子查询节点对应的第二子逻辑执行计划封装至所述初始逻辑执行计划中的同步执行列表。
可选地,所述确定模块404,具体用于:
判断所述目标逻辑执行计划中的所述第一目标模型是否存在;
在所述第一目标模型存在的情况下,基于所述第二子节点,确定目标数据源类型;
在所述同步执行列表不为空的情况下,执行所述同步执行列表,并将执行结果作为构建查询的查询条件;
基于所述目标数据源类型,将所述查询条件转化为所述目标数据源类型对应的查询语法;
调用所述目标数据源类型对应的查询驱动,得到查询结果。
可选地,所述数据查询装置400还包括:
判断模块,用于在所述第一目标模型不存在的情况下,判断所述异步执行列表是否为空;
第四获取模块,用于在所述异步执行列表不为空的情况下,获取每个异步执行列表的执行结果;
合并模块,用于将每个异步执行列表的执行结果合并为一个结果集;
过滤模块,用于对所述结果集进行过滤,得到过滤后的查询结果。
图5是本发明提供的一种电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(Communications Interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行数据查询方法,该方法包括:获取待查询的查询语句;所述待查询的查询语句是基于至少一种数据源的配置信息确定的;所述配置信息包括数据源名称和数据源类型;将所述待查询的查询语句转化为抽象语法树;所述抽象语法树包括至少一个语法节点;各所述语法节点分别对应初始查询类型;基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对所述抽象语法树进行分解转化,确定目标逻辑执行计划;所述目标逻辑执行计划包括至少一个子逻辑执行计划;基于所述目标逻辑执行计划,确定查询结果。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的数据查询方法,该方法包括:获取待查询的查询语句;所述待查询的查询语句是基于至少一种数据源的配置信息确定的;所述配置信息包括数据源名称和数据源类型;将所述待查询的查询语句转化为抽象语法树;所述抽象语法树包括至少一个语法节点;各所述语法节点分别对应初始查询类型;基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对所述抽象语法树进行分解转化,确定目标逻辑执行计划;所述目标逻辑执行计划包括至少一个子逻辑执行计划;基于所述目标逻辑执行计划,确定查询结果。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种数据查询方法,其特征在于,包括:
获取待查询的查询语句;所述待查询的查询语句是基于至少一种数据源的配置信息确定的;所述配置信息包括数据源名称和数据源类型;
将所述待查询的查询语句转化为抽象语法树;所述抽象语法树包括至少一个语法节点;各所述语法节点分别对应初始查询类型;
基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对所述抽象语法树进行分解转化,确定目标逻辑执行计划;所述目标逻辑执行计划包括至少一个子逻辑执行计划;
基于所述目标逻辑执行计划,确定查询结果;
所述基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对所述抽象语法树进行分解转化,确定目标逻辑执行计划,包括:
基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,将各所述语法节点分解转化为各所述数据源的查询语法,并将所述查询语法封装至预先构建的初始逻辑执行计划当中,得到所述目标逻辑执行计划;
所述将各所述语法节点分解转化为各所述数据源的查询语法,并将所述查询语法封装至预先构建的初始逻辑执行计划当中,得到所述目标逻辑执行计划,包括:
判断所述抽象语法树中包括的第一语法节点对应的所述初始查询类型是否为预设的第一目标类型;
在所述第一语法节点对应的所述初始查询类型为第一目标类型的情况下,将所述第一语法节点转化为所述第一目标类型对应的第一目标节点;
依次从所述第一目标节点中取出至少一个第一子节点,并将各所述第一子节点分别封装至所述初始逻辑执行计划中的第一目标模型;
从所述第一目标节点中取出第二子节点;
在所述第二子节点对应的所述初始查询类型不满足第二目标类型的情况下,将所述第二子节点封装至所述初始逻辑执行计划中的第二目标模型;
在所述第二子节点对应的所述初始查询类型满足第二目标类型的情况下,将所述第二子节点转化为所述第二目标类型对应的第二目标节点;
基于所述第一目标模型、所述第二目标模型和所述第二目标节点,确定所述目标逻辑执行计划。
2.根据权利要求1所述的数据查询方法,其特征在于,所述基于所述第一目标模型、所述第二目标模型和所述第二目标节点,确定所述目标逻辑执行计划,包括:
从所述第二目标节点中取出第三子节点,并构建第一子逻辑执行计划;
将所述第三子节点封装至所述第一子逻辑执行计划中的第二子节点;
取出与所述第二目标节点中的第四子节点的关联条件,并将所述关联条件封装至所述第一子逻辑执行计划中的第一条件;
将所述第二目标节点的类型封装至所述第一子逻辑执行计划中的关联类型中;
从所述第二子节点中取出与所述第三子节点对应的查询条件,并将所述查询条件封装至所述第一子逻辑执行计划中的所述第一目标模型;
将所述第一子逻辑执行计划封装至所述初始逻辑执行计划中的异步执行列表;
从所述第二目标节点中取出所述第四子节点,并判断所述第四子节点对应的所述初始查询类型是否为所述第二目标类型;
在所述第四子节点对应的所述初始查询类型满足所述第二目标类型的情况下,将所述第四子节点转化为所述第二目标类型对应的第二目标节点;
在所述第四子节点对应的所述初始查询类型不满足所述第二目标类型的情况下,将所述第四子节点封装至所述初始逻辑执行计划中的所述第二目标模型;
基于所述第一目标模型、所述第二目标模型和所述异步执行列表,确定所述目标逻辑执行计划。
3.根据权利要求1所述的数据查询方法,其特征在于,所述方法还包括:
在所述抽象语法树中包括的第一语法节点对应的所述初始查询类型为第三目标类型的情况下,将所述第一语法节点转化为所述第三目标类型对应的第三目标节点;
依次从所述第三目标节点中取出至少一个第五子节点;
将各所述第五子节点分别封装至所述初始逻辑执行计划中的第三目标模型;
从所述第三目标节点中取出第六子节点,重复执行上述判断所述抽象语法树中包括的第一语法节点对应的所述初始查询类型是否为预设的第一目标类型的步骤。
4.根据权利要求2所述的数据查询方法,其特征在于,所述方法还包括:
在所述第一子节点中包括子查询节点的情况下,将所述子查询节点对应的第二子逻辑执行计划封装至所述初始逻辑执行计划中的同步执行列表。
5.根据权利要求4所述的数据查询方法,其特征在于,所述基于所述目标逻辑执行计划,确定查询结果,包括:
判断所述目标逻辑执行计划中的所述第一目标模型是否存在;
在所述第一目标模型存在的情况下,基于所述第二子节点,确定目标数据源类型;
在所述同步执行列表不为空的情况下,执行所述同步执行列表,并将执行结果作为构建查询的查询条件;
基于所述目标数据源类型,将所述查询条件转化为所述目标数据源类型对应的查询语法;
调用所述目标数据源类型对应的查询驱动,得到查询结果。
6.根据权利要求5所述的数据查询方法,其特征在于,所述方法还包括:
在所述第一目标模型不存在的情况下,判断所述异步执行列表是否为空;
在所述异步执行列表不为空的情况下,获取每个异步执行列表的执行结果;
将每个异步执行列表的执行结果合并为一个结果集;
对所述结果集进行过滤,得到过滤后的查询结果。
7.一种数据查询装置,其特征在于,包括:
第一获取模块,用于获取待查询的查询语句;所述待查询的查询语句是基于至少一种数据源的配置信息确定的;所述配置信息包括数据源名称和数据源类型;
抽象模块,用于将所述待查询的查询语句转化为抽象语法树;所述抽象语法树包括至少一个语法节点;各所述语法节点分别对应初始查询类型;
分解模块,用于基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,对所述抽象语法树进行分解转化,确定目标逻辑执行计划;所述目标逻辑执行计划包括至少一个子逻辑执行计划;
确定模块,用于基于所述目标逻辑执行计划,确定查询结果;
所述分解模块,具体用于:
基于各所述初始查询类型、所述待查询的查询语句中包括的待查询的至少一个数据源名称和至少一个数据源类型,将各所述语法节点分解转化为各所述数据源的查询语法,并将所述查询语法封装至预先构建的初始逻辑执行计划当中,得到所述目标逻辑执行计划;
判断所述抽象语法树中包括的第一语法节点对应的所述初始查询类型是否为预设的第一目标类型;
在所述第一语法节点对应的所述初始查询类型为第一目标类型的情况下,将所述第一语法节点转化为所述第一目标类型对应的第一目标节点;
依次从所述第一目标节点中取出至少一个第一子节点,并将各所述第一子节点分别封装至所述初始逻辑执行计划中的第一目标模型;
从所述第一目标节点中取出第二子节点;
在所述第二子节点对应的所述初始查询类型不满足第二目标类型的情况下,将所述第二子节点封装至所述初始逻辑执行计划中的第二目标模型;
在所述第二子节点对应的所述初始查询类型满足第二目标类型的情况下,将所述第二子节点转化为所述第二目标类型对应的第二目标节点;
基于所述第一目标模型、所述第二目标模型和所述第二目标节点,确定所述目标逻辑执行计划。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310364018.9A CN116089476B (zh) | 2023-04-07 | 2023-04-07 | 数据查询方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310364018.9A CN116089476B (zh) | 2023-04-07 | 2023-04-07 | 数据查询方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116089476A CN116089476A (zh) | 2023-05-09 |
CN116089476B true CN116089476B (zh) | 2023-07-04 |
Family
ID=86199433
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310364018.9A Active CN116089476B (zh) | 2023-04-07 | 2023-04-07 | 数据查询方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116089476B (zh) |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106202102B (zh) * | 2015-05-06 | 2019-04-05 | 华为技术有限公司 | 批量数据查询方法和装置 |
CN106970819B (zh) * | 2017-03-28 | 2020-07-10 | 清华大学 | 一种基于prdl规则描述语言的c程序代码规范检查装置 |
CN110309196A (zh) * | 2019-05-22 | 2019-10-08 | 深圳壹账通智能科技有限公司 | 区块链数据存储和查询方法、装置、设备及存储介质 |
CN110399388A (zh) * | 2019-07-29 | 2019-11-01 | 中国工商银行股份有限公司 | 数据查询方法、系统和设备 |
CN110609849B (zh) * | 2019-08-27 | 2022-03-25 | 广东工业大学 | 一种基于sql语法树节点类型的自然语言生成方法 |
CN112347123A (zh) * | 2020-11-10 | 2021-02-09 | 北京金山云网络技术有限公司 | 数据血缘的分析方法、装置和服务器 |
CN113032362B (zh) * | 2021-03-18 | 2024-01-19 | 广州虎牙科技有限公司 | 数据血缘分析方法、装置、电子设备和存储介质 |
CN114610747A (zh) * | 2022-03-15 | 2022-06-10 | 平安科技(深圳)有限公司 | 数据查询方法、装置、设备及存储介质 |
-
2023
- 2023-04-07 CN CN202310364018.9A patent/CN116089476B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN116089476A (zh) | 2023-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104123288B (zh) | 一种数据查询方法及装置 | |
CN110633292B (zh) | 一种异构数据库的查询方法、装置、介质、设备及系统 | |
US10691682B2 (en) | Storing and processing JSON documents in a SQL database table | |
CN104123374B (zh) | 分布式数据库中聚合查询的方法及装置 | |
CN107491561B (zh) | 一种基于本体的城市交通异构数据集成系统及方法 | |
US8447744B2 (en) | Extensibility platform using data cartridges | |
CN107515887B (zh) | 一种适用于多种大数据管理系统的交互式查询方法 | |
US8799315B2 (en) | Selective construction of data search result per search request specifying path information | |
CN113051285B (zh) | Sql语句的转换方法、系统、设备及存储介质 | |
EP3086242A1 (en) | A query mediator, a method of querying a polyglot data tier and a computer program executable to carry out a method of querying a polyglot data tier | |
US8417690B2 (en) | Automatically avoiding unconstrained cartesian product joins | |
WO2012082562A1 (en) | Extensible rdf databases | |
CN112579610A (zh) | 多数据源结构分析方法、系统、终端设备及存储介质 | |
CN111198898B (zh) | 大数据查询方法及大数据查询装置 | |
CN114090613A (zh) | 程序语句转换方法、装置、设备及存储介质 | |
CN106933869A (zh) | 一种操作数据库的方法和装置 | |
CN116089476B (zh) | 数据查询方法、装置及电子设备 | |
CN117033348A (zh) | Sql转换方法、装置、计算机设备和存储介质 | |
CN112541001A (zh) | 数据查询方法、装置、存储介质及设备 | |
US9881055B1 (en) | Language conversion based on S-expression tabular structure | |
CN114003583A (zh) | 一种目标格式数据请求体的构建方法、装置、介质及设备 | |
WO2015125483A1 (ja) | M2mにおける電文変換システム及び電文変換方法 | |
CN117349332B (zh) | 一种应用程序编程接口api的生成方法、装置和电子设备 | |
US20190073356A1 (en) | Methods and systems for implied graph patterns in property chains | |
JP5374456B2 (ja) | 文書検索装置の動作方法およびこれをコンピュータに実行させるためのコンピュータプログラム |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |