CN104123374A - 分布式数据库中聚合查询的方法及装置 - Google Patents
分布式数据库中聚合查询的方法及装置 Download PDFInfo
- Publication number
- CN104123374A CN104123374A CN201410364288.0A CN201410364288A CN104123374A CN 104123374 A CN104123374 A CN 104123374A CN 201410364288 A CN201410364288 A CN 201410364288A CN 104123374 A CN104123374 A CN 104123374A
- Authority
- CN
- China
- Prior art keywords
- function
- aggregate
- query statement
- subquery
- sql 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.)
- Granted
Links
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
- G06F16/2433—Query languages
- G06F16/244—Grouping and aggregation
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分布式数据库中聚合查询的方法及装置。所述方法包括:接收客户端发送来的原始SQL查询语句;获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。本发明实现了多机数据库中的聚合查询,而且不必在应用程序中编写聚合处理逻辑,减少了应用程序的开发时间。
Description
技术领域
本发明实施例涉及数据库查询技术,尤其涉及一种分布式数据库中聚合查询的方法及装置。
背景技术
数据库一般通过数据表来存储数据,但数据量不一定是可控的,随着时间和业务的发展,数据库中的数据表会越来越多,数据表中的数据量也会越来越大。相应地,对数据表进行的增删改查等数据操作的开销也会越来越大。另外,一台服务器的硬件资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇硬件资源的瓶颈,因此需要进行分库分表,即把原本存储于一个主机数据库中的数据分块存储到多个主机的数据库中,把原本存储于一个数据表中的数据分块存储到多个数据表中。多个主机的数据库,可称为多个数据节点。
但是,进行分库分表将数据分布到多机数据库后,数据原本集中存储于一个数据表中的某一个或多个列将会转移到多个数据表,甚至多个数据库中,进行散列分布,则不再支持聚合查询。聚合查询,即通过包含一个聚合函数(如SUM或AVG等)来汇总来自多行信息的查询操作。
发明内容
有鉴于此,本发明实施例提供一种分布式数据库中聚合查询的方法及装置,以实现多机数据库中的聚合查询。
第一方面,本发明实施例提供了一种分布式数据库中聚合查询的方法,所述方法包括:
接收客户端发送来的原始SQL查询语句;
获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;
在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;
根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;
将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;
根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。
第二方面,本发明实施例还提供了一种分布式数据库中聚合查询的装置,所述装置包括:
接收模块,用于接收客户端发送来的原始SQL查询语句;
获取模块,用于获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;
变换模块,用于在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;
更新模块,用于根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;
分发接收模块,用于将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;
计算模块,用于根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。
本发明实施例提供的分布式数据库中聚合查询的方法及装置,通过SQL节点获取原始SQL查询语句的查询列和条件子查询中的聚合函数,当存在复杂聚合函数时,将针对多表计算的复杂聚合函数变换为简单聚合函数,根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句,将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果,根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果,以得到聚合查询的结果,实现了多机数据库中的聚合查询,而且不必在应用程序中编写聚合处理逻辑,减少了应用程序的开发时间。
附图说明
图1是本发明实施例一提供的一种分布式数据库中聚合查询的方法的流程图;
图2是本发明实施例提供的分布式数据库中聚合查询的方法中的新SQL查询语句的形成流程图;
图3是本发明实施例三提供的一种分布式数据库中聚合查询的装置的示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
实施例一
图1是本发明实施例一提供的一种分布式数据库中聚合查询的方法的流程图,本实施例可适用于实现分布式数据库中的聚合查询。在分布式数据库中包括SQL(Structured Query Language,结构化查询语言)节点和至少一个数据节点,其中,SQL节点用于接收查询命令及根据查询命令进行计算,数据节点用于保存数据。该方法可以由SQL节点来执行,具体包括如下步骤:
步骤110,接收客户端发送来的原始SQL查询语句。
其中,原始SQL语句即在客户端人为输入的原始查询命令。客户端将该查询命令发送至SQL节点,SQL节点接收客户端发送来的原始SQL语句。原始SQL语句包含SELECT关键字、查询列、FROM关键字和表名,其中,查询列是SELECT关键字和FROM关键字之间的以逗号隔开的部分,查询列是该SQL语句需要查询获得的结果。查询列中可能包含聚合函数以实现聚合查询;FROM关键字和表名,表示从该表名所标识的数据表中获取查询列的数据作为查询结果;原始SQL语句还可能包含WHERE、GROUP BY和/或HAVING等关键字表示的子查询,例如,子查询可跟随FROM关键字和表名,表示从该数据表中有选择的获取查询列的数据。
步骤120,获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数。
SQL节点对所述原始SQL查询语句进行语法解析,获取所述原始SQL查询语句的查询列中的聚合函数,如果所述原始SQL查询语句还包括条件子查询,同时,获取所述原始SQL查询语句的条件子查询中的聚合函数。
步骤130,在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数。
其中,常用聚合函数为MAX(求最大值)、MIN(求最小值)、SUM(求和)、AVG(求平均值)、COUNT(求记录数)等,复杂聚合函数是可以表示成一个或者多个简单聚合函数的形式的聚合函数,在常用聚合函数中,AVG函数可以表示成SUM函数除以COUNT函数的形式,因此AVG函数为复杂聚合函数。
在所述聚合函数中,当存在复杂聚合函数且复杂聚合函数针对多表计算时,SQL节点保存该复杂聚合函数,并根据关系代数等价变换将所述复杂聚合函数变换为简单聚合函数。
步骤140,根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句。
在变换复杂聚合函数为简单聚合函数后,则相当于对原始SQL查询语句增加了包含变换后的简单聚合函数的查询列,而对于存在条件子查询的原始SQL语句,条件子查询中的复杂聚合函数也变换成了简单聚合函数,同时需要将变换后的条件子查询中的简单聚合函数添加到查询列中,同时保存条件子查询中的条件,去除条件子查询,则原始SQL查询语句更新为新SQL查询语句,所述新SQL查询语句不再包含条件子查询。
步骤150,将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果。
由于数据进行分库分表后保存到了至少两个数据库中,SQL节点将所述新SQL查询语句分发至至少两个数据库(数据节点)中,所述至少两个数据库根据所述新SQL查询语句查询到自身保存的数据并对自身保存的数据进行计算,并将计算结果返回给SQL节点。
步骤160,根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。
由于所述新SQL查询语句还包含了原始SQL查询语句中的复杂聚合函数,而所述至少两个数据库也返回了该复杂聚合函数的查询结果,而该查询结果是不正确的,因此,需要根据该复杂聚合函数与变换后的简单聚合函数的关系来汇总来自至少两个数据库中的根据该复杂聚合函数变换后的简单聚合函数的查询结果,再根据汇总后的简单聚合函数的查询结果计算该复杂聚合函数的查询结果,最后利用保存的条件子查询中的条件对查询结果进行过滤,从而得到所述原始SQL查询语句的查询结果。并将所述原始SQL查询语句的查询结果返回给客户端。
该分布式数据库中聚合查询的方法的工作原理:利用分布式数据库中的SQL节点接收客户端的查询命令(原始SQL查询语句),并根据关系代数等价变换的方法改写查询命令中的复杂聚合函数为简单聚合函数,在查询列中附加子查询中的聚合函数,组成新SQL查询语句,以让数据节点参与计算,然后根据数据节点的计算结果和新SQL查询语句做综合计算,从而实现了分布式数据库中的聚合查询。
本实施例的技术方案,通过SQL节点获取原始SQL查询语句的查询列和条件子查询中的聚合函数,当存在复杂聚合函数时,将针对多表计算的复杂聚合函数变换为简单聚合函数,根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句,将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果,根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果,以得到聚合查询的结果,实现了多机数据库中的聚合查询,而且不必在应用程序中编写聚合处理逻辑,减少了应用程序的开发时间。
在上述技术方案的基础上,根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句优选包括:
将所述简单聚合函数添加到原始SQL查询语句中,作为新查询列,以形成新SQL查询语句,并记录新查询列的位置以及简单聚合函数与复杂聚合函数的关联关系;
记录所述条件子查询中的聚合函数的条件关系。
SQL节点将由复杂聚合函数变换得到的简单聚合函数添加到原始SQL查询语句的查询列中,以形成新SQL查询语句,新添加的简单聚合函数形成的查询列记为新查询列,并将原始SQL语句的查询列和新SQL查询语句的查询列保存到查询列表中,在函数列表中记录新查询列即新添加的简单聚合函数的位置及原始复杂聚合函数的位置,同时在函数列表中记录简单聚合函数与复杂聚合函数的关联关系,将所述条件子查询中的聚合函数的条件关系记录在过滤列表中。其中,查询列表是一存储工具,用于保存SQL查询语句中的查询列;函数列表是一存储工具,用于保存SQL查询语句中的聚合函数和该聚合函数位于查询列中的位置,及简单聚合函数与复杂聚合函数的关联关系;过滤列表用于保存条件子查询中的聚合函数的条件关系。
在上述技术方案的基础上,根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果优选包括:
根据所述新查询列的查询结果和所述关联关系,计算复杂聚合函数的查询结果;
根据所述条件关系和条件子查询的查询结果,计算所述原始SQL查询语句的查询结果。
SQL节点根据至少两个数据库中的基于所述新查询列的查询结果综合计算保存在至少两个数据库中的查询结果,并根据该查询结果和函数列表中保存的复杂聚合函数和简单聚合函数的关联关系,计算复杂聚合函数的查询结果,并根据利用原始SQL查询语句中的条件子查询中的条件关系过滤基于该条件子查询中的聚合函数的查询结果,得到原始SQL查询语句的查询结果。
优选的,所述复杂聚合函数为AVG函数,所述简单聚合函数为COUNT函数和SUM函数;
所述条件子查询为HAVING条件。
在上述技术方案的基础上,图2是本发明实施例提供的分布式数据库中聚合查询的方法中的新SQL查询语句的形成流程图,如图2所示,所述新SQL查询语句的形成操作具体包括如下步骤:
步骤201,通过解析器对所述原始SQL语句进行解析,以生成语法树,其中,所述语法树的节点对应于各查询列和条件子查询。
其中,语法树(syntax tree)是源代码的抽象语法结构的树状表现形式,树上的每个节点都表示源代码中的一种结构。对于一个具体的SQL语句,语法树将该SQL语句的语法结构表示成一种树状形式,其中,根节点表示整个查询,根节点的孩子节点包括该SQL语句中的各个关键字及各个关键字后面的查询字段,每个关键字为一个孩子节点,每个关键字后面的查询字段为一个孩子节点,在SELECT关键字后面的查询字段即为查询列。如果该SQL语句中包括子查询,该子查询的条件为一个孩子节点,如果该子查询的条件包括多个条件,则为该子查询的条件所对应的孩子节点进一步建立孩子节点。例如HAVING关键字的子查询,则在HAVING关键字后面的查询字段即为HAVING子查询。SQL解析器(sql parse)用于对SQL语句进行语法解析。
步骤202,对所述语法树的查询列节点和条件子查询节点进行扫描。
SQL节点对所述语法树的查询列节点和条件子查询节点进行扫描,确定查询列节点和条件子查询节点中是否存在聚合函数。
步骤203,如果存在条件子查询,则将所述条件子查询的条件关系添加到过滤列表中。
SQL节点通过对所述语法树的扫描,如果存在条件子查询,则将所述条件子查询的条件关系添加到过滤列表中。
步骤204,如果所述查询列节点和条件子查询节点中存在聚合函数,则识别聚合函数类型。
SQL节点通过对所述语法树的扫描,如果发现所述查询列节点和条件子查询节点中存在聚合函数,则对该聚合函数的类型进行识别,以识别出该聚合函数是哪一种聚合函数。
步骤205,如果所述聚合函数为AVG函数,则将所述AVG函数替换为COUNT函数和SUM函数,并将COUNT函数和SUM函数添加为查询列,且将所述AVG函数、COUNT函数和SUM函数及其查询列位置记录到函数列表中,并记录所述AVG函数与COUNT函数和SUM函数的关联关系。
步骤206,如果所述聚合函数为非AVG函数,则将所述AVG函数及其查询列位置记录到函数列表中。
通过以上步骤将原始SQL查询语句更新为新SQL查询语句,并保存了查询列中聚合函数的变换关系及聚合函数在查询列中的位置,及条件子查询中的条件关系。
实施例二
本发明实施例二提供了一种分布式数据库中聚合查询的方法,对实施例一提供的分布式数据库中聚合查询的方法进行了具体应用。具体实例为:假设存在数据表acid,包含列:id,name,sex,age,city,mobile,其中id是主键。
Original query(原始查询语句)为:SELECT city,avg(age)FROM acidGROUP BY city HAVING(count(id)>100000)。
原始SQL查询语句的含义:从acid数据表中,满足(count(id)>100000)条件的城市中,获取city的数据,以及avg(age)的数据。
上述原始SQL查询语句中包括两个聚合函数,avg(age),即年龄的平均值,count(id),即计算id的数量。
SQL节点接收到原始SQL查询语句后,对原始SQL查询语句进行语法解析生成语法树(syntax tree),该语法树中包括SELECT关键字、查询列(city,avg(age))、FROM关键字、表名(acid)、GROUP BY关键字、GROUP BY分组条件(city)和HAVING关键字及HAVING子查询(count(id)>100000);扫描语法树中对应的原始代码部分(SELECT city,avg(age)FROM),发现有AVG求平均值的处理,按照等价变化的方法,可以使用SUM(age)和COUNT(age)代替avg(age),并且查询列中没有这两个聚合函数处理,因此,在查询列尾部附加上SUM(age)和COUNT(age),并且将avg(age)函数和其在查询列中的位置存放到function list(函数列表)中,并且SUM(age)和COUNT(age)也一并存放到function list中,标记出与avg(age)函数的关系。
至此,原始SQL查询语句改写为:SELECT city,avg(age),SUM(age),COUNG(age)FROM acid GROUP BY city HAVING(count(id)>100000);记录信息为:对查询列位置为1的列做AVG平均值计算,AVG已经等价替换为SUM和COUNT,因此还包含SUM和COUNT的位置。
接下来扫描语法树中的子查询,发现有having子查询,检查该having子查询中的函数发现有count(id)函数,而查询列中不存在count(id)函数,因此将count(id)函数附加到查询列中,并且存储到function list中,该having子查询还带有过滤条件(>100000),将该过滤条件存放到filter list(过滤列表)中,标记上查询列中count(id)计算完成后,要利用该过滤条件进行过滤。
至此,SQL语句改写为新的SQL语句:SELECT city,avg(age),SUM(age),COUNG(age),COUNT(id)FROM acid GROUP BY city;记录信息为:对id位置的列做COUNT计算,并且计算完成后要做大于10万的过滤,记录下原始查询列数为2,而改写后的查询列数为5。
SQL节点将新的SQL语句发送至各个数据节点,各个数据节点根据该SQL语句对本身保存的数据进行计算,将计算结果返回到SQL节点,SQL节点根据分组处理(即新的SQL语句中的GROUP BY)将各个数据节点的计算结果进行分组,然后将SUM(age)、COUNG(age)、COUNT(id)计算出来,每一行的avg(age)都使用计算出来的SUM(age)/COUNG(age)进行填充,最后将COUNT(id)做大于10万的过滤便完成了计算。最后,SQL节点根据记录的原始查询列数2,将0、1两列数据发送给客户端。
本实施例通过一个具体的实例介绍了分布式数据库中的聚合查询的实现方法。
实施例三
图3是本发明实施例三提供的一种分布式数据库中聚合查询的装置的示意图,本实施例提供的分布式数据库中聚合查询的装置用于实现实施例一提供的分布式数据库中聚合查询的方法。如图3所示,本发明实施例三提供的分布式数据库中聚合查询的装置包括:接收模块310、获取模块320、变换模块330、更新模块340、分发接收模块350和计算模块360。
其中,接收模块310用于接收客户端发送来的原始SQL查询语句;
获取模块320用于获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;
变换模块330用于在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;
更新模块340用于根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;
分发接收模块350用于将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;
计算模块360用于根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。
在上述技术方案的基础上,所述更新模块优选包括:
第一添加子模块,用于将所述简单聚合函数添加到原始SQL查询语句中,作为新查询列,以形成新SQL查询语句,并记录新查询列的位置以及简单聚合函数与复杂聚合函数的关联关系;
第一记录子模块,用于记录所述条件子查询中的聚合函数的条件关系。
在上述技术方案的基础上,所述计算模块优选包括:
第一计算子模块,用于根据所述新查询列的查询结果和所述关联关系,计算复杂聚合函数的查询结果;
第二计算子模块,用于根据所述条件关系和条件子查询的查询结果,计算所述原始SQL查询语句的查询结果。
优选的,所述复杂聚合函数为AVG函数,所述简单聚合函数为COUNT函数和SUM函数;
所述条件子查询为HAVING条件。
在上述技术方案的基础上,所述新SQL查询语句的形成模块具体包括:
解析子模块,用于通过解析器对所述原始SQL语句进行解析,以生成语法树,其中,所述语法树的节点对应于各查询列和条件子查询;
扫描子模块,用于对所述语法树的查询列节点和条件子查询节点进行扫描;
第二添加子模块,用于如果存在条件子查询,则将所述条件子查询的条件关系添加到过滤列表中;
识别子模块,用于如果所述查询列节点和条件子查询节点中存在聚合函数,则识别聚合函数类型;
替换子模块,用于如果所述聚合函数为AVG函数,则将所述AVG函数替换为COUNT函数和SUM函数,并将COUNT函数和SUM函数添加为查询列,且将所述AVG函数、COUNT函数和SUM函数及其查询列位置记录到函数列表中,并记录所述AVG函数与COUNT函数和SUM函数的关联关系;
第二记录子模块,用于如果所述聚合函数为非AVG函数,则将所述AVG函数及其查询列位置记录到函数列表中。
上述分布式数据库中聚合查询的装置可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种分布式数据库中聚合查询的方法,其特征在于,所述方法包括:
接收客户端发送来的原始SQL查询语句;
获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;
在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;
根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;
将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;
根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。
2.根据权利要求1所述的方法,其特征在于,根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句包括:
将所述简单聚合函数添加到原始SQL查询语句中,作为新查询列,以形成新SQL查询语句,并记录新查询列的位置以及简单聚合函数与复杂聚合函数的关联关系;
记录所述条件子查询中的聚合函数的条件关系。
3.根据权利要求2所述的方法,其特征在于,根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果包括:
根据所述新查询列的查询结果和所述关联关系,计算复杂聚合函数的查询结果;
根据所述条件关系和条件子查询的查询结果,计算所述原始SQL查询语句的查询结果。
4.根据权利要求3所述的方法,其特征在于:
所述复杂聚合函数为AVG函数,所述简单聚合函数为COUNT函数和SUM函数;
所述条件子查询为HAVING条件。
5.根据权利要求4所述的方法,其特征在于,所述新SQL查询语句的形成操作具体包括:
通过解析器对所述原始SQL语句进行解析,以生成语法树,其中,所述语法树的节点对应于各查询列和条件子查询;
对所述语法树的查询列节点和条件子查询节点进行扫描;
如果存在条件子查询,则将所述条件子查询的条件关系添加到过滤列表中;
如果所述查询列节点和条件子查询节点中存在聚合函数,则识别聚合函数类型;
如果所述聚合函数为AVG函数,则将所述AVG函数替换为COUNT函数和SUM函数,并将COUNT函数和SUM函数添加为查询列,且将所述AVG函数、COUNT函数和SUM函数及其查询列位置记录到函数列表中,并记录所述AVG函数与COUNT函数和SUM函数的关联关系;
如果所述聚合函数为非AVG函数,则将所述AVG函数及其查询列位置记录到函数列表中。
6.一种分布式数据库中聚合查询的装置,其特征在于,所述装置包括:
接收模块,用于接收客户端发送来的原始SQL查询语句;
获取模块,用于获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;
变换模块,用于在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;
更新模块,用于根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;
分发接收模块,用于将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;
计算模块,用于根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。
7.根据权利要求6所述的装置,其特征在于,所述更新模块包括:
第一添加子模块,用于将所述简单聚合函数添加到原始SQL查询语句中,作为新查询列,以形成新SQL查询语句,并记录新查询列的位置以及简单聚合函数与复杂聚合函数的关联关系;
第一记录子模块,用于记录所述条件子查询中的聚合函数的条件关系。
8.根据权利7所述的装置,其特征在于,所述计算模块包括:
第一计算子模块,用于根据所述新查询列的查询结果和所述关联关系,计算复杂聚合函数的查询结果;
第二计算子模块,用于根据所述条件关系和条件子查询的查询结果,计算所述原始SQL查询语句的查询结果。
9.根据权利要求8所述的装置,其特征在于:
所述复杂聚合函数为AVG函数,所述简单聚合函数为COUNT函数和SUM函数;
所述条件子查询为HAVING条件。
10.根据权利要求9所述的装置,其特征在于,所述新SQL查询语句的形成模块具体包括:
解析子模块,用于通过解析器对所述原始SQL语句进行解析,以生成语法树,其中,所述语法树的节点对应于各查询列和条件子查询;
扫描子模块,用于对所述语法树的查询列节点和条件子查询节点进行扫描;
第二添加子模块,用于如果存在条件子查询,则将所述条件子查询的条件关系添加到过滤列表中;
识别子模块,用于如果所述查询列节点和条件子查询节点中存在聚合函数,则识别聚合函数类型;
替换子模块,用于如果所述聚合函数为AVG函数,则将所述AVG函数替换为COUNT函数和SUM函数,并将COUNT函数和SUM函数添加为查询列,且将所述AVG函数、COUNT函数和SUM函数及其查询列位置记录到函数列表中,并记录所述AVG函数与COUNT函数和SUM函数的关联关系;
第二记录子模块,用于如果所述聚合函数为非AVG函数,则将所述AVG函数及其查询列位置记录到函数列表中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410364288.0A CN104123374B (zh) | 2014-07-28 | 2014-07-28 | 分布式数据库中聚合查询的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410364288.0A CN104123374B (zh) | 2014-07-28 | 2014-07-28 | 分布式数据库中聚合查询的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104123374A true CN104123374A (zh) | 2014-10-29 |
CN104123374B CN104123374B (zh) | 2017-09-29 |
Family
ID=51768785
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410364288.0A Active CN104123374B (zh) | 2014-07-28 | 2014-07-28 | 分布式数据库中聚合查询的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104123374B (zh) |
Cited By (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104504154A (zh) * | 2015-01-14 | 2015-04-08 | 曙光信息产业(北京)有限公司 | 一种数据聚合查询的方法及装置 |
CN105007317A (zh) * | 2015-07-10 | 2015-10-28 | 深圳市创梦天地科技有限公司 | 一种分布式节点的数据处理方法及网关设备 |
CN105138676A (zh) * | 2015-09-08 | 2015-12-09 | 浙江维融电子科技股份有限公司 | 基于高级语言并发聚合计算的分库分表merge查询方法 |
WO2015184762A1 (zh) * | 2014-11-06 | 2015-12-10 | 中兴通讯股份有限公司 | 数据库查询方法及装置 |
CN105447135A (zh) * | 2015-11-19 | 2016-03-30 | 北京锐安科技有限公司 | 数据查找方法和装置 |
CN106055609A (zh) * | 2016-05-25 | 2016-10-26 | 北京小米移动软件有限公司 | nginx日志监控方法、装置、消息分布系统及信息处理的装置 |
CN106250519A (zh) * | 2016-08-04 | 2016-12-21 | 曙光信息产业(北京)有限公司 | 用于并行数据库的数据查询方法和装置 |
WO2016206567A1 (zh) * | 2015-06-26 | 2016-12-29 | 阿里巴巴集团控股有限公司 | 分布式流计算系统、方法和装置 |
CN106547796A (zh) * | 2015-09-23 | 2017-03-29 | 南京中兴新软件有限责任公司 | 数据库的执行方法及装置 |
CN106933923A (zh) * | 2015-12-31 | 2017-07-07 | 北京国双科技有限公司 | 筛选会话的方法和装置 |
CN107003868A (zh) * | 2014-11-14 | 2017-08-01 | 起元技术有限责任公司 | 处理包含联合类型操作的查询 |
CN107315744A (zh) * | 2016-04-26 | 2017-11-03 | 杭州海康威视数字技术股份有限公司 | 一种数据查询方法及装置 |
CN107491510A (zh) * | 2017-08-03 | 2017-12-19 | 国网江苏省电力公司信息通信分公司 | 一种混合异构数据源统一查询系统及分布式查询方法 |
CN107766413A (zh) * | 2017-09-05 | 2018-03-06 | 珠海宇能云企科技有限公司 | 一种实时数据流聚合查询的实现方法 |
CN107977378A (zh) * | 2016-10-25 | 2018-05-01 | 南京途牛科技有限公司 | 一种分布式数据聚合方法和装置 |
CN108874849A (zh) * | 2018-01-31 | 2018-11-23 | 中国科学院计算技术研究所 | 一种非等值关联子查询的优化方法和系统 |
CN108984547A (zh) * | 2017-05-31 | 2018-12-11 | 北京京东尚科信息技术有限公司 | 数据处理的方法和装置 |
CN109117426A (zh) * | 2017-06-23 | 2019-01-01 | 中兴通讯股份有限公司 | 分布式数据库查询方法、装置、设备及存储介质 |
CN109241104A (zh) * | 2018-10-12 | 2019-01-18 | 北京聚云位智信息科技有限公司 | 决策型分布式数据库系统中aisql的解析器及其实现方法 |
CN109344169A (zh) * | 2018-09-20 | 2019-02-15 | 新华三大数据技术有限公司 | 数据处理方法及装置 |
CN109471889A (zh) * | 2018-09-19 | 2019-03-15 | 平安科技(深圳)有限公司 | 报表加速方法、系统、计算机设备和存储介质 |
US20190163783A1 (en) * | 2017-11-30 | 2019-05-30 | International Business Machines Corporation | Aggregation in dynamic and distributed computing systems |
CN110046181A (zh) * | 2019-03-13 | 2019-07-23 | 平安科技(深圳)有限公司 | 基于数据库分布式存储的数据路由的方法和装置 |
CN111259038A (zh) * | 2020-01-16 | 2020-06-09 | 北京思特奇信息技术股份有限公司 | 一种数据库查询及数据导出方法、系统、介质及设备 |
CN112052255A (zh) * | 2020-09-02 | 2020-12-08 | 福建天晴在线互动科技有限公司 | 一种自上而下拆分多表慢查询的sql解释方法及其装置 |
CN112182028A (zh) * | 2020-09-29 | 2021-01-05 | 北京人大金仓信息技术股份有限公司 | 基于分布式数据库的表的数据行数查询方法和装置 |
CN112765286A (zh) * | 2021-02-01 | 2021-05-07 | 广州海量数据库技术有限公司 | 一种基于关系数据库的查询方法及装置 |
US11106651B2 (en) | 2017-11-30 | 2021-08-31 | International Business Machines Corporation | Table discovery in distributed and dynamic computing systems |
CN113468208A (zh) * | 2021-07-19 | 2021-10-01 | 网易(杭州)网络有限公司 | 生成数据查询语句的方法和装置、服务器及存储介质 |
CN114625750A (zh) * | 2022-02-17 | 2022-06-14 | 中国人民解放军空军工程大学 | 一种健壮的计算机自动评判sql查询语句是否正确的方法 |
WO2022127417A1 (zh) * | 2020-12-16 | 2022-06-23 | 中兴通讯股份有限公司 | 数据查询方法、电子设备、存储介质 |
CN116126865A (zh) * | 2023-02-17 | 2023-05-16 | 安芯网盾(北京)科技有限公司 | 一种多种数据库混合使用的代理方法及装置 |
WO2024055153A1 (en) * | 2022-09-13 | 2024-03-21 | Paypal, Inc. | Dual write and dual read access to graph databases |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101681377A (zh) * | 2007-05-23 | 2010-03-24 | 微软公司 | 用于搜索的用户定义的相关性排序 |
CN102142007A (zh) * | 2010-11-23 | 2011-08-03 | 北京中创信测科技股份有限公司 | 一种通用统计方法和装置 |
CN102521405A (zh) * | 2011-12-26 | 2012-06-27 | 中国科学院计算技术研究所 | 支持高速加载的海量结构化数据存储、查询方法和系统 |
US20120254252A1 (en) * | 2011-03-31 | 2012-10-04 | International Business Machines Corporation | Input/output efficiency for online analysis processing in a relational database |
-
2014
- 2014-07-28 CN CN201410364288.0A patent/CN104123374B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101681377A (zh) * | 2007-05-23 | 2010-03-24 | 微软公司 | 用于搜索的用户定义的相关性排序 |
CN102142007A (zh) * | 2010-11-23 | 2011-08-03 | 北京中创信测科技股份有限公司 | 一种通用统计方法和装置 |
US20120254252A1 (en) * | 2011-03-31 | 2012-10-04 | International Business Machines Corporation | Input/output efficiency for online analysis processing in a relational database |
CN102521405A (zh) * | 2011-12-26 | 2012-06-27 | 中国科学院计算技术研究所 | 支持高速加载的海量结构化数据存储、查询方法和系统 |
Cited By (55)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015184762A1 (zh) * | 2014-11-06 | 2015-12-10 | 中兴通讯股份有限公司 | 数据库查询方法及装置 |
CN105574052A (zh) * | 2014-11-06 | 2016-05-11 | 中兴通讯股份有限公司 | 数据库查询方法及装置 |
CN107003868A (zh) * | 2014-11-14 | 2017-08-01 | 起元技术有限责任公司 | 处理包含联合类型操作的查询 |
CN107003868B (zh) * | 2014-11-14 | 2021-05-11 | 起元技术有限责任公司 | 处理包含联合类型操作的查询 |
CN104504154A (zh) * | 2015-01-14 | 2015-04-08 | 曙光信息产业(北京)有限公司 | 一种数据聚合查询的方法及装置 |
CN104504154B (zh) * | 2015-01-14 | 2018-01-16 | 曙光信息产业(北京)有限公司 | 一种数据聚合查询的方法及装置 |
WO2016206567A1 (zh) * | 2015-06-26 | 2016-12-29 | 阿里巴巴集团控股有限公司 | 分布式流计算系统、方法和装置 |
CN105007317A (zh) * | 2015-07-10 | 2015-10-28 | 深圳市创梦天地科技有限公司 | 一种分布式节点的数据处理方法及网关设备 |
CN105007317B (zh) * | 2015-07-10 | 2019-08-06 | 深圳市创梦天地科技有限公司 | 一种分布式节点的数据处理方法及网关设备 |
CN105138676A (zh) * | 2015-09-08 | 2015-12-09 | 浙江维融电子科技股份有限公司 | 基于高级语言并发聚合计算的分库分表merge查询方法 |
CN105138676B (zh) * | 2015-09-08 | 2017-11-24 | 浙江维融电子科技股份有限公司 | 基于高级语言并发聚合计算的分库分表merge查询方法 |
WO2017049913A1 (zh) * | 2015-09-23 | 2017-03-30 | 中兴通讯股份有限公司 | 数据库的执行方法及装置 |
CN106547796B (zh) * | 2015-09-23 | 2022-01-25 | 南京中兴新软件有限责任公司 | 数据库的执行方法及装置 |
CN106547796A (zh) * | 2015-09-23 | 2017-03-29 | 南京中兴新软件有限责任公司 | 数据库的执行方法及装置 |
CN105447135A (zh) * | 2015-11-19 | 2016-03-30 | 北京锐安科技有限公司 | 数据查找方法和装置 |
CN105447135B (zh) * | 2015-11-19 | 2019-04-09 | 北京锐安科技有限公司 | 数据查找方法和装置 |
CN106933923A (zh) * | 2015-12-31 | 2017-07-07 | 北京国双科技有限公司 | 筛选会话的方法和装置 |
CN106933923B (zh) * | 2015-12-31 | 2020-04-21 | 北京国双科技有限公司 | 筛选会话的方法和装置 |
CN107315744A (zh) * | 2016-04-26 | 2017-11-03 | 杭州海康威视数字技术股份有限公司 | 一种数据查询方法及装置 |
CN106055609B (zh) * | 2016-05-25 | 2019-08-06 | 北京小米移动软件有限公司 | nginx日志监控方法、装置、消息分布系统及信息处理的装置 |
CN106055609A (zh) * | 2016-05-25 | 2016-10-26 | 北京小米移动软件有限公司 | nginx日志监控方法、装置、消息分布系统及信息处理的装置 |
CN106250519A (zh) * | 2016-08-04 | 2016-12-21 | 曙光信息产业(北京)有限公司 | 用于并行数据库的数据查询方法和装置 |
CN107977378B (zh) * | 2016-10-25 | 2021-11-02 | 南京途牛科技有限公司 | 一种分布式数据聚合方法和装置 |
CN107977378A (zh) * | 2016-10-25 | 2018-05-01 | 南京途牛科技有限公司 | 一种分布式数据聚合方法和装置 |
CN108984547A (zh) * | 2017-05-31 | 2018-12-11 | 北京京东尚科信息技术有限公司 | 数据处理的方法和装置 |
CN109117426B (zh) * | 2017-06-23 | 2023-06-09 | 金篆信科有限责任公司 | 分布式数据库查询方法、装置、设备及存储介质 |
CN109117426A (zh) * | 2017-06-23 | 2019-01-01 | 中兴通讯股份有限公司 | 分布式数据库查询方法、装置、设备及存储介质 |
CN107491510A (zh) * | 2017-08-03 | 2017-12-19 | 国网江苏省电力公司信息通信分公司 | 一种混合异构数据源统一查询系统及分布式查询方法 |
CN107766413B (zh) * | 2017-09-05 | 2023-07-07 | 珠海宇能云企科技有限公司 | 一种实时数据流聚合查询的实现方法 |
CN107766413A (zh) * | 2017-09-05 | 2018-03-06 | 珠海宇能云企科技有限公司 | 一种实时数据流聚合查询的实现方法 |
US20190163783A1 (en) * | 2017-11-30 | 2019-05-30 | International Business Machines Corporation | Aggregation in dynamic and distributed computing systems |
US11681695B2 (en) | 2017-11-30 | 2023-06-20 | International Business Machines Corporation | Aggregation in dynamic and distributed computing systems |
US11475000B2 (en) * | 2017-11-30 | 2022-10-18 | International Business Machines Corporation | Aggregation in dynamic and distributed computing systems |
US11106651B2 (en) | 2017-11-30 | 2021-08-31 | International Business Machines Corporation | Table discovery in distributed and dynamic computing systems |
US11120001B2 (en) | 2017-11-30 | 2021-09-14 | International Business Machines Corporation | Table discovery in distributed and dynamic computing systems |
CN108874849A (zh) * | 2018-01-31 | 2018-11-23 | 中国科学院计算技术研究所 | 一种非等值关联子查询的优化方法和系统 |
CN108874849B (zh) * | 2018-01-31 | 2020-12-25 | 中国科学院计算技术研究所 | 一种非等值关联子查询的优化方法和系统 |
CN109471889A (zh) * | 2018-09-19 | 2019-03-15 | 平安科技(深圳)有限公司 | 报表加速方法、系统、计算机设备和存储介质 |
CN109471889B (zh) * | 2018-09-19 | 2023-06-02 | 平安科技(深圳)有限公司 | 报表加速方法、系统、计算机设备和存储介质 |
CN109344169B (zh) * | 2018-09-20 | 2021-02-09 | 新华三大数据技术有限公司 | 数据处理方法及装置 |
CN109344169A (zh) * | 2018-09-20 | 2019-02-15 | 新华三大数据技术有限公司 | 数据处理方法及装置 |
CN109241104A (zh) * | 2018-10-12 | 2019-01-18 | 北京聚云位智信息科技有限公司 | 决策型分布式数据库系统中aisql的解析器及其实现方法 |
CN109241104B (zh) * | 2018-10-12 | 2021-11-02 | 北京聚云位智信息科技有限公司 | 决策型分布式数据库系统中aisql的解析器及其实现方法 |
CN110046181A (zh) * | 2019-03-13 | 2019-07-23 | 平安科技(深圳)有限公司 | 基于数据库分布式存储的数据路由的方法和装置 |
CN111259038A (zh) * | 2020-01-16 | 2020-06-09 | 北京思特奇信息技术股份有限公司 | 一种数据库查询及数据导出方法、系统、介质及设备 |
CN112052255A (zh) * | 2020-09-02 | 2020-12-08 | 福建天晴在线互动科技有限公司 | 一种自上而下拆分多表慢查询的sql解释方法及其装置 |
CN112182028A (zh) * | 2020-09-29 | 2021-01-05 | 北京人大金仓信息技术股份有限公司 | 基于分布式数据库的表的数据行数查询方法和装置 |
WO2022127417A1 (zh) * | 2020-12-16 | 2022-06-23 | 中兴通讯股份有限公司 | 数据查询方法、电子设备、存储介质 |
CN112765286A (zh) * | 2021-02-01 | 2021-05-07 | 广州海量数据库技术有限公司 | 一种基于关系数据库的查询方法及装置 |
CN113468208A (zh) * | 2021-07-19 | 2021-10-01 | 网易(杭州)网络有限公司 | 生成数据查询语句的方法和装置、服务器及存储介质 |
CN114625750A (zh) * | 2022-02-17 | 2022-06-14 | 中国人民解放军空军工程大学 | 一种健壮的计算机自动评判sql查询语句是否正确的方法 |
CN114625750B (zh) * | 2022-02-17 | 2024-04-12 | 中国人民解放军空军工程大学 | 一种健壮的计算机自动评判sql查询语句是否正确的方法 |
WO2024055153A1 (en) * | 2022-09-13 | 2024-03-21 | Paypal, Inc. | Dual write and dual read access to graph databases |
CN116126865A (zh) * | 2023-02-17 | 2023-05-16 | 安芯网盾(北京)科技有限公司 | 一种多种数据库混合使用的代理方法及装置 |
CN116126865B (zh) * | 2023-02-17 | 2023-09-08 | 安芯网盾(北京)科技有限公司 | 一种多种数据库混合使用的代理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104123374B (zh) | 2017-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104123374A (zh) | 分布式数据库中聚合查询的方法及装置 | |
JP7273045B2 (ja) | Sqlクエリプランを最適化するための次元コンテキスト伝搬技術 | |
US20220035815A1 (en) | Processing database queries using format conversion | |
CN107402988B (zh) | 一种分布式NewSQL数据库系统和半结构化数据查询方法 | |
US10585887B2 (en) | Multi-system query execution plan | |
JP6144700B2 (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
US8745021B2 (en) | Transformation of complex data source result sets to normalized sets for manipulation and presentation | |
US20130173664A1 (en) | Mapping non-relational database objects into a relational database model | |
US9495437B1 (en) | System and method for accessing dimensional databases | |
WO2012125166A1 (en) | Data source analytics | |
US20100235344A1 (en) | Mechanism for utilizing partitioning pruning techniques for xml indexes | |
WO2019120093A1 (en) | Cardinality estimation in databases | |
CN104199978A (zh) | 基于NoSQL实现元数据缓存与分析的系统及方法 | |
US10997170B2 (en) | Local database cache | |
JP2018509666A (ja) | Sql実行計画を決定するための方法および装置 | |
CN105608077A (zh) | 一种大数据分布式存储方法和系统 | |
EP3735642B1 (en) | Relational database system that uses real-time statistics for selection of physical operators | |
CN115114325A (zh) | 数据查询方法、装置、电子设备以及存储介质 | |
WO2021248319A1 (en) | Database management system and method for graph view selection for relational-graph database | |
CN112732704B (zh) | 一种数据处理方法、装置及存储介质 | |
WO2024011038A1 (en) | Cleaning and organizing schemaless semi-structured data for extract, transform, and load processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |