存储查询结果的方法和装置、计算设备转让专利

申请号 : CN201580001205.4

文献号 : CN107735781B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张军林晓勇

申请人 : 华为技术有限公司

摘要 :

一种存储查询结果的方法和装置。该方法包括:确定第一查询请求对应的多个查询表,其中,该第一查询请求用于请求对该多个查询表进行关联查询(S110);从该多个查询表中确定目标查询表,其中,该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表,并且该多个查询表中不存在该目标查询表的事实表(S120);根据该目标查询表,确定第一表的主键,其中,该第一表用于存储该第一查询请求对应的查询结果(S130);根据该第一表的主键,将该查询结果存储至该第一表(S140)。该存储查询结果的方法和装置,能够避免现有技术中对第一表进行关联查询时查询效率低下的问题,从而提高关联查询的效率。

权利要求 :

1.一种存储查询结果的方法,其特征在于,包括:

确定第一查询请求对应的多个查询表,其中,所述第一查询请求用于请求对所述多个查询表进行关联查询;

从所述多个查询表中确定目标查询表,其中,所述多个查询表中不存在所述目标查询表的事实表,并且所述目标查询表为所述多个查询表中除所述目标查询表之外的至少一个查询表的事实表;

根据所述目标查询表,确定第一表的主键,其中,所述第一表用于存储所述第一查询请求对应的查询结果;

根据所述第一表的主键,将所述查询结果存储至所述第一表。

2.根据权利要求1所述的方法,其特征在于,所述根据所述第一表的主键,将所述查询结果存储至所述第一表,包括:根据所述第一表的主键,以列簇的方式将所述查询结果存储至所述第一表。

3.根据权利要求1所述的方法,其特征在于,所述从所述多个查询表中确定目标查询表,包括:确定所述第一查询请求对应的至少一个第一关联查询条件,其中,所述第一关联查询条件由第一查询表中的第一列和第二查询表中的第二列构成,所述多个查询表包括所述第一查询表和不同于所述第一查询表的所述第二查询表;

确定所述至少一个关联查询条件对应的所述第一查询表与所述第二查询表之间的关联关系;

根据所述第一查询表与所述第二查询表之间的关联关系,从所述第一查询表和所述第二查询表中确定所述目标查询表。

4.根据权利要求3所述的方法,其特征在于,所述确定所述至少一个关联查询条件对应的所述第一查询表与所述第二查询表之间的关联关系,包括:确定所述第一查询表中的第一列是否为所述第一查询表的主键;

若所述第一查询表中的第一列为所述第一查询表的主键,确定所述第二查询表为所述第一查询表的事实表;

若所述第一查询表中的第一列为所述第一查询表的外键,确定所述第一查询表为所述第二查询表的事实表。

5.根据权利要求4所述的方法,其特征在于,所述第一查询请求对应一个第一关联查询条件;

所述根据所述第一查询表与所述第二查询表之间的关联关系,从所述第一查询表和所述第二查询表中确定所述目标查询表,包括:若所述第二查询表为所述第一查询表的事实表,则确定所述第二查询表为所述目标查询表;

若所述第一查询表为所述第二查询表的事实表,则确定所述第一查询表为所述目标查询表。

6.根据权利要求3或4所述的方法,其特征在于,所述第一查询请求对应多个第一关联查询条件;

所述根据所述第一查询表与所述第二查询表之间的关联关系,从所述第一查询表和所述第二查询表中确定所述目标查询表,包括:根据所述第一查询表与所述第二查询表之间的关联关系,建立关联关系树,其中,若所述第二查询表为所述第一查询表的事实表,所述第二查询表为所述第一查询表的父节点;

将所述关联关系树的根节点确定为所述目标查询表。

7.根据权利要求1至5中任一项所述的方法,其特征在于,所述根据所述目标查询表,确定所述第一表的主键,包括:确定所述查询结果对应的多个列中是否存在所述目标查询表的非联合主键;

若所述多个列中存在所述目标查询表的非联合主键,将所述目标查询表的非联合主键确定为所述第一表的主键。

8.根据权利要求7所述的方法,其特征在于,所述根据所述目标查询表,确定所述第一表的主键,还包括:若所述多个列中不存在所述目标查询表的非联合主键,确定与所述第一查询请求对应的第二查询请求,所述第二查询请求用于请求对所述第一表和第二表进行关联查询;

根据所述第二查询请求,确定所述第一表的主键。

9.根据权利要求8所述的方法,其特征在于,所述根据所述第二查询请求,确定所述第一表的主键,包括:确定所述第二查询请求对应的至少一个第二关联查询条件,其中,所述第二关联查询条件由所述第一表的第三列和所述第二表的第四列构成;

从所述至少一个第二关联查询条件中确定第二目标关联查询条件,所述第二目标关联查询条件包括所述第二表的主键;

将所述第二目标关联查询条件中包括的所述第一表的第三列确定为所述第一表的主键。

10.一种存储查询结果的装置,其特征在于,包括:

第一确定单元,用于确定第一查询请求对应的多个查询表,其中,所述第一查询请求用于请求对所述多个查询表进行关联查询;

第二确定单元,用于从所述第一确定单元确定的所述多个查询表中确定目标查询表,其中,所述多个查询表中不存在所述目标查询表的事实表,并且所述目标查询表为所述多个查询表中除所述目标查询表之外的至少一个查询表的事实表;

第三确定单元,用于根据所述第二确定单元确定的所述目标查询表,确定第一表的主键,其中,所述第一表用于存储所述第一查询请求对应的查询结果;

存储单元,用于根据所述第三确定单元确定的所述第一表的主键,将所述查询结果存储至所述第一表。

11.根据权利要求10所述的装置,其特征在于,所述存储单元具体用于:根据所述第三确定单元确定的所述第一表的主键,以列簇的方式将所述查询结果存储至所述第一表。

12.根据权利要求10所述的装置,其特征在于,所述第二确定单元包括:第一确定子单元,用于确定所述第一查询请求对应的至少一个第一关联查询条件,其中,所述第一关联查询条件由第一查询表中的第一列和第二查询表中的第二列构成,所述多个查询表包括所述第一查询表和不同于所述第一查询表的所述第二查询表;

第二确定子单元,用于确定所述第一确定子单元确定的所述至少一个关联查询条件对应的所述第一查询表与所述第二查询表之间的关联关系;

第三确定子单元,用于根据所述第二确定子单元确定的所述第一查询表与所述第二查询表之间的关联关系,从所述第一查询表和所述第二查询表中确定所述目标查询表。

13.根据权利要求12所述的装置,其特征在于,所述第二确定子单元具体用于:确定所述第一查询表中的第一列是否为所述第一查询表的主键;

若所述第一查询表中的第一列为所述第一查询表的主键,确定所述第二查询表为所述第一查询表的事实表;

若所述第一查询表中的第一列为所述第一查询表的外键,确定所述第一查询表为所述第二查询表的事实表。

14.根据权利要求13所述的装置,其特征在于,所述第一查询请求对应一个第一关联查询条件;

所述第三确定子单元具体用于:

若所述第二确定子单元确定所述第二查询表为所述第一查询表的事实表,则确定所述第二查询表为所述目标查询表;

