1.本发明实施例涉及数据库
技术领域:
:,尤其涉及一种数据分组方法、装置、电子设备和存储介质。
背景技术:
::2.结构化数据库中结构化查询语句(structuredquerylanguage,sql语言)是最重要且最常用的数据库操作语言,在sql语言中groupby子句用于对数据进行分组处理。目前,为了实现一个包含groupby子句的sql查询语句,需要将查询表中的数据取出,并按照groupby子句中指定的众多分组项中的每一个分组项来获取到分组结果。但是在某些情况下,实际只需要计算指定的众多分组项中的一个或少数几个分组项即可完成分组,获取到相同的分组结果。现有数据库中的分组语句的执行效率存在提高的空间。技术实现要素:3.本发明实施例提供一种数据分组方法、装置、电子设备和存储介质,以实现分组语句的执行效率,提高数据处理速度,可降低数据库的性能开销。4.第一方面,本发明实施例提供了一种数据分组方法,所述方法包括:5.获取结构化查询语句中分组子句的至少一个分组列;6.根据各所述分组列中的特征列剔除具有相同分组效果的所述分组列;7.根据剔除后的各所述分组列实现所述结构化查询语句对应数据分组。8.第二方面,本发明实施例还提供了一种数据分组装置,所述装置包括:9.分组获取模块,用于获取结构化查询语句中分组子句的至少一个分组列;10.分组剔除模块,用于根据各所述分组列中的特征列剔除具有相同分组效果的所述分组列;11.分组执行模块,用于根据剔除后的各所述分组列实现所述结构化查询语句对应数据分组。12.第三方面,本发明实施例还提供了一种电子设备,所述电子设备包括:13.一个或多个处理器;14.存储装置,用于存储一个或多个程序,15.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例中任一所述的数据分组方法。16.第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如本发明实施例中任一所述的数据分组方法。17.本发明实施例的技术方案,通过获取结构化查询语句中分组子句的至少一个分组列,根据各分组列中的特征列剔除具有相同分组效果的分组列,根据剔除后的各分组列实现结构化查询语句对应数据分组。上述技术方案,使用剔除后的分组列进行分组,减少分组列的数量,可减少计算和比较的数据量,提高分组计算的速度,从而提高分组语句的执行效率。附图说明18.图1为本发明实施例一提供的一种数据分组方法的流程图;19.图2是本发明实施例二提供的另一种数据分组方法的流程图;20.图3是本发明实施例三提供的一种数据分组装置的结构示意图;21.图4为本发明实施例四提供的一种电子设备的结构示意图。具体实施方式22.下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构,此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。23.实施例一24.图1为本发明实施例一提供的一种数据分组方法的流程图,本发明实施例可适用于数据分组的情况,例如在sql语句中利用包括分组列的groupby子句实现数据分组,该方法可以由数据分组装置来执行,该装置可以采用硬件和/或软件的方式来实现,参见图1,本发明实施例提供的方法具体包括如下步骤:25.s110、获取结构化查询语句中分组子句的至少一个分组列。26.其中,结构化查询语句是一种对数据库进行操作的语言,例如,结构化查询语句可以是sql语句,可以用于访问和处理数据库,包括数据插入、查询、更新和删除。而结构化查询语句中的分组子句可以用于对数据进行分组,例如分组子句可以是groupby语句,groupby语句中可以包括一个或多个分组列,利用groupby语句可以根据一个或多个分组列对数据进行分组,groupby语句若结合sql中的聚合函数,可以用于对每个分组进行信息的汇总。其中,聚合函数可以用于统计、求和以及求最值等。例如,分组子句与聚合函数结合使用,可以用于统计各个分组的记录信息。其中,分组列可以是数据库中数据表的字段名,分组子句结合分组列,可以实现以分组列为依据进行分组。27.需要说明的是,实现对数据的分组,在结构化查询语句的分组子句中需要根据目标数据表中的字段,将目标数据表中的一个字段或多个字段预先指定为对应的分组列,以符合结构化查询语句的语法规范,从而程序可以正常运行。当然,目标数据表的数量可以是一个或多个,根据实际情况而定。28.本发明实施例,当结构化查询语句中包括分组子句时,可以对分组子句中的一个或多个分组列进行逐个遍历,可以在遍历的过程中,获取各分组列,并可以保存在数组或链表中。以便于后续对存储在数组或链表中的分组列进行操作。29.s120、根据各分组列中的特征列剔除具有相同分组效果的分组列。30.其中,特征列可以是能够代表或标识其它分组列的分组列。由于特征列可以代表其它分组列,仅通过特征列在目标数据表中可以找到特征列和其它被标识的分组列的数据,因此仅通过特征列与通过特征列和其它分组列共同在数据表中找到的数据是相同的,进而分组的结果是相同的,该情况可以认为为相同的分组效果,而其它被标识的分组列可以认为是具有相同分组效果的分组列。而剔除可以认为是为具有相同分组效果的分组列设置忽略标识或遮盖标识,例如在实际分组计算的过程中,设置有忽略标识或遮盖标识的分组列,不参与计算和比较。31.本发明实施例,可以在对分组子句中的分组列进行遍历的过程中,可以在识别到能够标识其它分组列的特征列时,可以在内存中保留该特征列,并可以将被标识的分组列进行剔除,可以在内存中不保留被标识的分组列,以保证在后续的分组计算的过程中,减少计算和比较的数据,提高分组语句的执行效率。32.s130、根据剔除后的各分组列实现结构化查询语句对应数据分组。33.本发明实施例,可以在利用结构化查询语句对目标数据表进行相应的数据查询之后,对数据查询的一条或多条数据结果进行分组,可以在分组的过程中,按照保存在内存中的各分组列进行计算,可以根据剔除后的各分组列进行分组以减少分组计算量,提高分组效率。34.本发明实施例的技术方案,通过获取结构化查询语句中分组子句的至少一个分组列,根据各分组列中的特征列剔除具有相同分组效果的分组列,根据剔除后的各分组列实现结构化查询语句对应数据分组。上述技术方案,通过采用仅根据剔除后的各分组列实现结构化查询语句对应数据分组的方法,减少参与计算分组列的数量,在实际计算的过程中,可减少数据处理的计算量,提高数据处理的速度,从而提高分组语句的执行效率。35.实施例二36.图2是本发明实施例二提供的另一种数据分组方法的流程图,本发明实施例是在上述发明实施例基础上的具体化,参见图2,本发明实施例提供的方法具体包括如下步骤:37.s210、处理结构化查询语句以获取语句内存结构。38.其中,语句内存结构可以认为是结构化语句在内存中进行存储的数据结构。例如,可以包括哈希表、树、链表等数据结构。结构化查询语句的处理可以是词法分析、语法分析以及语义分析。39.本发明实施例,可以对用户输入的结构化查询语句进行处理,以符合结构化查询语言的规范,保证程序正常运行,可以在处理结构化查询语句之后,可以执行结构化查询语句,从而生成结构化查询语句的语句内存结构,可以在语句内存结构中保存相应的结构化查询语句。40.进一步的,在上述发明实施例的基础上,处理包括词法分析和语法分析。41.本发明实施例,处理可以认为是对结构化查询语句的词法和语法的分析,其中,词法分析可以是分析量化无意义的字符流,将该字符流翻译为离散的字符组,包括识别标识符、关键字,符号和操作符,以供语法分析。而语法分析将接收到的字符组组织起来,并转换为结构化查询语言语法定义所允许的序列。通过词法分析和语法分析可以有效保证结构化查询语句符合结构化查询语言的规范,以保证后续操作的正确性。42.s220、在确定语句内存结构存在分组子句时,提取分组子句内的分组列。43.本发明实施例,可以判断语句内存结构中是否包括分组子句,如果语句内存结构中包括分组子句,则可以提取分组子句内的分组列。例如,若分组子句内的分组列的数量超过1,则可以进行逐个遍历,在遍历的过程中提取分组列,并可以将分组列提取到内存中进行保存;若分组子句内的分组列的数量等于1,可以直接提取分组子句内的分组列,并可以将分组列提取到内存中进行保存。44.s230、确定各分组列中符合特征列条件的特征列,其中,特征列条件包括属于非空列且具有unique约束或属于主键。45.其中,唯一性约束(unique)可以用来保证所指定列中的每个值是唯一,也可以多列唯一,但允许列为空;主键(primarykey)可以用于唯一标识数据表中每一条记录,仅通过主键可以准确定位到相应的行数据,主键所在的列在整个数据表中无重复值,不允许列为空。因此,非空且分组列中数据都是唯一的值,可以认为该分组列符合特征列的条件。46.本发明实施例,在提取分组子句的分组列的过程中,判断每个分组列是否符合特征列的条件,当分组列为非空且具有unique约束或分组列属于主键约束时,则认为该分组列为特征列。47.s240、按照各分组列与特征列属于相同数据表的情况剔除具有相同分组效果的分组列。48.本发明实施例,可以在确定特征列之后,记录特征列的数据表,可以将其它分组列的数据表逐一与特征列的数据表进行比较,如果其它分组列的数据表与特征列的数据表是相同的,则可以认为仅通过特征列与通过特征列和其它分组列组合进行分组的效果是相同的,则可以将其它分组列进行剔除,其它分组列的数据在分组计算的过程中不参与比较和计算。49.s250、获取结构化查询语句对应的待分组数据。50.本发明实施例,可以通过执行结构化查询语句,获取到结构化查询语句对应的待分组的数据。例如,可以根据结构化查询语句的查询子句select语句中指定的一个或多个列,获取到结构化查询语句对应的待分组的数据。51.s260、将待分组数据按照剔除后的各分组列执行数据分组。52.本发明实施例,获取到待分组的数据后,可以根据剔除后的一个或多个分组列对待分组的数据进行数据分组。在实际计算的过程中,仅剔除后的分组列参与计算,提高了分组语句的执行效率,并且根据剔除后的分组列与剔除前的分组列执行数据分组具有相同的分组效果,因此,在保证提高分组语句的执行效率的同时,还保证了分组的准确性。53.进一步的,在上述发明实施例的基础上,按照各分组列与特征列属于相同数据表的情况剔除具有相同分组效果的分组列,包括:54.a1、获取特征列所属的第一数据表,并将第一数据表存储在链表。55.需要说明的是,在当分组列的数量超过1个时,需要创建链表,链表中的结点用于存储分组列和对应的数据表,使用链表进行存储数据便于在后续的执行操作的过程中可以动态生成结点,可以充分利用内存空间。本发明实施例,在确定特征列之后,在语句内存结构中找到相应的第一数据表,并对链表进行遍历,在遍历的过程中,判断第一数据表是否与链表中的数据表相同,如果相同,则无需处理,如果不相同,则在链表上新增一个结点,并以特征列和第一数据表对应的形式存储在新增的结点中。56.b1、提取不为特征列的分组列所属的第二数据表。57.需要说明的是,在提取第二数据表之前,需对链表再次遍历,以找到同属相同表且能够被标识的分组列。具体的,判断各分组列是否存在链表中,如果该分组列不存在链表中,则该分组列可以认为是不为特征列的分组列。58.本发明实施例,在判断各分组列是否存在链表中时,可以记录保存判断结果为不存在的分组列,并将相应的所属的第二数据表从语句内存结构中进行提取。59.c1、判断第二数据表是否存储于链表,若是,则将分组列剔除,若否,则不对分组列进行处理。60.本发明实施例,对链表再次遍历并判断,判断第二数据表是否在链表中存在,如果存在,表示第二数据表和第一数据表是同一张表,则说明该第二数据表对应的分组列可以被特征列所标识,为被标识列,将该分组列在实际计算的过程中进行剔除,如果不存在,表示第二数据表和第一数据表不是同一张表,说明该分组列所属的数据表没有特征列,该分组列不能被其它标识列标识,则跳过该分组列,无需做任何处理。61.进一步的,在上述发明实施例的基础上,剔除包括:为分组列设置忽略标识。62.本发明实施例,在判断第二数据表是否在链表中存在,且判断结果为存在时,可以将该第二数据表对应的分组列设置忽略标识,便于在实际计算和比较分组列时被忽略,只需关注没有设置忽略标识的分组列,从而可以有效减少计算和比较分组列的数量,提高分组语句执行的效率。63.示例性的,本发明实施例以查询不同的客户订单信息以及订单个数为例。首先有预先定义的三个数据表,分别为customer顾客信息表、orders订单信息表,shop店铺信息表,具体的,customer顾客信息表定义为:createtablecustomer(idintprimarykey,namevarchar(20),ageint);其中id表示客户的身份id,primarykey表示id为主键,name表示客户的名字,age表示客户的年龄。orders订单信息表定义为:createtableorders(orderidintprimarykey,customeridint,datedate,shopidint);其中orderid表示订单号,primarykey表示orderid为主键,customerid表示客户id,date表示订单日期。shop店铺信息表定义为:createtableshop(shopidint,shopnamevarchar(20));其中,shopid表示店铺的id,shopname表示店铺的名字。64.具体的,以查询2021年5月1日到2021年8月1日期间,不同的客户下订单的信息及其订单个数为例:sql结构化查询语句为:selectid,name,age,date,orderid,shopname,count(*)fromcustomer,orders,shopwhereid=customeridandorders.shopid=shop.shopidanddate》=date'2021-05-01'anddate《date'2021-08-01'groupbyid,name,age,date,orderid,shopname;其中,该结构化查询语句包括select语句、聚合函数count,groupby分组子句;共6个分组列,其中分组列id,name,age都属于同一个customer顾客信息表,分组列date,orderid属于同一个orders订单信息表,分组列shopname属于shop店铺信息表。具体数据分组可以包括如下步骤:65.步骤1:对sql语句进行词法和语法分析后生成sql的语句内存结构。66.步骤2:判断sql语句中是否包含groupby子句,如果没有,则进行步骤8;如果有groupby子句,则进行步骤3。67.步骤3:如果分组列的个数小于等于1,则进行步骤8;否则创建一个链表lst,进行步骤4。68.步骤4:逐个遍历sql语句中的每一个分组列,判断该分组列是否为所属表的特征列,如果是则进行步骤5;如果不是,则不需要处理,跳过当前列,并取下一个分组列,继续进行步骤4;遍历结束,则进行步骤6。69.需要说明的是,需要遍历的每个分组列为分组列id、name、age、date、orderid和shopname。70.步骤5:遍历链表lst,判断当前的分组列col的所属表t是否已经存在于链表lst中,如果表t不存在,则在链表lst上新增一个结点(分组列col,表t),记录该分组列col及其所属表t,继续进行步骤4,该分组列被称为标识列;如果存在表t,则不需要处理,忽略当前分组列,进入步骤4。71.需要说明的是,由于id为customer顾客信息表的特征列,因此需要新增一个结点保存id分组列和customer顾客信息表,在新增之前需要先判断customer顾客信息表是否已经存在于链表lst中,该判断保证了一个表只需要保留一个特征列即可。同理,orderid为orders订单信息表的特征列,也需要判断和新增结点。72.步骤6:遍历sql语句中的每一个分组列,为标识列对应的数据表上的非标识列打上标记;标识列(链表lst上的分组列)能唯一标识对应的数据表的其它分组列,需要保留使用;遍历sql语句每一个分组列,判断该分组列col是否存在于链表lst中,如果存在,不需要处理,则跳过,继续遍历分组列,否则进行步骤7;遍历结束,进行步骤8。73.需要说明的是,需要第二次遍历分组列id、name、age、date、orderid和shopname,为了判断分组列是否能被链表lst中的特征列标识。例如判断id列时,需要先判断id这列是否存在于链表lst中,发现存在后,意味着该列不能被忽略,同理分组列orderid也不能被忽略。继续判断分组列name、age、date和shopname,若都不在链表lst中,则进入步骤7。74.步骤7:判断该分组列col的所属表t是否存在于链表lst中;如果存在链表lst中,则分组列col可以被标识列(其它具有特征列属性的分组列)标识,为该非标识列打上忽略标记,标记该分组列col在实际计算和比较分组列中被忽略,继续进行步骤6,遍历下一个分组列;如果不存在于链表lst中,则该表t上没有特征列,该列col不能被其它标识列标识,需要保留使用,跳过该分组列,继续进行步骤6的遍历。75.需要说明的是,判断name和age分组列的所属表customer顾客信息表是否存在于链表lst中,发现lst上的结点(id分组列,customer顾客信息表)中有customer顾客信息表,因此存在,则认为分组列name和age能被具有特征列属性的分组列id标识,进而认为分组列name和age不需要参与实际的分组计算和比较。同理date的所属表orders订单信息表也存在于链表lst上,因此分组列date也需要打上忽略标记,而shopname分组列的所属表shop店铺信息表不存在于链表lst上,因此不需要打上忽略标记;最后分组计算比较时,只需要关注id,orderid和shopname分组列,其它分组列都有忽略标记。76.步骤7:优化结束。77.需要说明的是,select语句中可能包括分组列,因此优化分析时,不能直接将能被标识的分组列直接移除,这样不符合语法要求。因此在步骤6中,增加对能被标识的分组列的标记,以此在实际计算和比较分组时,忽略该分组列;两次遍历sql语句的分组列:步骤4、5第一次遍历是找出能标识其它分组列的特征列,步骤6第二次遍历是找出能同属一个表且能被标识的分组列。78.实施例三79.图3是本发明实施例三提供的一种数据分组装置的结构示意图,可执行本发明任意实施例所提供的数据分组方法,具备执行方法相应的功能模块和有益效果。该装置可以由软件和/或硬件实现,具体包括:分组获取模块301、分组剔除模块302和分组执行模块303。80.分组获取模块301,用于获取结构化查询语句中分组子句的至少一个分组列;81.分组剔除模块302,用于根据各所述分组列中的特征列剔除具有相同分组效果的所述分组列;82.分组执行模块303,用于根据剔除后的各所述分组列实现所述结构化查询语句对应数据分组。83.本发明实施例的技术方案,通过分组获取模块获取结构化查询语句中分组子句的至少一个分组列,通过分组剔除模块根据各分组列中的特征列剔除具有相同分组效果的分组列,通过分组执行模块根据剔除后的各分组列实现结构化查询语句对应数据分组。上述技术方案,通过采用仅根据剔除后的各分组列实现结构化查询语句对应数据分组的方法,减少参与计算分组列的数量,在实际计算的过程中,可减少数据处理的计算量,提高数据处理的速度,从而提高分组语句的执行效率。84.进一步的,在上述发明实施例的基础上,所述装置中分组获取模块301包括:85.结构获取单元,用于处理所述结构化查询语句以获取语句内存结构;86.分组提取单元,用于在确定所述语句内存结构存在所述分组子句时,提取所述分组子句内的所述分组列。87.进一步的,在上述发明实施例的基础上,所述处理包括词法分析和语法分析。88.进一步的,在上述发明实施例的基础上,所述装置中分组剔除模块302包括:89.特征列确定单元,用于确定各所述分组列中符合特征列条件的所述特征列,其中,所述特征列条件包括属于非空列且具有unique约束或属于主键;90.分组剔除单元,用于按照各所述分组列与所述特征列属于相同数据表的情况剔除具有相同分组效果的所述分组列。91.进一步的,在上述发明实施例的基础上,所述分组剔除单元具体用于:92.获取所述特征列所属的第一数据表,并将所述第一数据表存储在链表;93.提取不为所述特征列的所述分组列所属的第二数据表;94.判断所述第二数据表是否存储于所述链表,若是,则将所述分组列剔除,若否,则不对所述分组列进行处理。95.进一步的,在上述发明实施例的基础上,所述剔除包括:为所述分组列设置忽略标识。96.进一步的,在上述发明实施例的基础上,所述装置中分组执行模块303包括:97.数据获取单元,用于获取所述结构化查询语句对应的待分组数据;98.分组执行单元,用于将所述待分组数据按照剔除后的各所述分组列执行数据分组。99.实施例四100.图4为本发明实施例四提供的一种电子设备的结构示意图。图4示出了适于用来实现本发明实施方式的电子设备412的框图。图4显示的电子设备412仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。设备412是典型的实现数据分组方法的电子设备。101.如图4所示,电子设备412以通用计算设备的形式表现。电子设备412的组件可以包括但不限于:一个或者多个处理器416,存储装置428,连接不同系统组件(包括存储装置428和处理器416)的总线418。102.总线418表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(industrystandardarchitecture,isa)总线,微通道体系结构(microchannelarchitecture,mca)总线,增强型isa总线、视频电子标准协会(videoelectronicsstandardsassociation,vesa)局域总线以及外围组件互连(peripheralcomponentinterconnect,pci)总线。103.电子设备412典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备412访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。104.存储装置428可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(randomaccessmemory,ram)440和/或高速缓存存储器442。电子设备412可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统434可以用于读写不可移动的、非易失性磁介质(图4未显示,通常称为“硬盘驱动器”)。尽管图4中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如只读光盘(compactdisc-readonlymemory,cd-rom)、数字视盘(digitalvideodisc-readonlymemory,dvd-rom)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线418相连。存储装置428可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。105.具有一组(至少一个)程序模块426的程序436,可以存储在例如存储装置428中,这样的程序模块426包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块426通常执行本发明所描述的实施例中的功能和/或方法。106.电子设备412也可以与一个或多个外部设备414(例如键盘、指向设备、摄像头、显示器424等)通信,还可与一个或者多个使得用户能与该电子设备412交互的设备通信,和/或与使得该电子设备412能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口422进行。并且,电子设备412还可以通过网络适配器420与一个或者多个网络(例如局域网(localareanetwork,lan),广域网wideareanetwork,wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器420通过总线418与电子设备412的其它模块通信。应当明白,尽管图4中未示出,可以结合电子设备412使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、磁盘阵列(redundantarraysofindependentdisks,raid)系统、磁带驱动器以及数据备份存储系统等。107.处理器416通过运行存储在存储装置428中的程序,从而执行各种功能应用以及数据处理,例如实现本发明上述实施例所提供的数据分组方法。108.实施例五109.本发明实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该程序被处理装置执行时实现如本发明实施例中的数据分组方法。本发明上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。110.在一些实施方式中,客户端、服务器可以利用诸如http(hypertexttransferprotocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“lan”),广域网(“wan”),网际网(例如,互联网)以及端对端网络(例如,adhoc端对端网络),以及任何当前已知或未来研发的网络。111.上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。112.上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取结构化查询语句中分组子句的至少一个分组列;113.根据各所述分组列中的特征列剔除具有相同分组效果的所述分组列;114.根据剔除后的各所述分组列实现所述结构化查询语句对应数据分组。115.可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。116.附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。117.描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。118.本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑设备(cpld)等等。119.在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。120.注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其它等效实施例,而本发明的范围由所附的权利要求范围决定。当前第1页12当前第1页12
技术特征:
1.一种数据分组方法,其特征在于,所述方法包括:获取结构化查询语句中分组子句的至少一个分组列;根据各所述分组列中的特征列剔除具有相同分组效果的所述分组列;根据剔除后的各所述分组列实现所述结构化查询语句对应数据分组。2.根据权利要求1所述方法,其特征在于,所述获取结构化查询语句中分组子句的至少一个分组列,包括:处理所述结构化查询语句以获取语句内存结构;在确定所述语句内存结构存在所述分组子句时,提取所述分组子句内的所述分组列。3.根据权利要求2所述方法,其特征在于,所述处理包括词法分析和语法分析。4.根据权利要求1所述方法,其特征在于,所述根据各所述分组列中的特征列剔除具有相同分组效果的所述分组列,包括:确定各所述分组列中符合特征列条件的所述特征列,其中,所述特征列条件包括属于非空列且具有unique约束或属于主键;按照各所述分组列与所述特征列属于相同数据表的情况剔除具有相同分组效果的所述分组列。5.根据权利要求4所述方法,其特征在于,所述按照各所述分组列与所述特征列属于相同数据表的情况剔除具有相同分组效果的所述分组列,包括:获取所述特征列所属的第一数据表,并将所述第一数据表存储在链表;提取不为所述特征列的所述分组列所属的第二数据表;判断所述第二数据表是否存储于所述链表,若是,则将所述分组列剔除,若否,则不对所述分组列进行处理。6.根据权利要求1、4或5中任一所述方法,其特征在于,所述剔除包括:为所述分组列设置忽略标识。7.根据权利要求1所述方法,其特征在于,所述根据剔除后的各所述分组列实现所述结构化查询语句对应数据分组,包括:获取所述结构化查询语句对应的待分组数据;将所述待分组数据按照剔除后的各所述分组列执行数据分组。8.一种数据分组装置,其特征在于,所述装置包括:分组获取模块,用于获取结构化查询语句中分组子句的至少一个分组列;分组剔除模块,用于根据各所述分组列中的特征列剔除具有相同分组效果的所述分组列;分组执行模块,用于根据剔除后的各所述分组列实现所述结构化查询语句对应数据分组。9.一种电子设备,其特征在于,所述电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的数据分组方法。10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序
被处理器执行时实现如权利要求1-7中任一所述的数据分组方法。
技术总结
本发明实施例公开了数据分组方法、装置、电子设备和存储介质。该方法包括:获取结构化查询语句中分组子句的至少一个分组列;根据各所述分组列中的特征列剔除具有相同分组效果的所述分组列;根据剔除后的各所述分组列实现所述结构化查询语句对应数据分组。本发明实施例使用剔除后的分组列进行分组,减少分组列的数量,可减少计算和比较的数据量,提高分组计算的速度,从而提高分组语句的执行效率。从而提高分组语句的执行效率。从而提高分组语句的执行效率。
技术研发人员:扈天阳 朱仲颖 韩朱忠
受保护的技术使用者:上海达梦数据库有限公司
技术研发日:2021.11.29
技术公布日:2022/3/8