分布式数据库中聚合查询的方法及装置制造方法

文档序号:6621586阅读:659来源:国知局
分布式数据库中聚合查询的方法及装置制造方法
【专利摘要】本发明公开了一种分布式数据库中聚合查询的方法及装置。所述方法包括:接收客户端发送来的原始SQL查询语句;获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。本发明实现了多机数据库中的聚合查询,而且不必在应用程序中编写聚合处理逻辑,减少了应用程序的开发时间。
【专利说明】分布式数据库中聚合查询的方法及装置

【技术领域】
[0001] 本发明实施例涉及数据库查询技术,尤其涉及一种分布式数据库中聚合查询的方 法及装置。

【背景技术】
[0002] 数据库一般通过数据表来存储数据,但数据量不一定是可控的,随着时间和业务 的发展,数据库中的数据表会越来越多,数据表中的数据量也会越来越大。相应地,对数据 表进行的增删改查等数据操作的开销也会越来越大。另外,一台服务器的硬件资源(CPU、磁 盘、内存、10等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇硬件资 源的瓶颈,因此需要进行分库分表,即把原本存储于一个主机数据库中的数据分块存储到 多个主机的数据库中,把原本存储于一个数据表中的数据分块存储到多个数据表中。多个 主机的数据库,可称为多个数据节点。
[0003] 但是,进行分库分表将数据分布到多机数据库后,数据原本集中存储于一个数据 表中的某一个或多个列将会转移到多个数据表,甚至多个数据库中,进行散列分布,则不再 支持聚合查询。聚合查询,即通过包含一个聚合函数(如SUM或AVG等)来汇总来自多行 信息的查询操作。


【发明内容】

[0004] 有鉴于此,本发明实施例提供一种分布式数据库中聚合查询的方法及装置,以实 现多机数据库中的聚合查询。
[0005] 第一方面,本发明实施例提供了一种分布式数据库中聚合查询的方法,所述方法 包括:
[0006] 接收客户端发送来的原始SQL查询语句;
[0007] 获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;
[0008] 在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;
[0009] 根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;
[0010] 将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的 查询结果;
[0011] 根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查 询结果。
[0012] 第二方面,本发明实施例还提供了一种分布式数据库中聚合查询的装置,所述装 置包括:
[0013] 接收模块,用于接收客户端发送来的原始SQL查询语句;
[0014] 获取模块,用于获取所述原始SQL查询语句的查询列和条件子查询中的聚合函 数;
[0015] 变换模块,用于在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单 聚合函数;
[0016] 更新模块,用于根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查 询语句;
[0017] 分发接收模块,用于将所述新SQL查询语句分发至至少两个数据库进行查询,并 接收返回的查询列的查询结果;
[0018] 计算模块,用于根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL 查询语句的查询结果。
[0019] 本发明实施例提供的分布式数据库中聚合查询的方法及装置,通过SQL节点获取 原始SQL查询语句的查询列和条件子查询中的聚合函数,当存在复杂聚合函数时,将针对 多表计算的复杂聚合函数变换为简单聚合函数,根据所述简单聚合函数将所述原始SQL查 询语句更新为新SQL查询语句,将所述新SQL查询语句分发至至少两个数据库进行查询,并 接收返回的查询列的查询结果,根据所述查询结果和所述新SQL查询语句,计算获取所述 原始SQL查询语句的查询结果,以得到聚合查询的结果,实现了多机数据库中的聚合查询, 而且不必在应用程序中编写聚合处理逻辑,减少了应用程序的开发时间。

【专利附图】

【附图说明】
[0020] 图1是本发明实施例一提供的一种分布式数据库中聚合查询的方法的流程图;
[0021] 图2是本发明实施例提供的分布式数据库中聚合查询的方法中的新SQL查询语句 的形成流程图;
[0022] 图3是本发明实施例三提供的一种分布式数据库中聚合查询的装置的示意图。

【具体实施方式】
[0023] 下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描 述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便 于描述,附图中仅示出了与本发明相关的部分而非全部内容。
[0024] 实施例一
[0025] 图1是本发明实施例一提供的一种分布式数据库中聚合查询的方法的流程图,本 实施例可适用于实现分布式数据库中的聚合查询。在分布式数据库中包括SQL (Structured Query Language,结构化查询语言)节点和至少一个数据节点,其中,SQL节点用于接收查 询命令及根据查询命令进行计算,数据节点用于保存数据。该方法可以由SQL节点来执行, 具体包括如下步骤:
[0026] 步骤110,接收客户端发送来的原始SQL查询语句。
[0027] 其中,原始SQL语句即在客户端人为输入的原始查询命令。客户端将该查询命令 发送至SQL节点,SQL节点接收客户端发送来的原始SQL语句。原始SQL语句包含SELECT 关键字、查询列、FROM关键字和表名,其中,查询列是SELECT关键字和FROM关键字之间的 以逗号隔开的部分,查询列是该SQL语句需要查询获得的结果。查询列中可能包含聚合函 数以实现聚合查询;FROM关键字和表名,表示从该表名所标识的数据表中获取查询列的数 据作为查询结果;原始SQL语句还可能包含WHERE、GROUP BY和/或HAVING等关键字表示 的子查询,例如,子查询可跟随FROM关键字和表名,表示从该数据表中有选择的获取查询 列的数据。
[0028] 步骤120,获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数。
[0029] SQL节点对所述原始SQL查询语句进行语法解析,获取所述原始SQL查询语句的 查询列中的聚合函数,如果所述原始SQL查询语句还包括条件子查询,同时,获取所述原始 SQL查询语句的条件子查询中的聚合函数。
[0030] 步骤130,在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函 数。
[0031] 其中,常用聚合函数为MAX (求最大值)、MIN(求最小值)、SUM(求和)、AVG (求平 均值)、C0UNT (求记录数)等,复杂聚合函数是可以表示成一个或者多个简单聚合函数的形 式的聚合函数,在常用聚合函数中,AVG函数可以表示成SUM函数除以COUNT函数的形式, 因此AVG函数为复杂聚合函数。
[0032] 在所述聚合函数中,当存在复杂聚合函数且复杂聚合函数针对多表计算时,SQL节 点保存该复杂聚合函数,并根据关系代数等价变换将所述复杂聚合函数变换为简单聚合函 数。
[0033] 步骤140,根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语 句。
[0034] 在变换复杂聚合函数为简单聚合函数后,则相当于对原始SQL查询语句增加了包 含变换后的简单聚合函数的查询列,而对于存在条件子查询的原始SQL语句,条件子查询 中的复杂聚合函数也变换成了简单聚合函数,同时需要将变换后的条件子查询中的简单聚 合函数添加到查询列中,同时保存条件子查询中的条件,去除条件子查询,则原始SQL查询 语句更新为新SQL查询语句,所述新SQL查询语句不再包含条件子查询。
[0035] 步骤150,将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的 查询列的查询结果。
[0036] 由于数据进行分库分表后保存到了至少两个数据库中,SQL节点将所述新SQL查 询语句分发至至少两个数据库(数据节点)中,所述至少两个数据库根据所述新SQL查询 语句查询到自身保存的数据并对自身保存的数据进行计算,并将计算结果返回给SQL节 点。
[0037] 步骤160,根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询 语句的查询结果。
[0038] 由于所述新SQL查询语句还包含了原始SQL查询语句中的复杂聚合函数,而所述 至少两个数据库也返回了该复杂聚合函数的查询结果,而该查询结果是不正确的,因此,需 要根据该复杂聚合函数与变换后的简单聚合函数的关系来汇总来自至少两个数据库中的 根据该复杂聚合函数变换后的简单聚合函数的查询结果,再根据汇总后的简单聚合函数的 查询结果计算该复杂聚合函数的查询结果,最后利用保存的条件子查询中的条件对查询结 果进行过滤,从而得到所述原始SQL查询语句的查询结果。并将所述原始SQL查询语句的 查询结果返回给客户端。
[0039] 该分布式数据库中聚合查询的方法的工作原理:利用分布式数据库中的SQL节点 接收客户端的查询命令(原始SQL查询语句),并根据关系代数等价变换的方法改写查询 命令中的复杂聚合函数为简单聚合函数,在查询列中附加子查询中的聚合函数,组成新SQL 查询语句,以让数据节点参与计算,然后根据数据节点的计算结果和新SQL查询语句做综 合计算,从而实现了分布式数据库中的聚合查询。
[0040] 本实施例的技术方案,通过SQL节点获取原始SQL查询语句的查询列和条件子查 询中的聚合函数,当存在复杂聚合函数时,将针对多表计算的复杂聚合函数变换为简单聚 合函数,根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句,将所述新 SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果,根据所述 查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果,以得到聚合 查询的结果,实现了多机数据库中的聚合查询,而且不必在应用程序中编写聚合处理逻辑, 减少了应用程序的开发时间。
[0041] 在上述技术方案的基础上,根据所述简单聚合函数将所述原始SQL查询语句更新 为新SQL查询语句优选包括:
[0042] 将所述简单聚合函数添加到原始SQL查询语句中,作为新查询列,以形成新SQL查 询语句,并记录新查询列的位置以及简单聚合函数与复杂聚合函数的关联关系;
[0043] 记录所述条件子查询中的聚合函数的条件关系。
[0044] SQL节点将由复杂聚合函数变换得到的简单聚合函数添加到原始SQL查询语句的 查询列中,以形成新SQL查询语句,新添加的简单聚合函数形成的查询列记为新查询列,并 将原始SQL语句的查询列和新SQL查询语句的查询列保存到查询列表中,在函数列表中记 录新查询列即新添加的简单聚合函数的位置及原始复杂聚合函数的位置,同时在函数列表 中记录简单聚合函数与复杂聚合函数的关联关系,将所述条件子查询中的聚合函数的条件 关系记录在过滤列表中。其中,查询列表是一存储工具,用于保存SQL查询语句中的查询 列;函数列表是一存储工具,用于保存SQL查询语句中的聚合函数和该聚合函数位于查询 列中的位置,及简单聚合函数与复杂聚合函数的关联关系;过滤列表用于保存条件子查询 中的聚合函数的条件关系。
[0045] 在上述技术方案的基础上,根据所述查询结果和所述新SQL查询语句,计算获取 所述原始SQL查询语句的查询结果优选包括:
[0046] 根据所述新查询列的查询结果和所述关联关系,计算复杂聚合函数的查询结果;
[0047] 根据所述条件关系和条件子查询的查询结果,计算所述原始SQL查询语句的查询 结果。
[0048] SQL节点根据至少两个数据库中的基于所述新查询列的查询结果综合计算保存 在至少两个数据库中的查询结果,并根据该查询结果和函数列表中保存的复杂聚合函数和 简单聚合函数的关联关系,计算复杂聚合函数的查询结果,并根据利用原始SQL查询语句 中的条件子查询中的条件关系过滤基于该条件子查询中的聚合函数的查询结果,得到原始 SQL查询语句的查询结果。
[0049] 优选的,所述复杂聚合函数为AVG函数,所述简单聚合函数为COUNT函数和SUM函 数;
[0050] 所述条件子查询为HAVING条件。
[0051] 在上述技术方案的基础上,图2是本发明实施例提供的分布式数据库中聚合查询 的方法中的新SQL查询语句的形成流程图,如图2所示,所述新SQL查询语句的形成操作具 体包括如下步骤:
[0052] 步骤201,通过解析器对所述原始SQL语句进行解析,以生成语法树,其中,所述语 法树的节点对应于各查询列和条件子查询。
[0053] 其中,语法树(syntax tree)是源代码的抽象语法结构的树状表现形式,树上的每 个节点都表示源代码中的一种结构。对于一个具体的SQL语句,语法树将该SQL语句的语 法结构表示成一种树状形式,其中,根节点表示整个查询,根节点的孩子节点包括该SQL语 句中的各个关键字及各个关键字后面的查询字段,每个关键字为一个孩子节点,每个关键 字后面的查询字段为一个孩子节点,在SELECT关键字后面的查询字段即为查询列。如果该 SQL语句中包括子查询,该子查询的条件为一个孩子节点,如果该子查询的条件包括多个条 件,则为该子查询的条件所对应的孩子节点进一步建立孩子节点。例如HAVING关键字的子 查询,则在HAVING关键字后面的查询字段即为HAVING子查询。SQL解析器(sql parse)用 于对SQL语句进行语法解析。
[0054] 步骤202,对所述语法树的查询列节点和条件子查询节点进行扫描。
[0055] SQL节点对所述语法树的查询列节点和条件子查询节点进行扫描,确定查询列节 点和条件子查询节点中是否存在聚合函数。
[0056] 步骤203,如果存在条件子查询,则将所述条件子查询的条件关系添加到过滤列表 中。
[0057] SQL节点通过对所述语法树的扫描,如果存在条件子查询,则将所述条件子查询的 条件关系添加到过滤列表中。
[0058] 步骤204,如果所述查询列节点和条件子查询节点中存在聚合函数,则识别聚合函 数类型。
[0059] SQL节点通过对所述语法树的扫描,如果发现所述查询列节点和条件子查询节点 中存在聚合函数,则对该聚合函数的类型进行识别,以识别出该聚合函数是哪一种聚合函 数。
[0060] 步骤205,如果所述聚合函数为AVG函数,则将所述AVG函数替换为COUNT函数和 SUM函数,并将COUNT函数和SUM函数添加为查询列,且将所述AVG函数、COUNT函数和SUM 函数及其查询列位置记录到函数列表中,并记录所述AVG函数与COUNT函数和SUM函数的 关联关系。
[0061] 步骤206,如果所述聚合函数为非AVG函数,则将所述AVG函数及其查询列位置记 录到函数列表中。
[0062] 通过以上步骤将原始SQL查询语句更新为新SQL查询语句,并保存了查询列中聚 合函数的变换关系及聚合函数在查询列中的位置,及条件子查询中的条件关系。
[0063] 实施例二
[0064] 本发明实施例二提供了一种分布式数据库中聚合查询的方法,对实施例一提供的 分布式数据库中聚合查询的方法进行了具体应用。具体实例为:假设存在数据表acid,包 含列:id,name,sex,age,city,mobile,其中 id 是主键。
[0065] Original query (原始查询语句)为:SELECT city,avg (age) FROM acid GROUP BY city HAVING(count(id)>100000)。
[0066] 原始SQL查询语句的含义:从acid数据表中,满足(count (id) >100000)条件的城 市中,获取city的数据,以及avg(age)的数据。
[0067] 上述原始SQL查询语句中包括两个聚合函数,avg(age),即年龄的平均值, count (id),即计算id的数量。
[0068] 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)函数的关系。
[0069] 至此,原始 SQL 查询语句改写为:SELECT city, avg (age),SUM (age),C0UNG (age) FROM acid GROUP BY city HAVING(count (id) >100000);记录信息为:对查询列位置为 1 的 列做AVG平均值计算,AVG已经等价替换为SUM和COUNT,因此还包含SUM和COUNT的位置。
[0070] 接下来扫描语法树中的子查询,发现有having子查询,检查该having子查询 中的函数发现有count (id)函数,而查询列中不存在count (id)函数,因此将count (id) 函数附加到查询列中,并且存储到function list中,该having子查询还带有过滤条件 (>100000),将该过滤条件存放到filter list (过滤列表)中,标记上查询列中count (id) 计算完成后,要利用该过滤条件进行过滤。
[0071] 至此,SQL 语句改写为新的 SQL 语句:SELECT city, avg (age),SUM (age), C0UNG(age),C0UNT(id)FR0M acid GROUP BY city ;记录信息为:对id位置的列做COUNT计 算,并且计算完成后要做大于10万的过滤,记录下原始查询列数为2,而改写后的查询列数 为5。
[0072] SQL节点将新的SQL语句发送至各个数据节点,各个数据节点根据该SQL语句对本 身保存的数据进行计算,将计算结果返回到SQL节点,SQL节点根据分组处理(即新的SQL 语句中的GROUP BY)将各个数据节点的计算结果进行分组,然后将SUM(age)、C0UNG(age)、 COUNT(id)计算出来,每一行的avg(age)都使用计算出来的SUM(age)/C0UNG(age)进行填 充,最后将COUNT(id)做大于10万的过滤便完成了计算。最后,SQL节点根据记录的原始 查询列数2,将0、1两列数据发送给客户端。
[0073] 本实施例通过一个具体的实例介绍了分布式数据库中的聚合查询的实现方法。
[0074] 实施例三
[0075] 图3是本发明实施例三提供的一种分布式数据库中聚合查询的装置的示意图,本 实施例提供的分布式数据库中聚合查询的装置用于实现实施例一提供的分布式数据库中 聚合查询的方法。如图3所示,本发明实施例三提供的分布式数据库中聚合查询的装置包 括:接收模块310、获取模块320、变换模块330、更新模块340、分发接收模块350和计算模 块 360。
[0076] 其中,接收模块310用于接收客户端发送来的原始SQL查询语句;
[0077] 获取模块320用于获取所述原始SQL查询语句的查询列和条件子查询中的聚合函 数;
[0078] 变换模块330用于在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简 单聚合函数;
[0079] 更新模块340用于根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL 查询语句;
[0080] 分发接收模块350用于将所述新SQL查询语句分发至至少两个数据库进行查询, 并接收返回的查询列的查询结果;
[0081] 计算模块360用于根据所述查询结果和所述新SQL查询语句,计算获取所述原始 SQL查询语句的查询结果。
[0082] 在上述技术方案的基础上,所述更新模块优选包括:
[0083] 第一添加子模块,用于将所述简单聚合函数添加到原始SQL查询语句中,作为新 查询列,以形成新SQL查询语句,并记录新查询列的位置以及简单聚合函数与复杂聚合函 数的关联关系;
[0084] 第一记录子模块,用于记录所述条件子查询中的聚合函数的条件关系。
[0085] 在上述技术方案的基础上,所述计算模块优选包括:
[0086] 第一计算子模块,用于根据所述新查询列的查询结果和所述关联关系,计算复杂 聚合函数的查询结果;
[0087] 第二计算子模块,用于根据所述条件关系和条件子查询的查询结果,计算所述原 始SQL查询语句的查询结果。
[0088] 优选的,所述复杂聚合函数为AVG函数,所述简单聚合函数为COUNT函数和SUM函 数;
[0089] 所述条件子查询为HAVING条件。
[0090] 在上述技术方案的基础上,所述新SQL查询语句的形成模块具体包括:
[0091] 解析子模块,用于通过解析器对所述原始SQL语句进行解析,以生成语法树,其 中,所述语法树的节点对应于各查询列和条件子查询;
[0092] 扫描子模块,用于对所述语法树的查询列节点和条件子查询节点进行扫描;
[0093] 第二添加子模块,用于如果存在条件子查询,则将所述条件子查询的条件关系添 加到过滤列表中;
[0094] 识别子模块,用于如果所述查询列节点和条件子查询节点中存在聚合函数,则识 别聚合函数类型;
[0095] 替换子模块,用于如果所述聚合函数为AVG函数,则将所述AVG函数替换为COUNT 函数和SUM函数,并将COUNT函数和SUM函数添加为查询列,且将所述AVG函数、COUNT函 数和SUM函数及其查询列位置记录到函数列表中,并记录所述AVG函数与COUNT函数和SUM 函数的关联关系;
[0096] 第二记录子模块,用于如果所述聚合函数为非AVG函数,则将所述AVG函数及其查 询列位置记录到函数列表中。
[0097] 上述分布式数据库中聚合查询的装置可执行本发明任意实施例所提供的方法,具 备执行方法相应的功能模块和有益效果。
[0098] 注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解, 本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、 重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行 了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还 可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
【权利要求】
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函数及其查询列 位置记录到函数列表中。
【文档编号】G06F17/30GK104123374SQ201410364288
【公开日】2014年10月29日 申请日期:2014年7月28日 优先权日:2014年7月28日
【发明者】唐超, 马丽伟, 秦波, 王 锋, 赵晓平 申请人:北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1