若所述第二确定子单元确定所述第一查询表为所述第二查询表的事实表,则确定所述第一查询表为所述目标查询表。

15.根据权利要求12或13所述的装置,其特征在于,所述第一查询请求对应多个第一关联查询条件;

所述第三确定子单元具体用于:

根据所述第二确定子单元确定的所述第一查询表与所述第二查询表之间的关联关系,建立关联关系树,其中,若所述第二查询表为所述第一查询表的事实表,所述第二查询表为所述第一查询表的父节点;

将所述关联关系树的根节点确定为所述目标查询表。

16.根据权利要求10至14中任一项所述的装置,其特征在于,所述第三确定单元包括:第四确定子单元,用于确定所述查询结果对应的多个列中是否存在所述目标查询表的非联合主键;

第五确定子单元,用于若所述第四确定子单元确定所述多个列中存在所述目标查询表的非联合主键,将所述目标查询表的非联合主键确定为所述第一表的主键。

17.根据权利要求16所述的装置,其特征在于,所述第三确定单元还包括:第六确定子单元,用于若所述第四确定子单元确定所述多个列中不存在所述目标查询表的非联合主键,确定与所述第一查询请求对应的第二查询请求,所述第二查询请求用于请求对所述第一表和第二表进行关联查询;

第七确定子单元,用于根据所述第六确定子单元确定的所述第二查询请求,确定所述第一表的主键。

18.根据权利要求17所述的装置,其特征在于,所述第七确定子单元具体用于:确定所述第二查询请求对应的至少一个第二关联查询条件,其中,所述第二关联查询条件由所述第一表的第三列和所述第二表的第四列构成;

从所述至少一个第二关联查询条件中确定第二目标关联查询条件,所述第二目标关联查询条件包括所述第二表的主键;

将所述第二目标关联查询条件中包括的所述第一表的第三列确定为所述第一表的主键。

19.一种计算设备,其特征在于,包括:处理器、存储器和总线;

所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述计算设备运行时,所述处理器读取所述存储器存储的所述计算机执行指令,以执行权利要求1至9中任一项所述的方法。

说明书 :

存储查询结果的方法和装置、计算设备

技术领域

[0001] 本发明涉及数据库领域,并且更具体地,涉及存储查询结果的方法和装置、计算设备。

背景技术

[0002] 事务处理性能委员会基准(Transaction Processing Performance Council BenchmarkTMH,TPC-H)主要用来模拟真实商业的应用环境,包括模拟对真实商业交易数据库的动态查询,以作为决策支持与数据库应用系统的参考。
[0003] TPC-H主要涉及如下概念:
[0004] 事实表,用于存储至少一个事实记录,每个事实记录对应事实表中的一行,并且包括键值列和度量值列,其中,键值列中的值对应事实记录的维度,例如,商品产地、商品价格、商品数量、交易日期、商品种类、商品名称,等等;度量值列中的值对应于事实表的主题内容,例如,销售额或销售量,等等。
[0005] 维度表,用于存储事实记录的维度特性,维度表可以包括名称列和属性列,例如,商品产地这个维度表中包括三个列,产地名称(locationName)、产地编号(locationId)和地址(Address),其中,产地名称为名称列,产地编号和地址为属性列。事实表中的键值列可以对应于维度表中的属性列,事实表中的每个键值列都可以对应于一个维度表。
[0006] 临时表,用于存储临时数据。临时表大致可分为事务级临时表和会话级临时表,其中,事务级临时表在事务提交后自动删除,会话级临时表在会话结束后删除。
[0007] 主键,唯一标识表中的一列,一个表中任意两行具有不同的主键值,并且主键不允许有空值。一般地,表的主键为表的第一列。
[0008] 外键,用于连接两个表,如果表A中的列M与表B中的列N相对应,即列M与列N对应于相同的属性,例如,均对应于订单号,并且列M为表A中的主键,则列N为表B中的外键。事实表的外键对应于维度表的主键。
[0009] 在数据库系统中,当进行多张表关联的复杂查询时,如果多张表的数据量较大,则可以将一个查询语句分解成多个查询子语句,并通过大规模并行处理(Massively Parallel Processing,MPP)机制将该多个查询子语句分发到集群的多个节点上。每个节点可以根据接收到的查询子语句进行查询,并将该查询子语句对应的查询结果存放到临时表中。在该多个节点完成查询后,可以采用查询语句对各节点获得的临时表进行关联查询,以获得最终的查询结果。
[0010] 以TPC-H的Q7查询和SQL为例,如果要查询发货日期在1995年至1997年之间、并且供应商所属国和客户所属国中的一个为法国,另一个为德国的交易记录,可以采用如表1所示的查询语句。
[0011] 表1 TPC-H Q7查询语句示例
[0012]
[0013]
[0014] 其中,在SQL语言中,“select[A]from[TABLE B]where[C]”表示从表B中选取符合查询条件C的记录对应的列A的数据。上述例子中涉及到复杂查询,其中,该复杂查询中的子查询涉及到的查询表包括:供应商(supplier)表、项目(lineitem)表、订单(orders)表、客户(customer)表、被命名为n1的国家(nation)表和被命名为n2的另一个国家(nation)表。该子查询获得的查询结果被插入出货(shipping)表,然后从表shipping中选取列supp_nation、cust_nation、l_year的数据以及通过对列volume的数据进行求和获得的列revenue的数据。
[0015] 为了提高查询效率,可以将上述复杂查询对应的查询语句分解成两个查询子语句,其中,第一个查询子语句如表2所示,用于对表orders、表n1、表n2和表customer进行关联查询,并将查询结果插入临时表q7_tmp_order_customer;第二个查询子语句如表3所示,用于对表lineitem、表n1、表n2和表supplier进行关联查询,并将查询结果插入临时表q7_tmp_lineitem_supplier中。最后,可以通过表4所示的查询语句对临时表q7_tmp_order_customer和q7_tmp_lineitem_supplier进行关联查询,以获得最终的查询结果。
[0016] 表2 第一个查询子语句
[0017]
[0018] 表3 第二个查询子语句
[0019]
[0020] 表4 用于对两个临时表进行关联查询的查询语句
[0021]
[0022] 表5 临时表q7_tmp_lineitem_supplier示例
[0023] ID l_orderkey supp_nation cust_nation l_year volume
[0024] 其中,“insert into[table A]”表示将查询结果插入表A中。然而,由于在建立临时表时并未指定临时表的主键,在将查询子语句对应的查询结果存储至临时表时,节点会主动为该临时表添加一个无实际意义的主键,例如,如表5所示,节点将数值为行号的列ID作为临时表q7_tmp_lineitem_supplier的主键,并将查询结果作为主键以外的其他列插入临时表中。这样,在对多个临时表进行关联查询时,该多个临时表中的一个或多个列中会存在重复值,在查询过程中需要对每条记录进行过滤,导致多表关联查询的效率低下。为了解决上述问题,可以对至少一个临时表中的一列创建索引,但由于临时表仅供当前查询使用,创建索引的代价较高,此外,由于临时表的数据需频繁插入,因此可能会造成索引失效。

发明内容

