CN114254005A - 分区表的分组聚集查询方法、装置、计算机设备和介质 - Google Patents

分区表的分组聚集查询方法、装置、计算机设备和介质 Download PDF

Info

Publication number
CN114254005A
CN114254005A CN202111568262.4A CN202111568262A CN114254005A CN 114254005 A CN114254005 A CN 114254005A CN 202111568262 A CN202111568262 A CN 202111568262A CN 114254005 A CN114254005 A CN 114254005A
Authority
CN
China
Prior art keywords
aggregation
partition
execution
grouping
query
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
Application number
CN202111568262.4A
Other languages
English (en)
Inventor
王鸿翔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Kingbase Information Technologies Co Ltd
Original Assignee
Beijing Kingbase Information Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Kingbase Information Technologies Co Ltd filed Critical Beijing Kingbase Information Technologies Co Ltd
Priority to CN202111568262.4A priority Critical patent/CN114254005A/zh
Publication of CN114254005A publication Critical patent/CN114254005A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • G06F16/24556Aggregation; Duplicate elimination

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开涉及一种分区表的分组聚集查询方法、装置、计算机设备和介质;其中,该方法包括:确定分区表的分组聚集查询符合预设条件时,将分组聚集操作下推至分区表的各个分区中,生成对应的分组聚集执行计划;将分组聚集执行计划发送至所有的计算节点,以使各计算节点在各分区上并行执行分组聚集执行计划,得到对应的执行结果,并将执行结果发送至主节点;将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。本公开实施例通过分组聚集下推优化的执行计划以及在执行过程中并行执行各分区的分组聚集操作能够提高分组聚集查询的执行效率,提升数据库性能。

Description

