CN113468204A - 一种数据查询方法、装置、设备、介质 - Google Patents
一种数据查询方法、装置、设备、介质 Download PDFInfo
- Publication number
- CN113468204A CN113468204A CN202110722994.8A CN202110722994A CN113468204A CN 113468204 A CN113468204 A CN 113468204A CN 202110722994 A CN202110722994 A CN 202110722994A CN 113468204 A CN113468204 A CN 113468204A
- Authority
- CN
- China
- Prior art keywords
- executed
- query
- queried
- data
- syntax tree
- 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 63
- 238000012545 processing Methods 0.000 claims abstract description 97
- 238000004590 computer program Methods 0.000 claims description 12
- 238000012795 verification Methods 0.000 claims description 12
- 238000005457 optimization Methods 0.000 claims description 6
- 238000000638 solvent extraction Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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/242—Query formulation
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据查询方法、装置、设备、介质,该方法包括:获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系;根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息;利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,以得到所述待执行数据查询语句对应的查询结果。这样能够对不同的数据源进行查询,且可以根据数据源选择具体的查询执行器,以加速查询过程。
Description
技术领域
本申请涉及数据处理技术领域,特别涉及一种数据查询方法、装置、设备、介质。
背景技术
联邦查询也即跨多个数据源发起查询,并将结果按照需要进行过滤、聚合。这样可以有效的解决多数据源之间数据无法统一操作的问题,解决多数据源用户权限管理困难的问题。目前,联邦查询主要是基于SQL(Structured Query Language,结构化查询语言)实现,但是目前业界在联邦查询的场景下,对SQL的支持不够完善,也即,SQL语言与有的数据源处理语言对应不上,无法转换成对应的数据源的处理语言。且对于不同的数据源往往采用相同的执行器,没有自动路由选择合适的查询执行器,以加速执行。
发明内容
有鉴于此,本申请的目的在于提供一种数据查询方法、装置、设备、介质,能够对不同的数据源进行查询,且可以根据数据源选择具体的查询执行器,以加速查询过程。其具体方案如下:
第一方面,本申请公开了一种数据查询方法,包括:
获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系;
根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息;
利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,以得到所述待执行数据查询语句对应的查询结果。
可选地,所述将所述待执行数据查询语句转换成待执行语法树之前,还包括:
根据预设的校验规则对所述待执行数据查询语句进行校验;
如果所述待执行数据查询语句通过校验,则将所述待执行数据查询语句转换成待执行语法树。
可选地,所述利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,包括:
根据所述待查询数据源信息确定待查询数据源数量是否为1;
如果待查询数据源数量为1,则判断待查询数据源是否支持JDBC;
如果所述待查询数据源数量为1,且所述待查询数据源支持JDBC,则利用第一查询执行器执行所述待执行语法树对应的查询计划,其中,所述第一查询执行器为JDBC;
如果所述待查询数据源数量为1,且所述待查询数据源不支持JDBC,或如果所述待查询数据源数量大于1,则根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树,并利用第二查询执行器执行所述待执行子语法树对应的查询计划,其中,所述第二查询执行器为Spark或Flink或PostgreSQL。
可选地,所述根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树,包括:
利用基于代价的优化方式对所述待执行语法树进行优化;
对优化后待执行语法树进行分割,得到待执行子语法树。
可选地,所述对优化后待执行语法树进行分割,得到待执行子语法树,包括:
如果所述待查询数据源信息表明待查询数据源数量大于1,则按照待查询数据源对所述优化后待执行语法树进行分割,得到待执行子语法树,其中,一个所述待执行子语法树对应一个所述待查询数据源;
如果所述待查询数据源信息表明待查询数据源数量为1,按照所述待查询数据源中的待查询表对所述优化后待执行语法树进行分割,得到待执行子语法树,其中,一个所述待执行子语法树对应一个所述待查询表。
可选地,所述利用第二查询执行器执行所述待执行子语法树对应的查询计划,包括:
根据所述待执行子语法树组装所述查询计划;
分别将所述查询计划翻译成所述第二查询执行器支持的第一代码和所述待查询数据源支持的第二代码,以便所述第二查询执行器根据所述第一代码和第二代码对所述待查询数据源中的数据进行查询,得到所述待执行数据查询语句对应的查询结果。
可选地,所述利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,包括:
根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树;
根据所述待执行子语法树组装所述查询计划;
根据所述待查询数据源信息确定所述目标查询执行器;
利用所述目标查询执行器执行所述查询计划。
可选地,所述根据所述待查询数据源信息确定所述目标查询执行器,包括:
根据所述待查询数据源信息确定待查询数据源数量是否为1;
如果所述待查询数据源数量为1,则判断待查询数据源是否支持JDBC;
如果所述待查询数据源数量为1,且待查询数据源支持JDBC,则将第一查询执行器确定为所述目标查询执行器,其中,所述第一查询执行器为JDBC;
如果所述待查询数据源数量为1,且待查询数据源不支持JDBC,或如果所述待查询数据源数量大于1,则将第二查询执行器确定为所述目标查询执行器,其中,所述第二查询执行器为Spark或Flink或PostgreSQL。
第二方面,本申请公开了一种数据查询装置,包括:
查询语句获取和处理模块,用于获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系;
数据源信息确定模块,用于根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息;
查询计划执行模块,用于利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,以得到所述待执行数据查询语句对应的查询结果。
第三方面,本申请公开了一种电子设备,包括:
存储器和处理器;
其中,所述存储器,用于存储计算机程序;
所述处理器,用于执行所述计算机程序,以实现前述公开的数据查询方法。
第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的数据查询方法。
可见,本申请先获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系。然后根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息。接着还需要利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,以得到所述待执行数据查询语句对应的查询结果。由此可见,本申请中获取到的待执行数据查询语句是利用预先开发的搜索处理语言编写的,而预先开发的搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言之间均存在对应关系,所以可以将待执行数据查询语句转换成不同数据源对应的处理语言,以及转换成不同查询执行器对应的处理语言,提高所述搜索处理语言的支持度,以解决现有技术中存在的对SQL语言支持不够完善的问题,从而实现联邦查询,此外,在将待执行数据查询语句转换成待执行语法树之后,还需要根据待执行语法树确定出待查询数据源信息,然后利用根据待查询数据源信息确定出的目标查询执行器执行待执行语法树对应的查询计划,得到对应的查询结果,用来执行待执行语法树对应的查询计划的目标查询执行器是根据待查询数据源信息确定出来的,也即,可以根据待查询数据源确定查询执行器,以加速查询过程,提高查询效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种数据查询方法流程图;
图2为本申请公开的一种具体的数据查询方法流程图;
图3为本申请公开的一种具体的数据查询方法流程图;
图4为本申请公开的一种具体的数据查询方法流程图;
图5为本申请公开的一种具体的数据查询方法流程图;
图6为本申请公开的一种数据查询装置结构示意图;
图7为本申请公开的一种电子设备结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参见图1所示,本申请实施例公开了一种数据查询方法,该方法包括:
步骤S11:获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系。
在具体实施过程中,需要先获取待执行数据查询语句,然后还需要将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系,且,所述搜索处理语言可以实现管道式查询。所述搜索处理语言具体与哪些不同数据源的处理语言存在对应关系,与哪些不同查询执行器的处理语言存在对应关系可以根据实际情况确定。所述搜索处理语言可以为SPL(Sangfor ProcessLanguage),是深信服科技股份有限公司为了实现管道式查询而开发的一门查询搜索语言,旨在提供友好,易用的检索语言,可以方便用户几乎零成本完成不同数据源的单次查询,或者不同数据源的联邦查询。
在实际实施过程中,在将所述待执行数据查询语句转换成待执行语法树之前,还包括:根据预设的校验规则对所述待执行数据查询语句进行校验;如果所述待执行数据查询语句通过校验,则将所述待执行数据查询语句转换成待执行语法树。
也即,用户可以通过UI(User Interface,用户界面)输入待执行数据查询语句,相应地,便需要获取所述待执行数据查询语句,接着还需要根据预设的校验规则对所述待执行数据查询语句进行校验,以便确定所述待执行数据查询语句是否有效。在所述待执行数据查询语句有效时,将所述待执行数据查询语句转换为待执行语法树。待执行语法树是将待执行数据查询语句中的文法构造成为多叉树,保存在内存中的一种数据结构。该语法树详细的描述了待执行数据查询语句所表达的语义,比如检索、过滤、聚合等等。
具体的,可以根据预设的校验规则对所述待执行数据查询语句进行校验;如果所述待执行数据查询语句通过校验,则表明所述待执行数据查询语句有效,执行将所述待执行数据查询语句转换为待执行语法树的步骤;如果所述待执行数据查询语句未通过校验,则表明所述待执行数据查询语句无效,直接进行所述待执行数据查询语句无效提示。其中,所述校验规则包括但不限于大小写敏感校验、关键字识别、支持的函数文法是否正确、所述搜索处理语言自身语言约束等相关的规则。
步骤S12:根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息。
在将所述待执行数据查询语句转换成所述待执行语法树之后,还需要根据所述待查询数据源信息,其中,所述待查询数据源信息也即所述待执行数据查询语句需要查询的数据源的信息,包括数据源数量以及数据源类型。待查询数据源包括但不限于ElasticSearch、Hive、JDBC(Java Database Connectivity,Java数据库连接)等数据源。
步骤S13:利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,以得到所述待执行数据查询语句对应的查询结果。
在得到所述待查询数据源信息之后,还需要利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,便可以得到所述待执行数据查询语句对应的查询结果。其中,所述目标查询执行器为根据所述待查询数据源信息确定出的,用于执行所述待执行语法树对应的查询计划的查询执行器。
可见,本申请先获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系。然后根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息。接着还需要利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,以得到所述待执行数据查询语句对应的查询结果。由此可见,本申请中获取到的待执行数据查询语句是利用预先开发的搜索处理语言编写的,而预先开发的搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言之间均存在对应关系,所以可以将待执行数据查询语句转换成不同数据源对应的处理语言,以及转换成不同查询执行器对应的处理语言,提高所述搜索处理语言的支持度,以解决现有技术中存在的对SQL语言支持不够完善的问题,从而实现联邦查询,此外,在将待执行数据查询语句转换成待执行语法树之后,还需要根据待执行语法树确定出待查询数据源信息,然后利用根据待查询数据源信息确定出的目标查询执行器执行待执行语法树对应的查询计划,得到对应的查询结果,用来执行待执行语法树对应的查询计划的目标查询执行器是根据待查询数据源信息确定出来的,也即,可以根据待查询数据源确定查询执行器,以加速查询过程,提高查询效率。
参见图2所示,本申请实施例公开了一种具体的数据查询方法,该方法包括:
步骤S21:获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系。
步骤S22:根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息。
步骤S21和步骤S22的具体实施过程可以参考前述实施例中公开的内容,在此不再进行赘述。
步骤S23:根据所述待查询数据源信息确定待查询数据源数量是否为1。
步骤S24:如果待查询数据源数量为1,则判断待查询数据源是否支持JDBC。
步骤S25:如果所述待查询数据源数量为1,且所述待查询数据源支持JDBC,则利用第一查询执行器执行所述待执行语法树对应的查询计划,其中,所述第一查询执行器为JDBC。
在确定出所述待查询数据源信息之后,还需要根据所述待查询数据源信息确定待查询数据源数据是否为1,也即,需要确定所述待执行数据查询语句对应的是单数据源查询,还是跨多数据源的联邦查询。
如果待查询数据源数量为1,则表示所述待执行数据查询语句对应的查询为单数据源查询,所述待查询数据源数量大于1,则表示所述待执行数据查询语句对应的查询为多数据源查询。当所述待查询数据源数量为1时,还需要判断待查询数据源是否支持JDBC。
如果所述待查询数据源支持JDBC,则可以直接利用第一查询执行器执行所述待执行语法树对应的查询计划,其中,所述第一查询执行器为JDBC。此处判断待查询数据源数量是否为1,在待查询数据源数量为1时,再判断待查询数据源是否支持JDBC,如果是,则可以直接利用JDBC执行待执行语法树对应的查询计划,这样可以进一步加快查询处理速度,提高查询效率。
步骤S26:如果所述待查询数据源数量为1,且所述待查询数据源不支持JDBC,或如果所述待查询数据源数量大于1,则根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树,并利用第二查询执行器执行所述待执行子语法树对应的查询计划,其中,所述第二查询执行器为Spark或Flink或PostgreSQL。
如果所述待查询数据源数据为1,且所述待查询数据源不支持JDBC,或者如果所述待查询数据源数量大于1,则需要先根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树,然后利用第二查询执行器执行所述待执行子语法树对应的查询计划,其中,所述第二查询执行器为Spark或Flink或PostgreSQL。其中,所述第二查询执行器具体为Spark,还是Flink,还是PostgreSQL,可以预先设置。
其中,根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树,包括:利用基于代价的优化方式对所述待执行语法树进行优化;对优化后待执行语法树进行分割,得到待执行子语法树。
也即,需要先利用基于代价的优化方式(Cost-Based Optimization,CBO)对所述待执行语法树进行优化,然后再对优化后待执行语法树进行分割,得到对应的待执行子语法树。这样可以解决现有技术中存在的没有对查询过程裁剪并优化,从而没有有效的利用数据源自身的特点的问题,提高查询效率。
其中,对优化后待执行语法树进行分割,得到待执行子语法树,包括:如果所述待查询数据源信息表明待查询数据源数量大于1,则按照待查询数据源对所述优化后待执行语法树进行分割,得到待执行子语法树,其中,一个所述待执行子语法树对应一个所述待查询数据源;如果所述待查询数据源信息表明待查询数据源数量为1,按照所述待查询数据源中的待查询表对所述优化后待执行语法树进行分割,得到待执行子语法树,其中,一个所述待执行子语法树对应一个所述待查询表。
由于在待查询数据源数量大于1时,和待查询数据源数量为1,但是待查询数据源不支持JBDC时,都需要对优化后待执行语法树进行分割,所以在所述待查询数据源信息表明待查询数据源数量大于1时,按照待查询数据源对所述优化后待执行语法树进行分割,得到待执行子语法树,一个所述待执行子语法树对应一个所述待查询数据源。在所述待查询数据源信息表明待查询数据源数量为1时,按照所述待查询数据源中的待查询表对所述优化后待执行语法树进行分割,得到待执行子语法树,一个所述待执行子语法树对应一个所述待查询表。
在具体的实施过程中,利用第二查询执行器执行所述待执行子语法树对应的查询计划,包括:根据所述待执行子语法树组装所述查询计划;分别将所述查询计划翻译成所述第二查询执行器支持的第一代码和所述待查询数据源支持的第二代码,以便所述第二查询执行器根据所述第一代码和第二代码对所述待查询数据源中的数据进行查询,得到所述待执行数据查询语句对应的查询结果。
也即,需要对所述待执行子语法树进行中序遍历,组装所述查询计划,然后将所述查询计划翻译成所述第二查询执行器支持的第一代码和所述待查询数据源支持的第二代码,以便所述第二查询执行器根据所述第一代码和第二代码对所述待查询数据源中的数据进行查询,得到所述待执行数据查询语句对应的查询结果。比如Spark作为所述第二查询执行器时,先将所述查询计划翻译为使用Spark API的第一代码。比如,所述待查询数据源为ElasticSearch时,ElasticSearch支持自己的DSL(domain specific language,领域专用语言),所述待查询数据源为MySQL,MySQL支持SQL,因此这里也需要将查询计划翻译为对应待查询数据源支持的处理语言发起查询。
在实际应用中,可以完整得到所述第一代码和所述第二代码之后,再将所述第一代码和所述第二代码动态打包,然后借助Spark或Flink的能力,提交Job,发起查询。或者为了提高查询性能,实现了交互式Spark,可以将代码直接提交到Spark,翻译执行,让查询性能得到较大的提升。
这样在待查询数据源为单数据源,且支持JDBC时,便可以直接利用JDBC执行所述待执行语法树对应的查询计划,得到查询结果,如果所述待查询数据源数据为1,且所述待查询数据源不支持JDBC,或者如果所述待查询数据源数量大于1时,再利用预先设置的第二查询执行器执行所述待执行子语法树对应的查询计划,所述第二查询执行器具体为Spark,还是Flink,还是PostgreSQL,可以预先设置。这样可以根据待查询数据源利用对应的查询执行器执行查询操作。
参见图3所示,为数据查询流程图。在获取到所述待执行数据查询语句,也即SPL语句后,校验SPL语句的文法是否正确,如果否,则结束本次查询,如果是,则表示SPL语句有效,将SPL语句转换成SPL语法树,也即待执行语法树,然后分析SPL语法树,也即,前述的根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息,然后判断待查询数据源是否为单数据源,也即,判断待查询数据源数量是否为1,如果是,则判断待查询数据源是否支持JDBC,如果是,则利用JDBC直接执行对应的查询计划,如果否,或者如果待查询数据源数量大于1,则根据所述待查询数据源信息对所述SPL语法树进行优化和分割,得到待执行子语法树,根据所述待执行子语法树组装所述查询计划;分别将所述查询计划翻译成所述第二查询执行器支持的第一代码和所述待查询数据源支持的第二代码,提交JOB,得到所述待执行数据查询语句对应的查询结果。
参见图4所示,本申请实施例公开了一种具体的数据查询方法,该方法包括:
步骤S31:获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系。
步骤S32:根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息。
步骤S31和步骤S32的具体实施过程可以参考前述实施例中公开的内容,在此不再进行赘述。
步骤S33:根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树。
具体的,根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树,包括:利用基于代价的优化方式对所述待执行语法树进行优化;对优化后待执行语法树进行分割,得到待执行子语法树。
其中,对优化后待执行语法树进行分割,得到待执行子语法树,包括:如果所述待查询数据源信息表明待查询数据源数量大于1,则按照待查询数据源对所述优化后待执行语法树进行分割,得到待执行子语法树,其中,一个所述待执行子语法树对应一个所述待查询数据源;如果所述待查询数据源信息表明待查询数据源数量为1,按照所述待查询数据源中的待查询表对所述优化后待执行语法树进行分割,得到待执行子语法树,其中,一个所述待执行子语法树对应一个所述待查询表。
步骤S34:根据所述待执行子语法树组装所述查询计划。
在得到所述待执行子语法树之后,还需要根据所述待执行子语法树组装所述查询计划。也即,需要对所述待执行子语法树进行中序遍历,组装所述查询计划。
步骤S35:根据所述待查询数据源信息确定所述目标查询执行器。
组装完成所述查询计划之后,还需要根据所述待查询数据源信息确定所述目标查询执行器。
具体的,根据所述待查询数据源信息确定待查询数据源数量是否为1;如果所述待查询数据源数量为1,则判断待查询数据源是否支持JDBC;如果所述待查询数据源数量为1,且待查询数据源支持JDBC,则将第一查询执行器确定为所述目标查询执行器,其中,所述第一查询执行器为JDBC;如果所述待查询数据源数量为1,且待查询数据源不支持JDBC,或如果所述待查询数据源数量大于1,则将第二查询执行器确定为所述目标查询执行器,其中,所述第二查询执行器为Spark或Flink或PostgreSQL。
步骤S36:利用所述目标查询执行器执行所述查询计划。
在确定出所述目标查询执行器之后,便可以利用所述目标查询执行器执行所述查询计划。当所述目标查询执行器为所述第一查询执行器时,可以直接执行所述待执行子语法树执行对应的查询计划。如果所述目标查询执行器为所述第二查询执行器,则先分别将所述查询计划翻译成所述第二查询执行器支持的第一代码和所述待查询数据源支持的第二代码,以便所述第二查询执行器根据所述第一代码和第二代码对所述待查询数据源中的数据进行查询,得到所述待执行数据查询语句对应的查询结果。
相比于前述实施例中,可以先不判断待查询数据源是否为单数据源,而是直接执行根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树,以及根据所述待执行子语法树组装所述查询计划的步骤,然后再执行根据所述待查询数据源信息确定所述目标查询执行器,以及利用所述目标查询执行器执行所述查询计划的步骤,减少判断步骤。
参见图5所示,为数据查询流程图。在获取到所述待执行数据查询语句,也即SPL语句后,校验SPL语句的文法是否正确,如果否,则结束本次查询,如果是,则表示SPL语句有效,将SPL语句转换成SPL语法树,也即待执行语法树,然后分析SPL语法树,也即,前述的根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息,然后根据所述待查询数据源信息对所述SPL语法树进行优化和分割,得到待执行子语法树,根据所述待执行子语法树组装所述查询计划,然后再根据待查询数据源信息确定目标查询执行器,如果所述待查询数据源数量为1,且待查询数据源支持JDBC,则将JDBC确定为所述目标查询执行器,利用JDBC直接执行查询计划,如果所述待查询数据源数量为1,且待查询数据源不支持JDBC,或如果所述待查询数据源数量大于1,则将Spark或Flink或PostgreSQL确定为所述目标查询执行器。然后分别将所述查询计划翻译成所述第二查询执行器支持的第一代码和所述待查询数据源支持的第二代码,提交JOB,得到所述待执行数据查询语句对应的查询结果。
参见图6所示,本申请实施例公开了一种数据查询装置,包括:
查询语句获取和处理模块11,用于获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系;
数据源信息确定模块12,用于根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息;
查询计划执行模块13,用于利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,以得到所述待执行数据查询语句对应的查询结果。
可见,本申请先获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系。然后根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息。接着还需要利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,以得到所述待执行数据查询语句对应的查询结果。由此可见,本申请中获取到的待执行数据查询语句是利用预先开发的搜索处理语言编写的,而预先开发的搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言之间均存在对应关系,所以可以将待执行数据查询语句转换成不同数据源对应的处理语言,以及转换成不同查询执行器对应的处理语言,提高所述搜索处理语言的支持度,以解决现有技术中存在的对SQL语言支持不够完善的问题,从而实现联邦查询,此外,在将待执行数据查询语句转换成待执行语法树之后,还需要根据待执行语法树确定出待查询数据源信息,然后利用根据待查询数据源信息确定出的目标查询执行器执行待执行语法树对应的查询计划,得到对应的查询结果,用来执行待执行语法树对应的查询计划的目标查询执行器是根据待查询数据源信息确定出来的,也即,可以根据待查询数据源确定查询执行器,以加速查询过程,提高查询效率。
在一些具体的实施过程中,所述数据查询装置,还包括:
校验模块,用于根据预设的校验规则对所述待执行数据查询语句进行校验;如果所述待执行数据查询语句通过校验,则将所述待执行数据查询语句转换成待执行语法树。
在一些具体的实施过程中,所述查询计划执行模块13,用于:
根据所述待查询数据源信息确定待查询数据源数量是否为1;
如果待查询数据源数量为1,则判断待查询数据源是否支持JDBC;
如果所述待查询数据源数量为1,且所述待查询数据源支持JDBC,则利用第一查询执行器执行所述待执行语法树对应的查询计划,其中,所述第一查询执行器为JDBC;
如果所述待查询数据源数量为1,且所述待查询数据源不支持JDBC,或如果所述待查询数据源数量大于1,则根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树,并利用第二查询执行器执行所述待执行子语法树对应的查询计划,其中,所述第二查询执行器为Spark或Flink或PostgreSQL。
在一些具体的实施过程中,所述查询计划执行模块13,用于:
利用基于代价的优化方式对所述待执行语法树进行优化;
对优化后待执行语法树进行分割,得到待执行子语法树。
在一些具体的实施过程中,所述查询计划执行模块13,用于:
如果所述待查询数据源信息表明待查询数据源数量大于1,则按照待查询数据源对所述优化后待执行语法树进行分割,得到待执行子语法树,其中,一个所述待执行子语法树对应一个所述待查询数据源;
如果所述待查询数据源信息表明待查询数据源数量为1,按照所述待查询数据源中的待查询表对所述优化后待执行语法树进行分割,得到待执行子语法树,其中,一个所述待执行子语法树对应一个所述待查询表。
在一些具体的实施过程中,所述查询计划执行模块13,用于:
根据所述待执行子语法树组装所述查询计划;
分别将所述查询计划翻译成所述第二查询执行器支持的第一代码和所述待查询数据源支持的第二代码,以便所述第二查询执行器根据所述第一代码和第二代码对所述待查询数据源中的数据进行查询,得到所述待执行数据查询语句对应的查询结果。
在一些具体的实施过程中,所述查询计划执行模块13,用于:
根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树;
根据所述待执行子语法树组装所述查询计划;
根据所述待查询数据源信息确定所述目标查询执行器;
利用所述目标查询执行器执行所述查询计划。
在一些具体的实施过程中,所述查询计划执行模块13,用于:
根据所述待查询数据源信息确定待查询数据源数量是否为1;
如果所述待查询数据源数量为1,则判断待查询数据源是否支持JDBC;
如果所述待查询数据源数量为1,且待查询数据源支持JDBC,则将第一查询执行器确定为所述目标查询执行器,其中,所述第一查询执行器为JDBC;
如果所述待查询数据源数量为1,且待查询数据源不支持JDBC,或如果所述待查询数据源数量大于1,则将第二查询执行器确定为所述目标查询执行器,其中,所述第二查询执行器为Spark或Flink或PostgreSQL。
参见图7所示,为本申请实施例提供的一种电子设备20的结构示意图,该电子设备20具体可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。
通常,本实施例中的电子设备20包括:处理器21和存储器22。
其中,处理器21可以包括一个或多个处理核心,比如四核心处理器、八核心处理器等。处理器21可以采用DSP(digital signal processing,数字信号处理)、FPGA(field-programmable gate array,现场可编程们阵列)、PLA(programmable logic array,可编程逻辑阵列)中的至少一种硬件来实现。处理器21也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(central processing unit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器21可以集成有GPU(graphics processing unit,图像处理器),GPU用于负责显示屏所需要显示的图像的渲染和绘制。一些实施例中,处理器21可以包括AI(artificialintelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器22可以包括一个或多个计算机可读存储介质,计算机可读存储介质可以是非暂态的。存储器22还可以包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器22至少用于存储以下计算机程序221,其中,该计算机程序被处理器21加载并执行之后,能够实现前述任一实施例中公开的数据查询方法步骤。
在一些实施例中,电子设备20还可包括有显示屏23、输入输出接口24、通信接口25、传感器26、电源27以及通信总线28。
本技术领域人员可以理解,图7中示出的结构并不构成对电子设备20的限定,可以包括比图示更多或更少的组件。
进一步的,本申请实施例还公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述任一实施例中公开的数据查询方法。
其中,关于上述数据查询方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得一系列包含其他要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种数据查询方法、装置、设备、介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (11)
1.一种数据查询方法,其特征在于,包括:
获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系;
根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息;
利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,以得到所述待执行数据查询语句对应的查询结果。
2.根据权利要求1所述的数据查询方法,其特征在于,所述将所述待执行数据查询语句转换成待执行语法树之前,还包括:
根据预设的校验规则对所述待执行数据查询语句进行校验;
如果所述待执行数据查询语句通过校验,则将所述待执行数据查询语句转换成待执行语法树。
3.根据权利要求1或2所述的数据查询方法,其特征在于,所述利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,包括:
根据所述待查询数据源信息确定待查询数据源数量是否为1;
如果待查询数据源数量为1,则判断待查询数据源是否支持JDBC;
如果所述待查询数据源数量为1,且所述待查询数据源支持JDBC,则利用第一查询执行器执行所述待执行语法树对应的查询计划,其中,所述第一查询执行器为JDBC;
如果所述待查询数据源数量为1,且所述待查询数据源不支持JDBC,或如果所述待查询数据源数量大于1,则根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树,并利用第二查询执行器执行所述待执行子语法树对应的查询计划,其中,所述第二查询执行器为Spark或Flink或PostgreSQL。
4.根据权利要求3所述的数据查询方法,其特征在于,所述根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树,包括:
利用基于代价的优化方式对所述待执行语法树进行优化;
对优化后待执行语法树进行分割,得到待执行子语法树。
5.根据权利要求4所述的数据查询方法,其特征在于,所述对优化后待执行语法树进行分割,得到待执行子语法树,包括:
如果所述待查询数据源信息表明待查询数据源数量大于1,则按照待查询数据源对所述优化后待执行语法树进行分割,得到待执行子语法树,其中,一个所述待执行子语法树对应一个所述待查询数据源;
如果所述待查询数据源信息表明待查询数据源数量为1,按照所述待查询数据源中的待查询表对所述优化后待执行语法树进行分割,得到待执行子语法树,其中,一个所述待执行子语法树对应一个所述待查询表。
6.根据权利要求3所述的数据查询方法,其特征在于,所述利用第二查询执行器执行所述待执行子语法树对应的查询计划,包括:
根据所述待执行子语法树组装所述查询计划;
分别将所述查询计划翻译成所述第二查询执行器支持的第一代码和所述待查询数据源支持的第二代码,以便所述第二查询执行器根据所述第一代码和第二代码对所述待查询数据源中的数据进行查询,得到所述待执行数据查询语句对应的查询结果。
7.根据权利要求1或2所述的数据查询方法,其特征在于,所述利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,包括:
根据所述待查询数据源信息对所述待执行语法树进行优化和分割,得到待执行子语法树;
根据所述待执行子语法树组装所述查询计划;
根据所述待查询数据源信息确定所述目标查询执行器;
利用所述目标查询执行器执行所述查询计划。
8.根据权利要求7所述的数据查询方法,其特征在于,所述根据所述待查询数据源信息确定所述目标查询执行器,包括:
根据所述待查询数据源信息确定待查询数据源数量是否为1;
如果所述待查询数据源数量为1,则判断待查询数据源是否支持JDBC;
如果所述待查询数据源数量为1,且待查询数据源支持JDBC,则将第一查询执行器确定为所述目标查询执行器,其中,所述第一查询执行器为JDBC;
如果所述待查询数据源数量为1,且待查询数据源不支持JDBC,或如果所述待查询数据源数量大于1,则将第二查询执行器确定为所述目标查询执行器,其中,所述第二查询执行器为Spark或Flink或PostgreSQL。
9.一种数据查询装置,其特征在于,包括:
查询语句获取和处理模块,用于获取待执行数据查询语句,并将所述待执行数据查询语句转换成待执行语法树,其中,所述待执行数据查询语句为利用预先开发的搜索处理语言编写的查询语句,所述搜索处理语言与不同数据源的处理语言和不同查询执行器的处理语言均存在对应关系;
数据源信息确定模块,用于根据所述待执行语法树确定所述待执行数据查询语句对应的待查询数据源信息;
查询计划执行模块,用于利用根据所述待查询数据源信息确定出的目标查询执行器执行所述待执行语法树对应的查询计划,以得到所述待执行数据查询语句对应的查询结果。
10.一种电子设备,其特征在于,包括:
存储器和处理器;
其中,所述存储器,用于存储计算机程序;
所述处理器,用于执行所述计算机程序,以实现权利要求1至8任一项所述的数据查询方法。
11.一种计算机可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述的数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110722994.8A CN113468204A (zh) | 2021-06-28 | 2021-06-28 | 一种数据查询方法、装置、设备、介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110722994.8A CN113468204A (zh) | 2021-06-28 | 2021-06-28 | 一种数据查询方法、装置、设备、介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113468204A true CN113468204A (zh) | 2021-10-01 |
Family
ID=77873456
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110722994.8A Pending CN113468204A (zh) | 2021-06-28 | 2021-06-28 | 一种数据查询方法、装置、设备、介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113468204A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113792079A (zh) * | 2021-11-17 | 2021-12-14 | 腾讯科技(深圳)有限公司 | 数据查询方法、装置、计算机设备和存储介质 |
CN114064740A (zh) * | 2022-01-17 | 2022-02-18 | 通联支付网络服务股份有限公司 | 用于查询数据的方法、设备和介质 |
CN117370377A (zh) * | 2023-12-05 | 2024-01-09 | 子亥科技(成都)有限公司 | 一种基于结构化查询语言的三维场景管理方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110704479A (zh) * | 2019-09-12 | 2020-01-17 | 新华三大数据技术有限公司 | 任务处理方法、装置、电子设备及存储介质 |
CN112559554A (zh) * | 2020-12-24 | 2021-03-26 | 北京百家科技集团有限公司 | 一种查询语句优化方法及装置 |
CN112699141A (zh) * | 2020-12-29 | 2021-04-23 | 医渡云(北京)技术有限公司 | 多源异构数据的数据查询方法、装置、存储介质及设备 |
-
2021
- 2021-06-28 CN CN202110722994.8A patent/CN113468204A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110704479A (zh) * | 2019-09-12 | 2020-01-17 | 新华三大数据技术有限公司 | 任务处理方法、装置、电子设备及存储介质 |
CN112559554A (zh) * | 2020-12-24 | 2021-03-26 | 北京百家科技集团有限公司 | 一种查询语句优化方法及装置 |
CN112699141A (zh) * | 2020-12-29 | 2021-04-23 | 医渡云(北京)技术有限公司 | 多源异构数据的数据查询方法、装置、存储介质及设备 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113792079A (zh) * | 2021-11-17 | 2021-12-14 | 腾讯科技(深圳)有限公司 | 数据查询方法、装置、计算机设备和存储介质 |
CN113792079B (zh) * | 2021-11-17 | 2022-02-08 | 腾讯科技(深圳)有限公司 | 数据查询方法、装置、计算机设备和存储介质 |
CN114064740A (zh) * | 2022-01-17 | 2022-02-18 | 通联支付网络服务股份有限公司 | 用于查询数据的方法、设备和介质 |
CN117370377A (zh) * | 2023-12-05 | 2024-01-09 | 子亥科技(成都)有限公司 | 一种基于结构化查询语言的三维场景管理方法及装置 |
CN117370377B (zh) * | 2023-12-05 | 2024-02-06 | 子亥科技(成都)有限公司 | 一种基于结构化查询语言的三维场景管理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113468204A (zh) | 一种数据查询方法、装置、设备、介质 | |
CN109426725B (zh) | 数据脱敏方法、设备及计算机可读存储介质 | |
WO2021017735A1 (zh) | 一种智能合约的形式化验证方法、电子装置及存储介质 | |
CN108334609B (zh) | Oracle中实现JSON格式数据存取的方法、装置、设备及存储介质 | |
US20210209098A1 (en) | Converting database language statements between dialects | |
US9104724B2 (en) | Dynamic bridging of application and data servers | |
WO2021253641A1 (zh) | 着色语言翻译方法 | |
CN106844369B (zh) | 对象化sql语句构造方法及装置 | |
CN112579610A (zh) | 多数据源结构分析方法、系统、终端设备及存储介质 | |
KR20200094074A (ko) | 인덱스 관리 방법, 장치, 기기 및 저장 매체 | |
WO2023086322A1 (en) | Late materialization of queried data in database cache | |
CN112970011B (zh) | 记录查询优化中的谱系 | |
CN108008947B (zh) | 一种编程语句的智能提示方法、装置、服务器及存储介质 | |
CN108694172B (zh) | 信息输出方法和装置 | |
CN112000690B (zh) | 解析结构化操作语句的方法和装置 | |
CN113934786A (zh) | 一种构建统一etl的实施方法 | |
CN115952203B (zh) | 数据查询方法、设备、系统及存储介质 | |
CN111125216A (zh) | 数据导入Phoenix的方法及装置 | |
CN115827676A (zh) | Sql子查询的执行方法、装置、终端设备以及介质 | |
US9201937B2 (en) | Rapid provisioning of information for business analytics | |
US10482171B2 (en) | Digital form optimization | |
KR101260436B1 (ko) | 구조화 질의어 자동 처리 시스템과 방법 및 그를 실행하기 위한 프로그램이 기록되는 컴퓨터로 읽을 수 있는 기록매체 | |
CN113741864B (zh) | 基于自然语言处理的语义化服务接口自动设计方法与系统 | |
CN114064007A (zh) | 程序语句处理方法、装置、设备及存储介质 | |
CN113821533A (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 |