[0025] 本发明实施例提供一种存储查询结果的方法和装置、计算设备,能够避免现有技术中进行关联查询时查询效率低下的问题。
[0026] 第一方面,提供了一种存储查询结果的方法,包括:确定第一查询请求对应的多个查询表,其中,该第一查询请求用于请求对该多个查询表进行关联查询;从该多个查询表中确定目标查询表,其中,该多个查询表中不存在该目标查询表的事实表,并且该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表;根据该目标查询表,确定第一表的主键,其中,该第一表用于存储该第一查询请求对应的查询结果;根据该第一表的主键,将该查询结果存储至该第一表。
[0027] 在第一种可能的实现方式中,该根据该第一表的主键,将该查询结果存储至该第一表,包括:根据该第一表的主键,以列簇的方式将该查询结果存储至该第一表。
[0028] 结合上述可能的实现方式,在第二种可能的实现方式中,该从该多个查询表中确定目标查询表,包括:确定该第一查询请求对应的至少一个第一关联查询条件,其中,该第一关联查询条件由第一查询表中的第一列和第二查询表中的第二列构成,该多个查询表包括该第一查询表和不同于该第一查询表的该第二查询表;确定该至少一个第一关联查询条件对应的第一查询表与该第二查询表之间的关联关系;根据该第一查询表与该第二查询表之间的关联关系,从该第一查询表和该第二查询表中确定该目标查询表。
[0029] 结合上述可能的实现方式,在第三种可能的实现方式中,该确定该第一查询表与该第二查询表之间的关联关系,包括:确定该第一查询表的第一列是否为该第一查询表的主键;若该第一查询表的第一列为该第一查询表的主键,确定该第二查询表为该第一查询表的事实表;若该第一查询表的第一列为该第一查询表的外键,确定该第一查询表为该第二查询表的事实表。
[0030] 结合上述可能的实现方式,在第四种可能的实现方式中,该第一查询请求对应一个第一关联查询条件;该第三确定子单元具体用于:若该第二确定子单元确定该第二查询表为该第一查询表的事实表,则确定该第二查询表为该目标查询表;若该第二确定子单元确定该第一查询表为该第二查询表的事实表,则确定该第一查询表为该目标查询表。
[0031] 结合上述可能的实现方式,在第五种可能的实现方式中,该第一查询请求对应多个第一关联查询条件;该根据该第一查询表与该第二查询表之间的关联关系,从该第一查询表和该第二查询表中确定该目标查询表,包括:根据该第一查询表与该第二查询表之间的关联关系,建立关联关系树,其中,若该第二查询表为该第一查询表的事实表,该第二查询表为该第一查询表的父节点;将该关联关系树的根节点确定为该目标查询表。
[0032] 结合上述可能的实现方式,在第六种可能的实现方式中,该根据该目标查询表,确定该第一表的主键,包括:确定该查询结果对应的多个列中是否存在该目标查询表的非联合主键;若该多个列中存在该目标查询表的非联合主键,将该目标查询表的非联合主键确定为该第一表的主键。
[0033] 结合上述可能的实现方式,在第七种可能的实现方式中,该根据该目标查询表,确定该第一表的主键,还包括:若该多个列中不存在该目标查询表的非联合主键,确定与该第一查询请求对应的第二查询请求,该第二查询请求用于请求对该第一表和第二表进行关联查询;根据该第二查询请求,确定该第一表的主键。
[0034] 结合上述可能的实现方式,在第八种可能的实现方式中,该根据该第二查询请求,确定该第一表的主键,包括:确定该第二查询请求对应的至少一个第二关联查询条件,其中,该第二关联查询条件由该第一表的第三列和该第二表的第四列构成;从该至少一个第二关联查询条件中确定第二目标关联查询条件,该第二目标关联查询条件包括该第二表的主键;将该第二目标关联查询条件中包括的该第一表的第三列确定为该第一表的主键。
[0035] 第二方面,提供了一种存储查询结果的装置,包括:第一确定单元,用于确定第一查询请求对应的多个查询表,其中,该第一查询请求用于请求对该多个查询表进行关联查询;第二确定单元,用于从该第一确定单元确定的该多个查询表中确定目标查询表,其中,该多个查询表中不存在该目标查询表的事实表,并且该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表;第三确定单元,用于根据该第二确定单元确定的该目标查询表,确定第一表的主键,其中,该第一表用于存储该第一查询请求对应的查询结果;存储单元,用于根据该第三确定单元确定的该第一表的主键,将该查询结果存储至该第一表。
[0036] 在第一种可能的实现方式中,该存储单元具体用于:根据该第三确定单元确定的该第一表的主键,以列簇的方式将该查询结果存储至该第一表。
[0037] 结合上述可能的实现方式,在第二种可能的实现方式中,该第二确定单元包括:第一确定子单元,用于确定该第一查询请求对应的至少一个第一关联查询条件,其中,该第一关联查询条件由第一查询表中的第一列和第二查询表中的第二列构成,该多个查询表包括该第一查询表和不同于该第一查询表的该第二查询表;第二确定子单元,用于确定该第一确定子单元确定的该至少一个第一关联查询条件对应的该第一查询表与该第二查询表之间的关联关系;第三确定子单元,用于根据该第二确定子单元确定的该第一查询表与该第二查询表之间的关联关系,从该第一查询表和该第二查询表中确定该目标查询表。
[0038] 结合上述可能的实现方式,在第三种可能的实现方式中,该第二确定子单元具体用于:确定该第一查询表中的第一列是否为该第一查询表的主键;若该第一查询表中的第一列为该第一查询表的主键,确定该第二查询表为该第一查询表的事实表;若该第一查询表中的第一列为该第一查询表的外键,确定该第一查询表为该第二查询表的事实表。
[0039] 结合上述可能的实现方式,在第四种可能的实现方式中,该第一查询请求对应一个第一关联查询条件;该第三确定子单元具体用于:若该第二确定子单元确定该第二查询表为该第一查询表的事实表,则确定该第二查询表为该目标查询表;若该第二确定子单元确定该第一查询表为该第二查询表的事实表,则确定该第一查询表为该目标查询表。
[0040] 结合上述可能的实现方式,在第五种可能的实现方式中,该第一查询请求对应多个第一关联查询条件;该第三确定子单元具体用于:根据该第二确定子单元确定的该第一查询表与该第二查询表之间的关联关系,建立关联关系树,其中,若该第二查询表为该第一查询表的事实表,该第二查询表为该第一查询表的父节点;将该关联关系树的根节点确定为该目标查询表。
[0041] 结合上述可能的实现方式,在第六种可能的实现方式中,该第三确定单元包括:第四确定子单元,用于确定该查询结果对应的多个列中是否存在该目标查询表的非联合主键;第五确定子单元,用于若该第四确定子单元确定该多个列中存在该目标查询表的非联合主键,将该目标查询表的非联合主键确定为该第一表的主键。
[0042] 结合上述可能的实现方式,在第七种可能的实现方式中,该第三确定单元还包括:第六确定子单元,用于若该第四确定子单元确定该多个列中不存在该目标查询表的非联合主键,确定与该第一查询请求对应的第二查询请求,该第二查询请求用于请求对该第一表和第二表进行关联查询;第七确定子单元,用于根据该第六确定子单元确定的该第二查询请求,确定该第一表的主键。
[0043] 结合上述可能的实现方式,在第八种可能的实现方式中,该第七确定子单元具体用于:确定该第二查询请求对应的至少一个第二关联查询条件,其中,该第二关联查询条件由该第一表的第三列和该第二表的第四列构成;从该至少一个第二关联查询条件中确定第二目标关联查询条件,该第二目标关联查询条件包括该第二表的主键;将该第二目标关联查询条件中包括的该第一表的第三列确定为该第一表的主键。
[0044] 第三方面,提供了一种计算设备,包括:处理器、存储器和总线;该存储器用于存储计算机执行指令,该处理器与该存储器通过该总线连接,当该计算设备运行时,该处理器读取该存储器存储的该计算机执行指令,以执行第一方面或第一方面的任一种可能的实现方式中的存储查询结果的方法。
[0045] 基于上述技术方案,本发明实施例提供的存储查询结果的方法和装置、计算设备,从第一查询请求对应的多个查询表中确定目标查询表,其中,该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表,并且该多个查询表中不存在该目标查询表的事实表,并且根据该目标查询表确定用于存储查询结果的第一表的主键,能够避免现有技术中由于将无实际意义的列作为第一表的主键而造成后续对第一表进行关联查询时查询效率低下的问题,从而提高关联查询的效率。