分区表的分组聚集查询方法、装置、计算机设备和介质
技术领域
本公开涉及数据库技术领域,尤其涉及一种分区表的分组聚集查询方法、装置、计算机设备和介质。
背景技术
随着信息技术的高速发展,需要处理的数据量越来越多,尤其是对于一些分析型的场景,越来越多的人开始使用基于无共享的分布式数据库集群来存储数据和查询分析,因此分布式数据库的存储能力和查询分析性能就显得特别关键。
查询分析是分布式数据库中重要的操作,其性能影响着业务统计和分析的效率,当数据量较大并且数据有一定特征时,可以根据特征采用数据分区方法,创建分区表的方式进行数据存储。对于分区表的分组聚集,传统的方法是先把分区表中所有分区数据进行追加(APPEND)操作,逻辑上看作一个表,然后进行分组聚集操作。这种方法虽然比较通用,但是串行的扫描所有分区然后再进行分组聚集操作,查询的效率低,速度慢以及查询性能差。
发明内容
为了解决上述技术问题,本公开提供了一种分区表的分组聚集查询方法、装置、计算机设备和介质。
第一方面,本公开提供了一种分区表的分组聚集查询方法,应用于主节点,该方法包括:
确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划;
将所述分组聚集执行计划发送至所有的计算节点,以使各计算节点在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,并将所述执行结果发送至所述主节点;
将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
可选的,所述确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划之前,还包括:
获取所述分组聚集查询对应的分组条件;
根据所述分组条件确定所述分组聚集查询符合预设条件。
可选的,所述分组聚集查询,通过以下方式得到:
接收客户端发送的查询请求,对所述查询请求进行解析,生成对应的语法树;
若所述语法树中包含的目标命令为数据操纵语言命令,则对所述语法树进行语义分析和查询重写,得到对应的查询树;
对所述查询树进行提取,得到所述分组聚集查询。
可选的,该方法还包括:
若所述语法树中包含的目标命令不是数据操纵语言命令,则通过本地命令程序将所述目标命令下发至所有的计算节点,以使各计算节点分别执行所述目标命令,得到对应的执行结果,并将所述执行结果发送至所述主节点。
第二方面,本公开提供了一种分区表的分组聚集查询方法,应用于各计算节点,该方法包括:
接收主节点发送的分组聚集执行计划,其中,所述分组聚集执行计划由所述主节点确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中之后生成;
在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,并将所述执行结果发送至所述主节点,以使所述主节点将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
可选的,所述在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,包括:
根据所述分组聚集执行计划,获取各分区分别对应的待聚集的原始分区数据;
对所述原始分区数据进行部分聚集操作,得到第一聚集结果;
对所述第一聚集结果进行数据重分布操作,得到第二聚集结果;
对所述第二聚集结果进行最终聚集操作,得到第三聚集结果;
对所有第三聚集结果进行追加操作,得到对应的执行结果。
第三方面,本公开提供了一种分区表的分组聚集查询装置,应用于主节点,该装置包括:
生成模块,用于确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划;
发送模块,用于将所述分组聚集执行计划发送至所有的计算节点,以使各计算节点在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,并将所述执行结果发送至所述主节点;
汇总模块,用于将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
可选的,上述装置还包括:确定模块,具体用于:
在确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划之前,获取所述分组聚集查询对应的分组条件;
根据所述分组条件确定所述分组聚集查询符合预设条件。
可选的,所述分组聚集查询,通过以下方式得到:
接收客户端发送的查询请求,对所述查询请求进行解析,生成对应的语法树;
若所述语法树中包含的目标命令为数据操纵语言命令,则对所述语法树进行语义分析和查询重写,得到对应的查询树;
对所述查询树进行提取,得到所述分组聚集查询。
可选的,上述装置还包括:下发模块,具体用于:
若所述语法树中包含的目标命令不是数据操纵语言命令,则通过本地命令程序将所述目标命令下发至所有的计算节点,以使各计算节点分别执行所述目标命令,得到对应的执行结果,并将所述执行结果发送至所述主节点。
第四方面,本公开提供了一种分区表的分组聚集查询装置,应用于各计算节点,该装置包括:
接收模块,用于接收主节点发送的分组聚集执行计划,其中,所述分组聚集执行计划由所述主节点确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中之后生成;
执行模块,用于在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,并将所述执行结果发送至所述主节点,以使所述主节点将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
可选的,执行模块,具体用于:
根据所述分组聚集执行计划,获取各分区分别对应的待聚集的原始分区数据;
对所述原始分区数据进行部分聚集操作,得到第一聚集结果;
对所述第一聚集结果进行数据重分布操作,得到第二聚集结果;
对所述第二聚集结果进行最终聚集操作,得到第三聚集结果;
对所有第三聚集结果进行追加操作,得到对应的执行结果,并将所述执行结果发送至所述主节点,以使所述主节点将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
第五方面,本公开还提供了一种计算机设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本公开实施例中的任一种所述的分区表的分组聚集查询方法。
第六方面,本公开还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开实施例中的任一种所述的分区表的分组聚集查询方法。
本公开实施例提供的技术方案与现有技术相比具有如下优点:确定分区表的分组聚集查询符合预设条件时,将分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划;将分组聚集执行计划发送至所有的计算节点,以使各计算节点在各分区上并行执行分组聚集执行计划,得到对应的执行结果,并将执行结果发送至所述主节点;将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端,通过分组聚集下推优化的执行计划以及在执行过程中并行执行各分区的分组聚集操作能够提高分组聚集查询的执行效率,提升数据库性能。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例提供的一种分区表的分组聚集查询方法的流程示意图;
图2A是本公开实施例提供的另一种分区表的分组聚集查询方法的流程示意图;
图2B是本公开实施例提供的对分组聚集查询进行优化前的查询过程示意图;
图2C是本公开实施例提供的对分组聚集查询进行优化后的查询过程示意图;
图2D是本公开实施例提供的对分组聚集查询进行优化前的执行结果示意图;
图2E是本公开实施例提供的对分组聚集查询进行优化后的执行结果示意图;
图3是本公开实施例提供的客户端、主节点以及计算节点之间的交互过程示意图;
图4是本公开实施例提供的一种分区表的分组聚集查询装置的结构示意图;
图5是本公开实施例提供的另一种分区表的分组聚集查询装置的结构示意图;
图6是本公开实施例提供的一种计算机设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
图1是本公开实施例提供的一种分区表的分组聚集查询方法的流程示意图。本实施例可适用于分布式数据库中主节点对分区表执行分组聚集查询的情况,其中,该分布式数据库中可以包括主节点以及与主节点相连的多个计算节点。本实施例提供的应用于主节点的分区表的分组聚集查询方法可由应用于主节点的分区表的分组聚集查询装置来执行,该装置可采用硬件/或软件的方式来实现,并可配置于计算机设备中。如图1所示,该方法具体包括如下:
S110,确定分区表的分组聚集查询符合预设条件时,将分组聚集操作下推至分区表的各个分区中,生成对应的分组聚集执行计划。
其中,分区表可以理解为按照一定的规则将大表中的数据分成称为分区的许多小的子集之后所得到的多个表,分区表中的每个分区存储一定范围内的数据。该规则可以为设计人员设置,也可以视具体情况而定,本实施例不做具体限制。结构化查询语言(Structured Query Language,简称SQL)中通常用group by进行分组,分组聚集查询可以理解为数据库中的一种查询方式。预设条件可以为主节点的优化器中预先设置的条件,例如,分组聚集查询以分区表的分区键为分组条件,而且分区键不是分布键,也可以视具体情况而定,本实施例不做具体限制。分区键用于确定同一节点中每个分区数据的数据范围。分布键用于将数据分布到各个节点,位于节点之间。分组聚集执行计划可以理解为计算节点中的各分区分别进行分组聚集查询的执行计划。
优化器在确定分区表的分组聚集查询符合预设条件时,具体可以是分组聚集查询以分区表的分区键为分组条件,而且分区键不是分布键时,分组聚集查询能够保证一个分组数据只在分区表的其中一个分区里面,也就是说只要各分区进行分组后,整个分区表就分组完成,避免必须合并所有分区数据才能进行操作的情况。此时,优化器能够对上述符合预设条件的分组聚集查询进行优化,即:将分组聚集操作下推至分区表的各个分区中,生成对应的分组聚集执行计划,该分组聚集执行计划为:各个分区并行执行分组聚集操作。
S120,将分组聚集执行计划发送至所有的计算节点,以使各计算节点在各分区上并行执行分组聚集执行计划,得到对应的执行结果,并将执行结果发送至主节点。
优化器在生成对应的分组聚集执行计划之后,对于本实施例中的分布式数据库能够以分布式执行的方式执行分组聚集执行计划。因此,主节点的调度器将分组聚集执行计划发送至所有的计算节点,计算节点收到分组聚集执行计划之后,通过计算节点自身的执行器在各分区上并行执行该分组聚集执行计划,在执行结束后就能够得到对应的执行结果。执行器在得到执行结果之后,将该执行结果发送至调度器。由于分组聚集执行计划是在各分区上并行执行,因此能够加快执行速度。
S130,将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
其中,客户端与分区表的分组聚集查询的发起者对应。
调度器在收到各计算节点的执行器发送的执行结果之后,将所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端,以使客户端能够收到与分组聚集查询对应的总执行结果。
在本实施例中,确定分区表的分组聚集查询符合预设条件时,将分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划;将分组聚集执行计划发送至所有的计算节点,以使各计算节点在各分区上并行执行分组聚集执行计划,得到对应的执行结果,并将执行结果发送至所述主节点;将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端,通过分组聚集下推优化的执行计划以及在执行过程中并行执行各分区的分组聚集操作能够提高分组聚集查询的执行效率,提升数据库性能。
在本实施例中,可选的,所述确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划之前,还可以具体包括:
获取所述分组聚集查询对应的分组条件;
根据所述分组条件确定所述分组聚集查询符合预设条件。
具体的,优化器获取分组聚集查询所对应的分组条件,将该分组条件与预设条件进行对比,能够确定分组聚集查询是否符合预设条件,若该分组条件与预设条件一致,则说明分组聚集查询符合预设条件。
本实施例中,通过上述方法确定分组聚集查询符合预设条件,便于优化器将分组聚集操作下推至分区表的各个分区中,生成对应的分组聚集执行计划,使得各分区的分组聚集可以采用并行执行方式,能够加快执行速度,有利于提高分组聚集查询的效率,节省时间。
在本实施例中,可选的,所述分组聚集查询,通过以下方式得到:
接收客户端发送的查询请求,对所述查询请求进行解析,生成对应的语法树;
若所述语法树中包含的目标命令为数据操纵语言命令,则对所述语法树进行语义分析和查询重写,得到对应的查询树;
对所述查询树进行提取,得到所述分组聚集查询。
其中,目标命令可以理解为语法树中包含的查询命令。数据操纵语言(DataManipulation Language,简称DML)命令可以理解为用于数据库操作的命令,例如选择、插入、更新以及删除等。
具体的,用户想要查询分布式数据库时,会通过客户端向主节点发送SQL请求(即查询请求),主节点接收到客户端发送的查询请求后,需要对该查询请求执行认证操作,当查询请求认证成功并建立连接后,客户端可以发送查询给数据库,在此情况下,数据库接收客户端发送的查询请求。主节点的解析器对该查询请求进行解析,主要是对接收到的查询SQL字符串进行词法解析和语法解析,生成对应的语法树。然后解析器确定语法树中包含的目标命令是DML命令时,对语法树进行语义分析和查询重写,得到对应的查询树。解析器对查询树进行提取就能得到对应的分组聚集查询。
本实施例中,通过上述方法获取分组聚集查询,一方面能够保证安全性,另一方面有利于后续确定是否能够对分组聚集查询进行优化。
在本实施例中,可选的,该方法还可以具体包括:
确定分区表的分组聚集查询不符合预设条件时,对查询树进行逻辑和物理优化处理,生成对应的查询计划;将查询计划发送至所有的计算节点,以使各计算节点分别执行查询计划,得到对应的执行结果,并将执行结果发送至主节点;将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
具体的,优化器在确定分区表的分组聚集查询不符合预设条件时,无法对分组聚集查询进行优化,即:无法将组聚集操作下将所述分组聚集操作下区表的各个分区中,但是通过对查询树进行逻辑和物理优化处理,能够从所有可能的查询计划中选择一个最优或接近最优的计划,生成对应的查询计划。查询计划通常以树形结构描述如何执行一个查询。优化器生成查询计划之后,通过调度器将查询计划发送至所有的计算节点的执行器,各计算节点的执行器收到调度器发送的查询计划后,开始执行各自负责的相关计划得到对应的执行结果,并将执行结果发送至主节点的调度器。调度器将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
需要说明的是:本实施例中分区表的分组聚集查询可以替换为其他的查询操作,例如数据扫描、哈希连接以及排序等。其他的查询操作也可以通过对查询树进行逻辑和物理优化处理,生成对应的查询计划,将查询计划发送至所有的计算节点,以使各计算节点分别执行查询计划,得到对应的执行结果,并将执行结果发送至主节点;将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
本实施例中,在分区表的分组聚集查询不符合预设条件时,通过上述方法进行处理,使得各计算节点能够并行处理查询计划,从而提高查询的执行效率,提升数据库性能。
在本实施例中,可选的,该方法还可以具体包括:
若所述语法树中包含的目标命令不是数据操纵语言命令,则通过本地命令程序将所述目标命令下发至所有的计算节点,以使各计算节点分别执行所述目标命令,得到对应的执行结果,并将所述执行结果发送至所述主节点。
具体的,如果解析器确定语法树中包含的目标命令不是数据操纵语言命令,是不可优化的其他实用命令,例如创建表这类数据库模式定义语言(Data DefinitionLanguage,简称DDL)执行命令时,进入主节点的本地命令程序,然后分布式执行通过调度器将目标命令下发至所有计算节点的执行器。计算节点的执行器收到调度器发送的目标命令后,执行目标命令,得到对应的执行结果,并将执行结果发送至主节点的调度器,以使调度器将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
本实施例中的调度器主要负责分组聚集执行计划的下发或者目标命令的下发,以及执行结果的收集汇总。
本实施例中,在语法树中包含的目标命令不是数据操纵语言命令时,通过上述方法进行处理,有利于提高查询的执行效率,节省时间以及提高用户使用体验。
图2A是本公开实施例提供的另一种分区表的分组聚集查询方法的流程示意图。本实施例可适用于分布式数据库中各计算节点对分区表执行分组聚集查询的情况。本实施例提供的应用于各计算节点的分区表的分组聚集查询方法可由应用于各计算节点的分区表的分组聚集查询装置来执行,该装置可采用硬件/或软件的方式来实现,并可配置于计算机设备中。如图2A所示,该方法具体包括如下:
S210,接收主节点发送的分组聚集执行计划,其中,分组聚集执行计划由主节点确定分区表的分组聚集查询符合预设条件时,将分组聚集操作下推至分区表的各个分区中之后生成。
主节点在确定分区表的分组聚集查询符合预设条件时,将分组聚集操作下推至分区表的各个分区中,生成对应的分组聚集执行计划。然后主节点将分组聚集执行计划发送至所有的计算节点,计算节点就能够接收到主节点发送的分组聚集执行计划。
S220,在各分区上并行执行分组聚集执行计划,得到对应的执行结果,并将执行结果发送至主节点,以使主节点将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
计算节点在接收主节点发送的分组聚集执行计划之后,通过自身的执行器在各分区上并行执行该分组聚集执行计划,在执行结束后就能够得到对应的执行结果,并将执行结果发送至主节点的调度器,以使调度器将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
在本实施例中,接收主节点发送的分组聚集执行计划,其中,分组聚集执行计划由主节点确定分区表的分组聚集查询符合预设条件时,将分组聚集操作下推至分区表的各个分区中之后生成;在各分区上并行执行分组聚集执行计划,得到对应的执行结果,并将执行结果发送至主节点,以使主节点将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端,通过分组聚集下推优化的执行计划以及在执行过程中并行执行各分区的分组聚集操作能够提高分组聚集查询的执行效率,提升数据库性能。
在本实施例中,可选的,所述在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,可以具体包括:
根据所述分组聚集执行计划,获取各分区分别对应的待聚集的原始分区数据;
对所述原始分区数据进行部分聚集操作,得到第一聚集结果;
对所述第一聚集结果进行数据重分布操作,得到第二聚集结果;
对所述第二聚集结果进行最终聚集操作,得到第三聚集结果;
对所有第三聚集结果进行追加操作,得到对应的执行结果。
主节点向所有的计算节点发送含有分区表的分组聚集操作的分组聚集执行计划,计算节点根据接收到的分组聚集执行计划在各分区上并行执行,具体执行过程如下所示:
1、各计算节点根据分组聚集执行计划,获取各分区分别对应的待聚集的原始分区数据,例如通过顺序扫描(Seq Scan)获取各分区对应的原始分区数据。
2、对原始分区数据进行部分聚集(Partial Aggregate)操作,得到第一聚集结果。其中,在执行部分聚集操作时,以分组聚集执行计划中的每个数据移动(Motion)节点为界,可以把分组聚集执行计划拆分成上下执行计划分片或者更多的执行计划分片,每个执行计划分片会启动单独的进程执行,因此各分区上的部分聚集操作是并行执行的。同时,本实施例采用无共享的分布式数据库架构,计算节点之间也是并行执行的,这样节点内和节点间多级并行方式,所以性能更好,执行速度更快。
3、本实施例中主要采用无共享的分布式数据库架构,第一聚集结果是各计算节点本地的计算结果,这种情况相同的分组会在各个节点上,但是分布式数据库最终需要得到全局的分组聚集结果,因此各计算节点需要对第一聚集结果以分组列的值进行数据重分布(Redistribute Motion)操作,得到第二聚集结果,即:各计算节点将第一聚集结果重新哈希数据到相应的节点,从而保证相同分组只在一个计算节点上,以便每个计算节点可以得到该分组的全局数据,以便后续进行最终聚集(Finalize Aggregate)操作(最终聚集为分组集聚的全局聚集阶段)。
其中,第二聚集结果可以理解为对第一聚集结果进行数据重分布操作后得到的数据。
4、各计算节点的分区收到数据重分布的第二聚集结果后,对第二聚集结果进行最终聚集操作,即进行该分区各分组的全局数据的Finalize Aggregate就得到了第三聚集结果。
5、最后各节点对分区表的所有分区的第三聚集结果进行Append操作,得到对应的执行结果,并将执行结果发送给主节点。
具体的,图2B是本公开实施例提供的对分组聚集查询进行优化前的查询过程示意图,如图2B所示:
图2B中以2个计算节点为例,对未对分组聚集查询进行优化的查询过程进行说明:首先,每个计算节点中进行表分区上的顺序扫描,可以包括表分区1上的顺序扫描Seq Scanon table partition 1,表分区2上的顺序扫描Seq Scan on table partition 1,…,表分区n上的顺序扫描Seq Scan on table partition n(n为大于2的正整数),得到各分区对应的原始数据;接着对各原始数据进行Append操作,得到总的原始数据;然后对总的原始数据执行分组聚集,具体包括:PartialAggregate操作、Redistribute Motion操作和FinalizeAggregate操作,得到聚集结果,将聚集结果发送给主节点;主节点进行整合(GatherMotion),得到整合结果,即查询结果。并且,主节点还会将查询结果返回给客户端。
上述方法中,各分区之间的分组聚集操作无法并行执行,因此查询性能较差。
具体的,图2C是本公开实施例提供的对分组聚集查询进行优化后的查询过程示意图,如图2C所示:
图2C中以2个计算节点为例,对分组聚集查询进行优化后的查询过程进行说明:首先,每个计算节点中进行表分区上的顺序扫描,得到各分区分别对应的待聚集的原始分区数据,该过程与图2B相同,此处不再赘述;接着对各原始分区数据分别执行分组聚集,具体包括:PartialAggregate操作、Redistribute Motion操作和Finalize Aggregate操作,得到各分区分别对应的聚集结果;然后将各分区分别对应的聚集结果进行Append操作,得到对应的执行结果,并将执行结果发送给主节点。主节点进行Gather Motion,得到整合结果,即查询结果。并且,主节点还会将查询结果返回给客户端。
在分区表的分组聚集查询符合预设条件时,通过图2C所示的方法将分组聚集操作下推至分区表的各个分区中(即将分组聚集操作下推),也就是把图2B中将各分区对应的原始数据进行Append操作,得到总的原始数据,再对总的原始数据执行分组聚集的执行计划修改为:先对分区表的各分区分别对应的待聚集的原始分区数据分别执行分组聚集,再将各分区分别对应的聚集结果进行Append操作,得到整个分区表对应的执行结果的执行计划。因为分区表的分组聚集查询以分区键为分组条件,一个分组的数据只出现在一个分区中,也就是说分区之间是无关联的,因此各分区的分组聚集结果的合并也就是最终分区表的执行结果。其中,对于分区表的分组聚集查询不符合预设条件的情况,因为正确性问题不能采用上述方法,这种情况不做上述优化。上述图2C所示的方法能够显著提升查询的执行效率,提升数据库的查询性能以及提高用户的使用体验。
示例性的,图2D是本公开实施例提供的对分组聚集查询进行优化前的执行结果示意图,下面对图2D进行说明:
假设对分布在2个计算节点的分区表做分组聚集查询,其中该分组聚集查询是以分区键进行分组的,而且分布键不是分区键。首先创建分区表和各分区,并插入数据到分区表中,其中agg_partition为分区基表,agg_partition_p1、agg_partition_p2和agg_partition_p3为分区,SQL语句如下:
CREATE TABLE agg_partition(a int,b int,c text)PARTITION BY RANGE(a)distributed by(c);
CREATE TABLE agg_partition_p1 PARTITION OF agg_partition FOR VALUESFROM(0)TO(10);
CREATE TABLE agg_partition_p2 PARTITION OF agg_partition FOR VALUESFROM(10)TO(20);
CREATE TABLE agg_partition_p3 PARTITION OF agg_partition FOR VALUESFROM(20)TO(30);
INSERT INTO agg_partition SELECT i%30,i%50,to_char(i%30,'FM0000')FROM generate_series(1,30000000)i;
优化前的分区表的分组聚集执行结果:
SELECT a,sum(b)FROM agg_partition GROUP BY a ORDER BY 1;
从图2D中可以看出:优化前分区表的分组聚集的时间是11707.352ms。
示例性的,图2E是本公开实施例提供的对分组聚集查询进行优化后的执行结果示意图,下面对图2E进行说明:
同样是对分布在2个计算节点的分区表做分组聚集查询,优化后的分区表的分组聚集执行结果:
SELECT a,sum(b)FROM agg_partition GROUP BY a ORDER BY 1;
从图2E中可以看出:优化后分区表的分组聚集的时间是3601.263ms,经过将分组聚集操作下推到各分区上执行的优化方式,查询性能有明显提升。
本实施例中,在确定分区表的分组聚集查询符合预设条件时,将分区表上的分组聚集下推到各分区中并行执行,加快了执行效率,性能也得到提升,性能提升与分组聚集操作分区表使用到的分区数量有关,分区数越多并行度越高,提升越多。
图3是本公开实施例提供的客户端、主节点以及计算节点之间的交互过程示意图,如图3所示:
图3中描述了客户端向主节点发送SQL请求,主节点对SQL请求进行解析,生成对应的语法树,根据语法树中包含的目标命令是否为DML命令分别执行相应的操作。主节点向各计算节点(计算节点1,计算节点2,…,计算节点N)发送执行计划或者执行命令。各计算节点中的执行器执行查询或者执行命令,并将执行结果返回至主节点,主节点将执行结果返回至客户端。
图3中的交互过程在前面的实施例中已经详细描述过,此处不再赘述。
图4是本公开实施例提供的一种分区表的分组聚集查询装置的结构示意图;该装置配置于计算机设备中,可实现本申请任意实施例所述的应用于主节点的分区表的分组聚集查询方法。该装置具体包括如下:
生成模块410,用于确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划;
发送模块420,用于将所述分组聚集执行计划发送至所有的计算节点,以使各计算节点在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,并将所述执行结果发送至所述主节点;
汇总模块430,用于将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
在本实施例中,可选的,上述装置还包括:确定模块,具体用于:
在确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划之前,获取所述分组聚集查询对应的分组条件;
根据所述分组条件确定所述分组聚集查询符合预设条件。
在本实施例中,可选的,所述分组聚集查询,通过以下方式得到:
接收客户端发送的查询请求,对所述查询请求进行解析,生成对应的语法树;
若所述语法树中包含的目标命令为数据操纵语言命令,则对所述语法树进行语义分析和查询重写,得到对应的查询树;
对所述查询树进行提取,得到所述分组聚集查询。
在本实施例中,可选的,上述装置还包括:下发模块,具体用于:
若所述语法树中包含的目标命令不是数据操纵语言命令,则通过本地命令程序将所述目标命令下发至所有的计算节点,以使各计算节点分别执行所述目标命令,得到对应的执行结果,并将所述执行结果发送至所述主节点。
通过本公开实施例提供的分区表的分组聚集查询装置,确定分区表的分组聚集查询符合预设条件时,将分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划;将分组聚集执行计划发送至所有的计算节点,以使各计算节点在各分区上并行执行分组聚集执行计划,得到对应的执行结果,并将执行结果发送至所述主节点;将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端,通过分组聚集下推优化的执行计划以及在执行过程中并行执行各分区的分组聚集操作能够提高分组聚集查询的执行效率,提升数据库性能。
本公开实施例所提供的应用于主节点的分区表的分组聚集查询装置可执行本公开任意实施例所提供的应用于主节点的分区表的分组聚集查询方法,具备执行方法相应的功能模块和有益效果。
图5是本公开实施例提供的另一种分区表的分组聚集查询装置的结构示意图;该装置配置于计算机设备中,可实现本申请任意实施例所述的应用于各计算节点的分区表的分组聚集查询方法。该装置具体包括如下:
接收模块510,用于接收主节点发送的分组聚集执行计划,其中,所述分组聚集执行计划由所述主节点确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中之后生成;
执行模块520,用于在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,并将所述执行结果发送至所述主节点,以使所述主节点将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
在本实施例中,可选的,执行模块520,具体用于:
根据所述分组聚集执行计划,获取各分区分别对应的待聚集的原始分区数据;
对所述原始分区数据进行部分聚集操作,得到第一聚集结果;
对所述第一聚集结果进行数据重分布操作,得到第二聚集结果;
对所述第二聚集结果进行最终聚集操作,得到第三聚集结果;
对所有第三聚集结果进行追加操作,得到对应的执行结果,并将所述执行结果发送至所述主节点,以使所述主节点将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
通过本公开实施例提供的分区表的分组聚集查询装置,接收主节点发送的分组聚集执行计划,其中,分组聚集执行计划由主节点确定分区表的分组聚集查询符合预设条件时,将分组聚集操作下推至分区表的各个分区中之后生成;执行分组聚集执行计划,得到对应的执行结果,并将执行结果发送至主节点,以使主节点将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端,通过分组聚集下推优化的执行计划以及在执行过程中并行执行各分区的分组聚集操作能够提高分组聚集查询的执行效率,提升数据库性能。
本公开实施例所提供的应用于各计算节点的分区表的分组聚集查询装置可执行本公开任意实施例所提供的应用于各计算节点的分区表的分组聚集查询方法,具备执行方法相应的功能模块和有益效果。
图6是本公开实施例提供的一种计算机设备的结构示意图。如图6所示,该计算机设备包括处理器610和存储装置620;计算机设备中处理器610的数量可以是一个或多个,图6中以一个处理器610为例;计算机设备中的处理器610和存储装置620可以通过总线或其他方式连接,图6中以通过总线连接为例。
存储装置620作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本公开实施例中的应用于主节点的分区表的分组聚集查询方法对应的程序指令/模块;又如,本公开实施例中的应用于各计算节点的分区表的分组聚集查询方法对应的程序指令/模块。处理器610通过运行存储在存储装置620中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现本公开实施例所提供的分区表的分组聚集查询方法。
存储装置620可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置620可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置620可进一步包括相对于处理器610远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本实施例提供的一种计算机设备可用于执行上述任意实施例提供的分区表的分组聚集查询方法,具备相应的功能和有益效果。
本公开实施例还提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于实现本公开实施例所提供的分区表的分组聚集查询方法。
当然,本公开实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本公开任意实施例所提供的分区表的分组聚集查询方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本公开可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述的方法。
值得注意的是,上述分区表的分组聚集查询装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本公开的保护范围。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种分区表的分组聚集查询方法,其特征在于,应用于主节点,所述方法包括:
确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划;
将所述分组聚集执行计划发送至所有的计算节点,以使各计算节点在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,并将所述执行结果发送至所述主节点;
将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
2.根据权利要求1所述的方法,其特征在于,所述确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划之前,还包括:
获取所述分组聚集查询对应的分组条件;
根据所述分组条件确定所述分组聚集查询符合预设条件。
3.根据权利要求1所述的方法,其特征在于,所述分组聚集查询,通过以下方式得到:
接收客户端发送的查询请求,对所述查询请求进行解析,生成对应的语法树;
若所述语法树中包含的目标命令为数据操纵语言命令,则对所述语法树进行语义分析和查询重写,得到对应的查询树;
对所述查询树进行提取,得到所述分组聚集查询。
4.根据权利要求3所述的方法,其特征在于,还包括:
若所述语法树中包含的目标命令不是数据操纵语言命令,则通过本地命令程序将所述目标命令下发至所有的计算节点,以使各计算节点分别执行所述目标命令,得到对应的执行结果,并将所述执行结果发送至所述主节点。
5.一种分区表的分组聚集查询方法,其特征在于,应用于各计算节点,所述方法包括:
接收主节点发送的分组聚集执行计划,其中,所述分组聚集执行计划由所述主节点确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中之后生成;
在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,并将所述执行结果发送至所述主节点,以使所述主节点将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
6.根据权利要求5所述的方法,其特征在于,所述在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,包括:
根据所述分组聚集执行计划,获取各分区分别对应的待聚集的原始分区数据;
对所述原始分区数据进行部分聚集操作,得到第一聚集结果;
对所述第一聚集结果进行数据重分布操作,得到第二聚集结果;
对所述第二聚集结果进行最终聚集操作,得到第三聚集结果;
对所有第三聚集结果进行追加操作,得到对应的执行结果。
7.一种分区表的分组聚集查询装置,其特征在于,应用于主节点,所述装置包括:
生成模块,用于确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中,生成对应的分组聚集执行计划;
发送模块,用于将所述分组聚集执行计划发送至所有的计算节点,以使各计算节点在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,并将所述执行结果发送至所述主节点;
汇总模块,用于将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
8.一种分区表的分组聚集查询装置,其特征在于,应用于各计算节点,所述装置包括:
接收模块,用于接收主节点发送的分组聚集执行计划,其中,所述分组聚集执行计划由所述主节点确定分区表的分组聚集查询符合预设条件时,将所述分组聚集操作下推至所述分区表的各个分区中之后生成;
执行模块,用于在各分区上并行执行所述分组聚集执行计划,得到对应的执行结果,并将所述执行结果发送至所述主节点,以使所述主节点将收到的所有执行结果进行汇总,并将汇总后得到的总执行结果返回至对应的客户端。
9.一种计算机设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一所述的方法。
CN202111568262.4A 2021-12-21 2021-12-21 分区表的分组聚集查询方法、装置、计算机设备和介质 Pending CN114254005A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111568262.4A CN114254005A (zh) 2021-12-21 2021-12-21 分区表的分组聚集查询方法、装置、计算机设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111568262.4A CN114254005A (zh) 2021-12-21 2021-12-21 分区表的分组聚集查询方法、装置、计算机设备和介质