附图说明

[0046] 为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0047] 图1是本发明实施例提供的存储查询结果的方法的示意性流程图。
[0048] 图2是本发明实施例提供的存储查询结果的方法的另一示意性流程图。
[0049] 图3是本发明实施例提供的存储查询结果的方法示例中的关联关系树的示意图。
[0050] 图4是本发明实施例提供的存储查询结果的方法示例中的另一关联关系树的示意图。
[0051] 图5是本发明实施例提供的存储查询结果的装置的示意性框图。
[0052] 图6是本发明实施例提供的另一存储查询结果的装置的示意性框图。
[0053] 图7是本发明实施例提供的计算设备的示意性框图。

具体实施方式

[0054] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
[0055] 应理解,本发明实施例的技术方案可以应用于各种数据库系统,例如,关系型数据库管理系统(Relational Database Management System,RDBMS),非关系型(NoSQL)数据库系统,大规模并行处理数据库(Massively Parallel Processing Database,MPP-DB),等等,本发明实施例对此不做限定。
[0056] 还应理解,本发明实施例以结构化查询语言(Structured Query Language,SQL)语言为例进行描述,但本发明实施例也可以采用其他语言,例如,面向对象的查询语言(Hibernate Query Language,HQL),等等,本发明实施例对此不做限定。
[0057] 图1是本发明实施例的存储查询结果的方法100的示意性流程图,该方法100可以由存储查询结果的装置执行。具体地,该存储查询结果的装置可以具体为独立设备或者为设备中的一个模块,例如,该存储查询结果的装置可以为单机或集群节点(cluster node),但本发明实施例不限于此。
[0058] S110,确定第一查询请求对应的多个查询表,其中,该第一查询请求用于请求对该多个查询表进行关联查询。
[0059] 该存储查询结果的装置可以接收来自客户端的第一查询请求,其中,来自客户端的第一查询请求可以通过网络设备或其它设备转发至该存储查询结果的装置。该第一查询请求可以请求对该多个查询表进行关联查询,例如,该第一查询请求对应的查询语句可以如表1至表4中的任意表所示。该第一查询请求可以为一个独立查询,也可以为一个复杂查询的子查询,本发明实施例对此不做限定。
[0060] 该存储查询结果的装置可以根据该第一查询请求,确定该第一查询请求对应的多个查询表,并对该多个第一表进行关联查询。此时,该第一查询请求对应的查询语句中可以包括where语句,并且where语句所限定的查询条件中可以包括关联查询条件。关联查询条件可以由表A中的列M和表B中的列N构成,并且列M和列N可以在查询语句中由等号连接,例如,在表1所示的查询条件中,查询语句“where s_suppkey=l_suppkey”对应于一个关联查询条件,该关联查询条件由表supplier中的列suppkey与表lineitem中的列suppkey构成,但本发明实施例不限于此。
[0061] S120,从该多个查询表中确定目标查询表,其中,该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表,并且该多个查询表中不存在该目标查询表的事实表。
[0062] 该多个查询表包括该目标查询表。该目标查询表可以为该多个查询表中的一个或多个其它表的事实表,但该多个查询表中不包括该目标查询表的事实表。具体地,该存储查询结果的装置可以根据该第一查询请求中包括的查询条件,从该多个查询表中确定该目标查询表,但本发明实施例不限于此。
[0063] S130,根据该目标查询表,确定第一表的主键,其中,该第一表用于存储该第一查询请求对应的查询结果。
[0064] 该存储查询结果的装置可以通过多种方式确定将查询结果存储至该第一表。可选地,该第一查询请求可以请求将对该多个查询表进行关联查询的查询结果存储至第一表,该第一表可以为普通表或临时表,相应地,该第一查询请求对应的查询语句可以包括insert into语句,并且该存储查询结果的装置根据该第一查询请求确定该第一表。或者,该存储查询结果的装置可以主动确定将该第一查询请求对应的查询结果存储至该第一表,此时,该第一表可以为临时表,但本发明实施例不限于此。
[0065] S140,根据该第一表的主键,将该查询结果存储至该第一表。
[0066] 该查询结果可以包括该多个查询表中符合查询条件的目标记录对应的多个列的数据,其中,该目标记录对应的多个列的数据可以包括该目标记录中的至少一列的数据,或者包括由对该目标记录中的至少一列的数据进行数学运算获得的数据,这里的数据可以指数值或字符串,本发明实施例对此不做限定。
[0067] 因此,根据本发明实施例的存储查询结果的方法,从第一查询请求对应的多个查询表中确定目标查询表,其中,该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表,并且该多个查询表中不存在该目标查询表的事实表,并且根据该目标查询表确定用于存储查询结果的第一表的主键,能够避免现有技术中由于将无实际意义的列作为第一表的主键而造成后续对第一表进行关联查询时查询效率低下的问题,从而提高关联查询的效率。
[0068] 在本发明实施例中,该查询结果对应的多个列可以包括该第一表的主键,相应地,在S140中,该存储查询结果的装置可以将该查询结果对应的多个列中除该第一表的主键之外的其它列以非主键的形式插入该第一表。可选地,如果该查询结果对应的该第一表的主键存在重复值,则该存储查询结果的装置可以以列簇(Column Family)的方式存储该查询结果对应的多个列,以使得该第一表中的主键不存在重复值,但本发明实施例不限于此。
[0069] 可选地,S140,根据该第一表的主键,将该查询结果存储至该第一表,包括:
[0070] 根据该第一表的主键,以列簇的方式将该查询结果存储至该第一表。
[0071] 例如,由表2所示的第一个查询子语句获得的临时表q7_tmp_order_customer可以以表6所示的列簇形式存储,由表3所示的第二个查询子语句获得的临时表q7_tmp_lineitem_supplier可以以表7所示的列簇形式存储。
[0072] 表6 以列簇的形式存储的临时表q7_tmp_order_customer
[0073]
[0074]
[0075] 表7 以列簇的形式存储的临时表q7_tmp_lineitem_supplier
[0076]
[0077] 可选地,作为另一实施例,在将该查询结果插入并存储至该第一表之前,该存储查询结果的装置可以确定该第一表是否存在,如果该第一表不存在,则该存储查询结果的装置可以首先建立该第一表,然后将该查询结果插入该第一表并存储该第一表。如果该第一表已存在,则该存储查询结果的装置可以直接将查询结果插入该第一表,或者首先删除该第一表并重新建立该第一表,然后将查询结果插入新建的该第一表并存储该第一表,但本发明实施例不限于此。
[0078] 在S120中,该存储查询结果的装置可以通过多种方式从该多个查询表中确定该目标查询表。作为一个可选实施例,该存储查询结果的装置可以根据该第一查询请求对应的至少一个第一关联查询条件,从该多个查询表中确定该目标查询表。
[0079] 可选地,如图2所示,S120,从该多个查询表中确定目标查询表,包括:
[0080] S121,确定该第一查询请求对应的至少一个第一关联查询条件,其中,该第一关联查询条件由第一查询表中的第一列和第二查询表中的第二列构成,该多个查询表包括该第一查询表和不同于该第一查询表的该第二查询表;
[0081] S122,确定该第一关联查询条件对应的第一查询表和所述第二查询表之间的关联关系;
[0082] S123,根据该第一查询表和该第二查询表之间的关联关系,从该第一查询表和该第二查询表中确定该目标查询表。
[0083] 具体地,在该第一查询请求对应的查询语句中,该第一查询表的第一列与该第二查询表的第二列可以以等号连接。以表3所示的第二个查询子语句为例,该查询子语句中包括两个关联查询条件,即由表lineitem的列suppkey与表supplier的列suppkey构成的关联查询条件“l_suppkey=s_suppkey”和由表supplier中的列nationkey和表n1中的列nationkey构成的关联查询条件“s_nationkey=n1.n_nationkey”。该存储查询结果的装置可以从表lineitem、表supplier和表n1中确定该目标查询表。
[0084] 可选地,作为另一实施例,S122,确定该第一查询表和所述第二查询表之间的关联关系,包括:
[0085] 确定该第一查询表的第一列是否为该第一查询表的主键;
[0086] 若该第一查询表的第一列为该第一查询表的主键,确定该第二查询表为该第一查询表的事实表;
[0087] 若该第一查询表的第一列为该第一查询表的外键,确定该第一查询表为该第二查询表的事实表。
[0088] 如果该存储查询结果的装置确定该第一列为该第一查询表的主键,则表明该第二列为该第二查询表的外键,此时,该存储查询结果的装置可以确定该第一查询表为该第二查询表的维度表,该第二查询表为该第一查询表的事实表。可选地,如果该存储查询结果的装置确定该第一列为该第一查询表的外键,则表明该第二列为该第二查询表的主键,此时,该存储查询结果的装置可以确定该第一查询表为该第二查询表的事实表,该第二查询表为该第一查询表的维度表。
[0089] 或者,该存储查询结果的装置也可以确定该第二列是否为该第二查询表的主键,如果该第二列为该第二查询表的主键,则该存储查询结果的装置可以确定该第一查询表为该第二查询表的事实表;而如果该第二列为该第二查询表的外键,则该存储查询结果的装置可以确定该第二查询表为该第一查询表的事实表,但本发明实施例不限于此。
[0090] 应理解,在本发明实施例中,除非明确说明或者从上下文可以直接看出,术语“主键”可以指能够唯一标识一行的一列,即非联合主键,此时,主键对应一列,也可以指能够唯一标识一行的多列或能够与其它列共同唯一标识一行的一列,即联合主键或联合主键之一,此时,主键对应多列或多列中的一列,本发明实施例对此不做限定。
[0091] 如果该第一查询请求对应一个第一关联查询条件,并且该存储查询结果的装置确定该第二查询表为该第一查询表的事实表,则该存储查询结果的装置可以确定该第二查询表为该目标查询表。如果该第一查询请求对应多个第一关联查询条件,则该存储查询结果的装置可以确定每个第一关联查询条件中的两个查询表之间的关联关系,并且根据该多个第一关联查询条件中的每个第一关联查询条件中的两个查询表之间的关联关系,确定该目标查询表。仍以图3所示的第二个查询子语句为例,该存储查询结果的装置可以确定表lineitem与表supplier之间的关联关系以及表supplier与表n1之间的关联关系。其中,表lineitem的典型形式可以如表8所示,其中,orderkey和linenumber作为表lineitem的联合主键,一个orderkey的值和一个linenumber的值能够共同标识表中的一行。表supplier的典型形式可以如表9所示,其中,suppkey为表supplier的非联合主键,能够单独标识表中的一行。命名为表n1的表nation的典型形式可以如表10所示,其中,nationkey为表n1的主键。此时,由表8和表9可以得知,suppkey为表lineitem的外键并且为表supplier的主键,则表lineitem为表supplier的事实表;由表9和表10可以得知,nationkey为表supplier的外键并且为表n1的主键,则表supplier为表n1的事实表。在表lineitem、supplier和n1这三个查询表中,表lineitem为表supplier的事实表,并且表lineitem、supplier和n1中不存在表lineitem的事实表,因此,该存储查询结果的装置可以确定表lineitem为目标查询表。
[0092] 图8 表lineitem示例
[0093]
[0094] 图9 表supplier示例
[0095]
[0096] 图10 表nation示例
[0097]
[0098] 可选地,作为另一实施例,该第一查询请求对应一个第一关联查询条件;
[0099] 相应地,S123,根据该第一查询表与该第二查询表之间的关联关系,从该第一查询表和该第二查询表中确定该目标查询表,包括:
[0100] 若该第二查询表为该第一查询表的事实表,则确定该第二查询表为该目标查询表;
[0101] 若该第一查询表为该第二查询表的事实表,则确定该第一查询表为该目标查询表。
[0102] 可选地,作为另一实施例,如果该第一查询请求对应多个第一关联查询条件,则该根据该第一查询表与该第二查询表之间的关联关系,从该第一查询表和该第二查询表中确定该目标查询表,包括:
[0103] 根据该第一查询表与该第二查询表之间的关联关系,建立关联关系树,其中,若该第二查询表为该第一查询表的事实表,该第二查询表为该第一查询表的父节点;
[0104] 将该关联关系树的根节点确定为该目标查询表。
[0105] 在建立关联关系树时,该存储查询结果的装置可以将事实表作为维度表的父节点,一个节点可以有多个子节点。此时,由于该关联关系树不存在根节点的父节点,即该关联关系树中不包括根节点的事实表,并且该关联关系树中存在该根节点的子节点,即存在该根节点的维度表,因此,该存储查询结果的装置可以将该关联关系树的根节点确定为该目标查询表。仍以表3所示的第二个查询子语句为例,根据表lineitem为表supplier的事实表以及表supplier为表n1的事实表,该存储查询结果的装置可以建立如图3所示的关联关系树,其中,项目(lineitem)表为该关联关系树的根节点,因此,该存储查询结果的装置可以确定表lineitem为该第二查询子语句对应的目标查询表。类似地,可以根据表2所示的第一个查询子语句建立如图4所示的关联关系树,其中,该关联关系树的根节点为订单(orders)表,因此该存储查询结果的装置可以确定表orders为表2所示的第一个查询子语句对应的目标查询表,但本发明实施例不限于此。
[0106] 可选地,作为另一实施例,S130,根据该目标查询表,确定该第一表的主键,包括:
[0107] 确定该查询结果对应的多个列中是否存在该目标查询表的非联合主键;
[0108] 若该多个列中存在该目标查询表的非联合主键,将该目标查询表的非联合主键确定为该第一表的主键。
[0109] 具体地,该存储查询结果的装置可以确定该目标查询表的主键是联合主键还是非联合主键,如果该目标查询表的主键为联合主键,则该存储查询结果的装置可以确定该查询结果对应的多个列中不存在该目标查询表的非联合主键。以表3所示的第二个查询子语句为例,该第二个查询子语句对应的目标查询表为表lineitem,而表lineitem的主键为由orderkey和linenumber组成的联合主键,则该存储查询结果的装置可以确定该查询结果对应的多个列中不包括表orders的非联合主键,但本发明实施例不限于此。
[0110] 可选地,如果该目标查询表的主键为非联合主键,则该存储查询结果的装置可以进一步确定该查询结果对应的多个列中是否存在该目标查询表的非联合主键。以表2所示的第一个查询子语句为例,该第一个查询子语句对应的目标查询表为表orders,并且表orders的主键为orderkey,则该存储查询结果的装置可以确定该第一个查询子语句对应的多个列o_orderkey、n1.n_name和n2.n_name中是否包括表orders的主键orderkey。由于该多个列中包括o_orderkey,则该存储查询结果的装置可以将o_orderkey作为临时表q7_tmp_order_customer的主键,但本发明实施例不限于此。
[0111] 可选地,作为另一实施例,S130,根据该目标查询表,确定该第一表的主键,还包括:
[0112] 若该查询结果对应的多个列中不存在该目标查询表的非联合主键,确定与该第一查询请求对应的第二查询请求,该第二查询请求用于请求对该第一表和第二表进行关联查询;
[0113] 根据该第二查询请求,确定该第一表的主键。
[0114] 如果该目标查询表的非联合主键不存在,即该目标查询表的主键具体为联合主键,或者如果该目标查询表的主键为非联合主键,但该查询结果对应的多个列中不包括该目标查询表的非联合主键,则该查询结果对应的多个列中不存在该目标查询表的非联合主键。此时,该存储查询结果的装置可以确定是否存在与该第一查询请求对应的第二查询请求,如果不存在与该第一查询请求对应的第二查询请求,则该存储查询结果的装置可以将一个无实际意义的列作为该第一表的主键。如果存在与该第一查询请求对应的第二查询请求,则该存储查询结果的装置可以根据该第二查询请求确定该第一表的主键。具体地,该第二查询请求用于对该第一表和第二表进行关联查询,例如,该第一表为临时表q7_tmp_lineitem_supplier,并且表4所示的查询语句用于对临时表q7_tmp_order_customer和q7_tmp_lineitem_supplier进行关联查询,因此,表4所示的查询语句可以作为表3所示的第一查询请求对应的第二查询请求。此时,该存储查询结果的装置可以根据表4所示的查询语句确定临时表q7_tmp_lineitem_supplier的主键,但本发明实施例不限于此。
[0115] 该存储查询结果的装置可以通过多种方式根据该第二查询请求确定该第一表的主键。作为一个可选实施例,该根据该第二查询请求,确定该第一表的主键,包括:
[0116] 确定该第二查询请求对应的至少一个第二关联查询条件,其中,该第二关联查询条件由该第一表的第三列和该第二表的第四列构成;
[0117] 从该至少一个第二关联查询条件中确定第二目标关联查询条件,该第二目标关联查询条件包括该第二表的主键;
[0118] 将该第二目标关联查询条件中包括的该第一表的第三列确定为该第一表的主键。
[0119] 该第二关联查询条件可以由该第一表的第三列和该第二表的第四列构成,该存储查询结果的装置可以从该第二查询请求对应的至少一个第二关联查询条件中确定第二目标关联查询条件,其中,该第二目标关联查询条件由第一表的第三列和该第二表的第四列组成,并且该第四列为该第二表的主键。该存储查询结果的装置可以将该第二目标关联查询条件中的第一表的第三列确定为该第一表的主键,但本发明实施例不限于此。
[0120] 该第二查询请求可以具体用于请求对该第一表和至少一个第二表进行关联查询。可选地,作为另一实施例,如果该第二表的个数为多个,在该存储查询结果的装置确定该第二目标关联查询条件之前,该存储查询结果的装置可以从该多个第二表中确定第二目标表,其中,该第二目标表为该多个第二表中的至少一个表的事实表,并且该多个第二表中不存在该第二目标表的事实表。此时,该存储查询结果的装置可以从该第二查询请求对应的至少一个第二关联查询条件中确定该第二目标查询条件,其中,该第二目标查询条件由该第二目标表的主键和该第一表的第三列构成,并且该存储查询结果的装置可以将该第二目标查询条件中的该第一表的第三列作为该第一表的主键,但本发明实施例不限于此。
[0121] 仍以表3所示的第二个查询子语句为例,表4所示的查询语句为该第二个查询子语句对应的第二查询请求,该第二查询请求用于对该第一表(临时表q7_tmp_lineitem_supplier,命名为表n2)和一个第二表(临时表q7_tmp_order_customer,命名为表n1)进行关联查询。此时,表4所示的查询语句中包括三个第二关联查询条件,“n2.l_orderkey=n1.o_orderkey”、“n1.cust_nation=n2.cust_nation”和“n1.supp_nation=n2.supp_nation”,其中,这三个第二关联查询条件中的第二目标关联查询条件为“n2.l_orderkey=n1.o_orderkey”,该目标关联查询条件由表n1的主键o_orderkey和表n2的列l_orderkey构成,则该存储查询结果的装置可以将该l_orderkey作为该临时表q7_tmp_lineitem_supplier的主键。此时,临时表q7_tmp_lineitem_supplier的主键l_orderkey与临时表q7_tmp_order_customer的主键o_orderkey相对应,两者均不存在重复数据,此时,在进行表4所示的关联查询时,可以直接查询而无需建立索引,从而提高查询效率和速度。
[0122] 因此,根据本发明实施例的存储查询结果的方法,从第一查询请求对应的多个查询表中确定目标查询表,其中,该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表,并且该多个查询表中不存在该目标查询表的事实表,并且根据该目标查询表确定用于存储查询结果的第一表的主键,能够避免现有技术中由于将无实际意义的列作为第一表的主键而造成后续对第一表进行关联查询时查询效率低下的问题,从而提高关联查询的效率。
[0123] 应注意,表1至表4的例子是为了帮助本领域技术人员更好地理解本发明实施例,而非要限制本发明实施例的范围。本领域技术人员根据所给出的表1至表4所示的例子,显然可以进行各种等价的修改或变化,这样的修改或变化也落入本发明实施例的范围内。
[0124] 还应理解,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0125] 还应理解,在本发明实施例中,术语“第一”、“第二”和“第三”仅仅是为了区分不同的内容,不应对本发明实施例构成任何限定。本发明实施例中的第一表和第二表仅仅是为了区分不同的表,第一查询表中的第一列、第二查询表中的第二列仅仅为了区分关联查询条件中的属于第一查询表的查询列和属于第二查询表的查询列,类似地,第一表中的第三列和第二表中的第四列也仅仅为了区分不同的列,而不应对该各个列在表中的具体位置造成限定。
[0126] 上文中结合图1至图4,详细描述了根据本发明实施例的存储查询结果的方法,下面将结合图5至图7,描述根据本发明实施例的存储查询结果的装置。
[0127] 图5示意性地示出了根据本发明实施例的存储查询结果的装置200。如图5所示,该装置200包括:
[0128] 第一确定单元210,用于确定第一查询请求对应的多个查询表,其中,该第一查询请求用于请求对该多个查询表进行关联查询;
[0129] 第二确定单元220,用于从该第一确定单元210确定的该多个查询表中确定目标查询表,其中,该多个查询表中不存在该目标查询表的事实表,并且该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表;
[0130] 第三确定单元230,用于根据该第二确定单元220确定的该目标查询表,确定第一表的主键,其中,该第一表用于存储该第一查询请求对应的查询结果;
[0131] 存储单元240,用于根据该第三确定单元230确定的该第一表的主键,将该查询结果存储至该第一表。
[0132] 因此,根据本发明实施例的存储查询结果的装置,从第一查询请求对应的多个查询表中确定目标查询表,其中,该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表,并且该多个查询表中不存在该目标查询表的事实表,并且根据该目标查询表确定用于存储查询结果的第一表的主键,能够避免现有技术中由于将无实际意义的列作为第一表的主键而造成后续对第一表进行关联查询时查询效率低下的问题,从而提高关联查询的效率。
[0133] 可选地,作为另一实施例,该装置200还可以包括:
[0134] 接收单元,用于在该第一确定单元210确定第一查询请求对应的多个查询表之前,接收来自客户端的该第一查询请求;
[0135] 查询单元,用于根据该接收单元接收的该第一查询请求,对该多个查询表进行关联查询。
[0136] 此时,该存储单元240具体用于将该查询单元获得的查询结果存储至该第一表。
[0137] 可选地,该存储单元240具体用于:根据该第三确定单元230确定的该第一表的主键,以列簇的方式将该查询结果存储至该第一表。
[0138] 可选地,作为另一实施例,该第二确定单元220包括:
[0139] 第一确定子单元,用于确定该第一查询请求对应的至少一个第一关联查询条件,其中,该第一关联查询条件由第一查询表中的第一列和第二查询表中的第二列构成,该多个查询表包括该第一查询表和不同于该第一查询表的该第二查询表;
[0140] 第二确定子单元,用于确定该第一确定子单元确定的该第一关联查询条件对应的该第一查询表与该第二查询表之间的关联关系;
[0141] 第三确定子单元,用于根据该第二确定子单元确定的该第一查询表与该第二查询表之间的关联关系,从该第一查询表和该第二查询表中确定该目标查询表。
[0142] 可选地,作为另一实施例,该第二确定子单元具体用于:
[0143] 确定该第一查询表的第一列是否为该第一查询表的主键;
[0144] 若该第一查询表的第一列为该第一查询表的主键,确定该第二查询表为该第一查询表的事实表;
[0145] 若该第一查询表的第一列为该第一查询表的外键,确定该第一查询表为该第二查询表的事实表。
[0146] 可选地,作为另一实施例,该第一查询请求对应一个第一关联查询条件;
[0147] 相应地,该第三确定子单元具体用于:
[0148] 若该第二确定子单元确定该第二查询表为该第一查询表的事实表,则确定该第二查询表为该目标查询表;
[0149] 若该第二确定子单元确定该第一查询表为该第二查询表的事实表,则确定该第一查询表为该目标查询表。
[0150] 可选地,作为另一实施例,该第一查询请求对应多个第一关联查询条件,此时,该第三确定子单元具体用于:
[0151] 根据该第二确定子单元确定的该第一查询表与该第二查询表之间的关联关系,建立关联关系树,其中,若该第二查询表为该第一查询表的事实表,该第二查询表为该第一查询表的父节点;
[0152] 将该关联关系树的根节点确定为该目标查询表。
[0153] 可选地,作为另一实施例,该第三确定单元230包括:
[0154] 第四确定子单元,用于确定该查询结果对应的多个列中是否存在该目标查询表的非联合主键;
[0155] 第五确定子单元,用于若该第四确定子单元确定该多个列中存在该目标查询表的非联合主键,将该目标查询表的非联合主键确定为该第一表的主键。
[0156] 可选地,作为另一实施例,该第三确定单元还包括:
[0157] 第六确定子单元,用于若该第四确定子单元确定该多个列中不存在该目标查询表的非联合主键,确定与该第一查询请求对应的第二查询请求,该第二查询请求用于请求对该第一表和第二表进行关联查询;
[0158] 第七确定子单元,用于根据该第六确定子单元确定的该第二查询请求,确定该第一表的主键。
[0159] 可选地,作为另一实施例,该第七确定子单元具体用于:
[0160] 确定该第二查询请求对应的至少一个第二关联查询条件,其中,该第二关联查询条件由该第一表的第三列和该第二表的第四列构成;
[0161] 从该至少一个第二关联查询条件中确定第二目标关联查询条件,该第二目标关联查询条件包括该第二表的主键;
[0162] 将该第二目标关联查询条件中包括的该第一表的第三列确定为该第一表的主键。
[0163] 根据本发明实施例的存储查询结果的装置200可对应于根据本发明实施例的存储查询结果的方法100的执行主体,并且存储查询结果的装置200中的各个模块的上述和其它操作和/或功能分别为了实现图1至图4中的各个方法的相应流程,为了简洁,在此不再赘述。
[0164] 因此,根据本发明实施例的存储查询结果的装置,从第一查询请求对应的多个查询表中确定目标查询表,其中,该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表,并且该多个查询表中不存在该目标查询表的事实表,并且根据该目标查询表确定用于存储查询结果的第一表的主键,能够避免现有技术中由于将无实际意义的列作为第一表的主键而造成后续对第一表进行关联查询时查询效率低下的问题,从而提高关联查询的效率。
[0165] 图6示意性地示出了根据本发明实施例的另一存储查询结果的装置300。如图6所示,该装置300包括:
[0166] 处理器310,用于:确定第一查询请求对应的多个查询表,其中,该第一查询请求用于请求对该多个查询表进行关联查询;从该多个查询表中确定目标查询表,其中,该多个查询表中不存在该目标查询表的事实表,并且该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表;根据该目标查询表,确定第一表的主键,其中,该第一表用于存储该第一查询请求对应的查询结果;
[0167] 存储器320,用于根据该处理器310确定的该第一表的主键,将该查询结果存储至该第一表。
[0168] 因此,根据本发明实施例的存储查询结果的装置,从第一查询请求对应的多个查询表中确定目标查询表,其中,该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表,并且该多个查询表中不存在该目标查询表的事实表,并且根据该目标查询表确定用于存储查询结果的第一表的主键,能够避免现有技术中由于将无实际意义的列作为第一表的主键而造成后续对第一表进行关联查询时查询效率低下的问题,从而提高关联查询的效率。
[0169] 应理解,在本发明实施例中,该处理器310可以是中央处理单元(Central Processing Unit,简称为“CPU”),该处理器310还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0170] 该存储器320可以包括只读存储器和随机存取存储器,并向处理器310提供指令和数据。存储器320的一部分还可以包括非易失性随机存取存储器。例如,存储器320还可以存储设备类型的信息。
[0171] 在实现过程中,上述方法的各步骤可以通过处理器310中的硬件的集成逻辑电路或者软件形式的指令完成。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器320,处理器310读取存储器320中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
[0172] 可选地,作为另一实施例,该装置200还可以包括:
[0173] 接收器,用于在该处理器310确定第一查询请求对应的多个查询表之前,接收来自客户端的该第一查询请求;
[0174] 相应地,该处理器310还用于根据该接收器接收的该第一查询请求,对该多个查询表进行关联查询。
[0175] 此时,该存储器320具体用于将该处理器310获得的查询结果存储至该第一表。
[0176] 可选地,该存储器320具体用于:根据该处理器310确定的该第一表的主键,以列簇的方式将该查询结果存储至该第一表。
[0177] 可选地,作为另一实施例,该处理器310具体用于:
[0178] 确定该第一查询请求对应的至少一个第一关联查询条件,其中,该第一关联查询条件由第一查询表中的第一列和第二查询表中的第二列构成,该多个查询表包括该第一查询表和不同于该第一查询表的该第二查询表;
[0179] 确定该第一关联查询条件对应的该第一查询表与该第二查询表之间的关联关系;
[0180] 根据该第一查询表与该第二查询表之间的关联关系,从该第一查询表和该第二查询表中确定该目标查询表。
[0181] 可选地,作为另一实施例,该处理器310具体用于:
[0182] 确定该第一查询表的第一列是否为该第一查询表的主键;
[0183] 若该第一查询表的第一列为该第一查询表的主键,确定该第二查询表为该第一查询表的事实表;
[0184] 若该第一查询表的第一列为该第一查询表的外键,确定该第一查询表为该第二查询表的事实表。
[0185] 可选地,作为另一实施例,该第一查询请求对应一个第一关联查询条件;
[0186] 相应地,该处理器310具体用于:
[0187] 若确定该第二查询表为该第一查询表的事实表,则确定该第二查询表为该目标查询表;
[0188] 若确定该第一查询表为该第二查询表的事实表,则确定该第一查询表为该目标查询表。
[0189] 可选地,作为另一实施例,该第一查询请求对应多个第一关联查询条件,此时,该处理器310具体用于:
[0190] 根据该第一查询表与该第二查询表之间的关联关系,建立关联关系树,其中,若该第二查询表为该第一查询表的事实表,该第二查询表为该第一查询表的父节点;
[0191] 将该关联关系树的根节点确定为该目标查询表。
[0192] 可选地,作为另一实施例,该处理器310还用于:
[0193] 确定该查询结果对应的多个列中是否存在该目标查询表的非联合主键;
[0194] 若确定该多个列中存在该目标查询表的非联合主键,将该目标查询表的非联合主键确定为该第一表的主键。
[0195] 可选地,作为另一实施例,该处理器310还用于:
[0196] 若确定该多个列中不存在该目标查询表的非联合主键,确定与该第一查询请求对应的第二查询请求,该第二查询请求用于请求对该第一表和第二表进行关联查询;
[0197] 根据该第二查询请求,确定该第一表的主键。
[0198] 可选地,作为另一实施例,该该处理器310具体用于:
[0199] 确定该第二查询请求对应的至少一个第二关联查询条件,其中,该第二关联查询条件由该第一表的第三列和该第二表的第四列构成;
[0200] 从该至少一个第二关联查询条件中确定第二目标关联查询条件,该第二目标关联查询条件包括该第二表的主键;
[0201] 将该第二目标关联查询条件中包括的该第一表的第三列确定为该第一表的主键。
[0202] 根据本发明实施例的存储查询结果的装置300可对应于根据本发明实施例的存储查询结果的方法100的执行主体,并且存储查询结果的装置300中的各个模块的上述和其它操作和/或功能分别为了实现图1至图4中的各个方法的相应流程,为了简洁,在此不再赘述。
[0203] 因此,根据本发明实施例的存储查询结果的装置,从第一查询请求对应的多个查询表中确定目标查询表,其中,该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表,并且该多个查询表中不存在该目标查询表的事实表,并且根据该目标查询表确定用于存储查询结果的第一表的主键,能够避免现有技术中由于将无实际意义的列作为第一表的主键而造成后续对第一表进行关联查询时查询效率低下的问题,从而提高关联查询的效率。
[0204] 图7示意性地示出了根据本发明实施例的计算设备400。如图7所示,该计算设备400包括:处理器402、存储器404和总线410。其中,处理器402和存储器404通过总线410实现彼此之间的通信连接。
[0205] 处理器402可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。
[0206] 存储器404可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器404可以存储操作系统和其他应用程序。在通过软件或者固件来实现本发明实施例提供的技术方案时,用于实现本发明实施例提供的技术方案的程序代码保存在存储器404中,并由处理器402来执行。
[0207] 具体地,存储器404可以用于存储可执行指令,也可以用于存储各种信息,例如,查询结果。处理器402可以通过总线系统410读取该存储器404存储的信息,或者将查询结果存储至存储器404。此外,当该计算设备400运行时,处理器402可以执行存储器404存储的可执行指令,以确定第一查询请求对应的多个查询表,其中,该第一查询请求用于请求对该多个查询表进行关联查询;从该多个查询表中确定目标查询表,其中,该多个查询表中不存在该目标查询表的事实表,并且该目标查询表为该多个查询表中除该目标查询表之外的至少一个查询表的事实表;根据该目标查询表,确定第一表的主键,其中,该第一表用于存储该第一查询请求对应的查询结果;根据该第一表的主键,将该查询结果存储至该第一表。
[0208] 可选地,如图7所示,该计算设备还可以包括输入/输出接口406和通信接口408。输入/输出接口406用于接收输入的数据和信息,输出操作结果等数据。
[0209] 通信接口408使用例如但不限于收发器一类的收发装置,来实现计算设备400与其他设备或通信网络之间的通信。
[0210] 总线410可包括一通路,在计算设备400各个部件(例如处理器402、存储器404、输入/输出接口406和通信接口408)之间传送信息。
[0211] 图7所示的硬件结构以及上述描述适用于执行本发明实施例所提供的各种存储查询结果的方法,例如,图1至图4所示的各种方法流程,为了简洁,这里不再赘述。
[0212] 应注意,尽管图7所示的计算设备400仅仅示出了处理器402、存储器404、输入/输出接口406、通信接口408以及总线410,但是在具体实现过程中,本领域的技术人员应当明白,计算设备400还包含实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当明白,计算设备400还可包含实现其他附加功能的硬件器件。此外,本领域的技术人员应当明白,计算设备400也可仅仅包含实现本发明实施例所必须的器件,而不必包含图7中所示的全部器件。
[0213] 应理解,在本发明实施例中,术语和/或仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符/,一般表示前后关联对象是一种或的关系。
[0214] 本领域普通技术人员可以意识到,结合本文中所公开的实施例中描述的各方法步骤和单元,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各实施例的步骤及组成。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0215] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0216] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
[0217] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
[0218] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0219] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0220] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。