Publications (1)

Publication Number Publication Date
CN114254005A true CN114254005A (zh) 2022-03-29

Family

ID=80793404

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111568262.4A Pending CN114254005A (zh) 2021-12-21 2021-12-21 分区表的分组聚集查询方法、装置、计算机设备和介质

Country Status (1)

Country Link
CN (1) CN114254005A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114969110A (zh) * 2022-07-21 2022-08-30 阿里巴巴(中国)有限公司 查询方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114969110A (zh) * 2022-07-21 2022-08-30 阿里巴巴(中国)有限公司 查询方法和装置
CN114969110B (zh) * 2022-07-21 2022-10-21 阿里巴巴(中国)有限公司 查询方法和装置

Similar Documents

Publication Publication Date Title
Wylot et al. RDF data storage and query processing schemes: A survey
CN111046630B (zh) 一种json数据的语法树提取方法
CN109815283B (zh) 一种异构数据源可视化查询方法
CN105335403B (zh) 数据库访问方法及装置、数据库系统
US9298761B2 (en) Adaptive merging in database indexes
US8234268B2 (en) System, method, and computer-readable medium for optimizing processing of distinct and aggregation queries on skewed data in a database system
US8965918B2 (en) Decomposed query conditions
US11514009B2 (en) Method and systems for mapping object oriented/functional languages to database languages
US10210280B2 (en) In-memory database search optimization using graph community structure
CN111352950B (zh) 数据库表等值连接的优化方法、装置、服务器及存储介质
CN101916280A (zh) 并行计算系统及按查询内容进行负载均衡的方法
CN104111958A (zh) 一种数据查询方法及装置
CN109299101B (zh) 数据检索方法、装置、服务器和存储介质
CN108763536B (zh) 数据库访问方法及装置
CN112015741A (zh) 一种海量数据的分库分表存储方法与装置
CN114254005A (zh) 分区表的分组聚集查询方法、装置、计算机设备和介质
CN117421302A (zh) 一种数据处理方法及相关设备
CN112182031A (zh) 数据查询方法及装置、存储介质、电子装置
CN110297858B (zh) 执行计划的优化方法、装置、计算机设备和存储介质
Romero et al. Bolt: Fast inference for random forests
US12026162B2 (en) Data query method and apparatus, computing device, and storage medium
CN112905598B (zh) 基于接口实现分离的图任务中间结果存储方法及系统
CN114880385B (zh) 一种通过自动组合流程接入地质灾害数据的方法及装置
US9378229B1 (en) Index selection based on a compressed workload
CN111737290A (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
CB02 Change of applicant information

Country or region after: China

Address after: 100102 201, 2 / F, 101, No. 5 building, No. 7 Rongda Road, Chaoyang District, Beijing

Applicant after: China Electronics Technology Group Jincang (Beijing) Technology Co.,Ltd.

Address before: 100102 201, 2 / F, 101, No. 5 building, No. 7 Rongda Road, Chaoyang District, Beijing

Applicant before: BEIJING KINGBASE INFORMATION TECHNOLOGIES Inc.

Country or region before: China

CB02 Change of applicant information