一种数据查询方法及装置制造方法

文档序号:6502137阅读:94来源:国知局
一种数据查询方法及装置制造方法
【专利摘要】本申请公开了一种数据查询方法及装置,包括将查询语句分解为一个或一个以上查询子句;遍历查询子句,查询子句与元数据匹配,将其替换为元数据中保存的执行结果;否则执行查询子句并更新元数据;将最终的执行结果用于主查询得到查询结果。本申请将已经执行过的查询子句以及其执行结果作为元数据进行管理,对于当前会话或者不同会话中相同的查询子句,直接将查询子句替换为元数据中保存的执行结果,避免了查询子句的重复执行,从而更大限度提高了整体系统的查询性能。同时,与现有查询语句层面的优化相比,本申请的查询优化粒度更加细,更加适合于数据仓库应用中的大数据查询,从而进一步提高了整体系统的查询性能。
【专利说明】一种数据查询方法及装置

【技术领域】
[0001] 本申请涉及数据存储和分析技术,尤指一种在数据仓库应用中,针对海量、读多写 少的数据进行数据查询方法及装置。

【背景技术】
[0002] 在科学研究、计算机仿真、互联网应用、电子商务等诸多应用领域,数据量正在以 极快的速度增长。大数据时代的信息爆炸,尤其是非结构化数据的爆炸性增长,正在深刻影 响着整个数据存储和分析领域。
[0003] 为了满足新兴的业务需求,开始逐渐摒弃传统的数据处理方式,转而尝试新的模 式,对包括非结构化数据在内的各种类型数据进行访问、处理和分析。在数据存储和分析领 域,MapReduce无疑是最受关注的新一代技术,利用MapReduce编程框架,开发人员可以开 发出跨处理器分布式集群或独立计算机的、能够并行处理海量非结构化数据的程序。其中, MapReduce是一种编程模型,用于大规模数据的并行运算,Map表示映射,Reduce表示化简。
[0004] 在大数据时代,传统的结构化查询语言(SQL, Structure Query Language)已经 不能满足所有的业务需求,而尽管MapReduc的应用非常广泛,但是,MapReduc框架暴露出 来的编程接口仍然比较低级,开发比较耗时,并且代码很难复用。继而,转向能够将用户编 写的SQL转化为相应的MapReduce程序,利用MapReduce框架执行这些任务以对Hadoop分 布式文件系统(HDFS)上的海量数据进行处理的程序。目前应用最广泛的是Facebook贡献 的Hive。基于MapReduce的Hive在扩展性与容错性方面有强大的优势。其中,Hive是基 于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完 整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。
[0005] 在企业数据挖掘过程中,通常每天执行的挖掘任务都会成百上千,甚至达到上万, 所以也就难免存在不同的挖掘任务中重复计算的问题,比如:工程师A需要从表S1和表S2 中筛选出一批条件W的数据,然后与表S3进行组合再生成工程师A想要的数据。同时,工 程师B也需要从表S1和表S2中用相同条件W筛选出相同的数据,然后与表X组合,再生成 工程师B想要的数据。在这两个工程师间通常并不知道彼此有部分相同的需求,所以在生 产任务中,相同的计算会进行两次,相同的公共查询信息被重复地访问。无疑,这样降低了 整体系统的查询性能。


【发明内容】

[0006] 为了解决上述技术问题,本申请提供了一种数据查询方法及装置,能够避免公共 查询信息的重复运行,从而提高整体系统的查询性能。
[0007] 为了达到本申请目的,本申请提供了一种数据查询方法,其特征在于,包括:将查 询语句分解为一个或一个以上查询子句;
[0008] 遍历查询子句,查询子句与元数据匹配,将其替换为元数据中保存的执行结果,否 贝1J,执行查询子句并更新元数据;
[0009] 将最终得到的执行结果用于主查询得到查询结果。
[0010] 该方法之前还包括:获取查询语句,验证查询语句的有效性与正确性。
[0011] 该方法还包括:对所述查询语句进行规范化与查询优化。
[0012] 所述遍历查询子句具体包括:
[0013] 对所述查询子句构成的查询子句算子树进行后序遍历,利用查询子句的三元组信 息与元数据进行匹配,
[0014] 如果所述查询子句的三元组信息在元数据库中存在,则该查询子句的三元组信息 与元数据匹配,将所述查询子句替换为对应的执行结果;重置该元数据的失效时间;
[0015] 如果所述查询子句的三元组信息在元数据库中不存在,则该查询子句的三元组信 息与元数据不匹配,执行所述查询子句,持久化执行结果,并在元数据中添加对应的三元组 信息;设置该元数据的失效时间,以及该查询子句在查询子句算子树的层级。
[0016] 所述查询子句的三元组信息与元数据匹配时,还包括:将所述执行结果对应的记 录被使用次数加一。
[0017] 在所述将查询语句分解为多个查询子句时,该方法还包括:优化所述查询子句。
[0018] 该方法还包括:预先设置查询子句优化策略;
[0019] 所述优化查询子句包括:按照所述查询子句优化策略对分解得到的查询子句进行 优化,剔除不必要的查询子句。
[0020] 所述查询子句优化策略包括:
[0021] 当查询子句的输入集与输出集一致时,删除所述查询子句;和/或,
[0022] 当查询子句间的区别在于输出列,且第一查询子句的输出列是第二查询子句的输 出列的子集时,执行第二查询子句,将第二查询子句的输出结果集并入第一查询子句;和/ 或,
[0023] 当查询子句间的区别在于输出列,且第一查询子句的输出列与第二查询子句的输 出列互为补集时,合并第一查询子句和第二查询子句;和/或,
[0024] 当查询子句的输入集相同,过滤条件不同时,提取所述输入集相同,过滤条件不同 的各查询子句的公共部分组成新的查询子句,执行该新的查询子句,并将其输出结果集分 别并入所述输入集相同,过滤条件不同的各查询子句;和/或,
[0025] 将所述存在或关系的查询子句拆分为两个或两个以上查询子句。
[0026] 所述元数据存储在元数据库中;该方法还包括对所述元数据库进行管理:
[0027] 当所述元数据对应的失效时间到期,或生成所述查询子句结果数据的用户自定义 函数UDF过期,或生成所述查询子句结果数据的输入数据集中其中一个发生数据变更,或 所述查询子句的输出集被用户强行回收时,删除失效的查询子句;
[0028] 和 / 或,
[0029] 按照原先设置的间隔时间扫描元数据,删除失效的查询子句信息。
[0030] 所述删除失效的查询子句包括:删除所有依赖于所述查询子句的执行结果的查询 子句;
[0031] 如果所述查询子句对应的执行结果为中间结果,则同时从分布式文件存储系统中 删除该中间结果。
[0032] 所述元数据包括:与各查询子句对应的三元组信息、三元组信息对应的查询子句 的失效时间、查询子句被使用次数、查询子句在查询节点树的层级、查询结果标识。
[0033] 所述三元组包括输入集、输出集,以及完成输入到输出转换的操作指令集。
[0034] 本申请提供一种数据查询装置,至少包括元数据库、分解模块、处理模块和输出模 块,其中,
[0035] 元数据库,用于存储元数据,包括与各查询子句对应的三元组信息,三元组信息对 应的查询子句的失效时间、查询子句被使用次数、查询子句在查询节点树的层级、查询结果 标识信息;
[0036] 分解模块,用于将查询语句分解为一个或一个以上查询子句;
[0037] 处理模块,用于遍历查询子句,查询子句与元数据匹配,将其替换为元数据中保存 的执行结果;否则,执行查询子句并更新元数据;
[0038] 输出模块,用于将最终得到的执行结果用于主查询得到查询结果。
[0039] 该装置还包括:获取模块,用于获取查询语句,验证查询语句的有效性与正确性。
[0040] 所述获取模块,还用于对所述查询语句进行规范化与查询优化。
[0041] 所述处理模块,具体用于利用查询子句的三元组信息与元数据进行匹配:
[0042] 当查询子句的三元组信息在元数据库中存在时,将查询子句替换为执行结果;重 置该元数据的失效时间;
[0043] 当查询子句的三元组信息在元数据库中不存在时,执行当前查询子句,持久化执 行结果,并在元数据中添加对应的三元组信息;设置该元数据的失效时间,以及该查询子句 在查询子句算子树的层级。
[0044] 所述处理模块还用于,在所述查询子句的三元组信息与元数据匹配时,将所述执 行结果对应的记录被使用次数加一。
[0045] 所述输出模块,具体用于将所述查询子句中子查询的执行结果进行迭代并用于主 查询,得到查询结果。
[0046] 在所述分解模块中预先设置有查询子句优化策略;
[0047] 所述分解模块,还用于按照优化策略对分解得到的查询子句进行优化。
[0048] 所述处理模块,还用于对元数据库进行管理,清除失效的查询子句:
[0049] 当所述元数据对应的失效时间到期,或生成所述查询子句结果数据的UDF过期, 或生成所述查询子句结果数据的输入数据集中其中一个发生数据变更,或所述查询子句的 输出集被用户强行回收时,删除失效的查询子句;
[0050] 和 / 或,
[0051] 按照原先设置的间隔时间扫描元数据,删除失效的查询子句;
[0052] 其中,所述删除失效的查询子句为删除所有依赖于所述查询子句的执行结果的查 询子句;如果所述查询子句对应的执行结果为中间结果,则同时从分布式文件存储系统中 删除该中间结果。
[0053] 与现有技术相比,本申请包括将查询语句分解为一个或一个以上查询子句;遍历 查询子句,查询子句与元数据匹配,将其替换为元数据中保存的执行结果,否则,执行查询 子句并更新元数据;将最终得到的执行结果用于主查询得到查询结果。本申请将已经执行 过的查询子句及其执行结果作为元数据进行管理,对于当前会话或者不同会话中相同查询 子句,直接将查询子句替换为元数据中保存的执行结果,避免了查询子句的重复执行,从而 更大限度提高了整体系统的查询性能。同时,本申请查询语句分解为多个查询子句,与现有 查询语句层面的优化方式相比,本申请数据查询方法的查询优化粒度更加细,更加适合于 数据仓库应用中的大数据查询,从而进一步提高了整体系统的查询性能。
[0054] 本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变 得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在说明书、权利 要求书以及附图中所特别指出的结构来实现和获得。

【专利附图】

【附图说明】
[0055] 附图用来提供对本申请技术方案的进一步理解,并且构成说明书的一部分,与本 申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
[0056] 图1为本申请数据查询方法的流程图;
[0057] 图2为本申请数据查询装置的组成结构示意图。

【具体实施方式】
[0058] 为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请 的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中 的特征可以相互任意组合。
[0059] 在本申请一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出 接口、网络接口和内存。
[0060] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/ 或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质 的示例。
[0061] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法 或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。 计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、 动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电 可擦除可编程只读存储器(EEPR0M)、快闪记忆体或其他内存技术、只读光盘只读存储器 (CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁 性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中 的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据 信号和载波。
[0062] 在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中 执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺 序执行所示出或描述的步骤。
[0063] 本文中的查询子句是指,当一个查询是另一个查询的条件时,称该查询为子查询, 其中,外层查询称之为主查询。子查询优于主查询先执行,子查询的执行结果用于主查询。 本文中,将子查询与主查询统称为查询子句。一个查询子句有确定的输入集Pin与输出集 Pout,以及完成输入到输出转换的操作指令集等三部分组成,并将它们称为查询子 句三元组,记为τ = {Pin, Pout, 用于唯一标识查询子句。一个查询子句的输入 来源,要么是另外一个查询子句,要么就是来自表Table或者表分区Partition,记为Pin = {dom τ,Table, Partition} 〇
[0064] 图1为本申请数据查询方法的流程图,如图1所示,主要包括:
[0065] 步骤100 :将查询语句分解为一个或一个以上查询子句。
[0066] 本步骤中,在查询之前,先将查询语句分解为一个或多个查询子句,并利用分解得 到的查询子句构造确定的查询子句算子树。每一个查询子句由确定的输入集、输出集与操 作算子树组成,其中,操作算子树由一组操作指令集?构成;常见的操作Operator指 令如表1所示:
[0067]

【权利要求】
1. 一种数据查询方法,其特征在于,包括: 将查询语句分解为一个或一个以上查询子句; 遍历查询子句,查询子句与元数据匹配,将其替换为元数据中保存的执行结果,否则, 执行查询子句并更新元数据; 将最终得到的执行结果用于主查询得到查询结果。
2. 根据权利要求1所述的数据查询方法,其特征在于,该方法之前还包括:获取查询语 句,验证查询语句的有效性与正确性。
3. 根据权利要求2所述的数据查询方法,其特征在于,该方法还包括:对所述查询语句 进行规范化与查询优化。
4. 根据权利要求1?3任一项所述的数据查询方法,其特征在于,所述遍历查询子句具 体包括: 对所述查询子句构成的查询子句算子树进行后序遍历,利用查询子句的三元组信息与 元数据进行匹配, 如果所述查询子句的三元组信息在元数据库中存在,则该查询子句的三元组信息与元 数据匹配,将所述查询子句替换为对应的执行结果;重置该元数据的失效时间; 如果所述查询子句的三元组信息在元数据库中不存在,则该查询子句的三元组信息 与元数据不匹配,执行所述查询子句,持久化执行结果,并在元数据中添加对应的三元组信 息;设置该元数据的失效时间,以及该查询子句在查询子句算子树的层级。
5. 根据权利要求4所述的数据查询方法,其特征在于,所述查询子句的三元组信息与 元数据匹配时,还包括:将所述执行结果对应的记录被使用次数加一。
6. 根据权利要求1?3任一项所述的数据查询方法,其特征在于,在所述将查询语句分 解为多个查询子句时,该方法还包括:优化所述查询子句。
7. 根据权利要求6所述的数据查询方法,其特征在于,该方法还包括:预先设置查询子 句优化策略; 所述优化查询子句包括:按照所述查询子句优化策略对分解得到的查询子句进行优 化,剔除不必要的查询子句。
8. 根据权利要求7所述的数据查询方法,其特征在于,所述查询子句优化策略包括: 当查询子句的输入集与输出集一致时,删除所述查询子句;和/或, 当查询子句间的区别在于输出列,且第一查询子句的输出列是第二查询子句的输出列 的子集时,执行第二查询子句,将第二查询子句的输出结果集并入第一查询子句;和/或, 当查询子句间的区别在于输出列,且第一查询子句的输出列与第二查询子句的输出列 互为补集时,合并第一查询子句和第二查询子句;和/或, 当查询子句的输入集相同,过滤条件不同时,提取所述输入集相同,过滤条件不同的各 查询子句的公共部分组成新的查询子句,执行该新的查询子句,并将其输出结果集分别并 入所述输入集相同,过滤条件不同的各查询子句;和/或, 将所述存在或关系的查询子句拆分为两个或两个以上查询子句。
9. 根据权利要求1?3任一项所述的数据查询方法,其特征在于,所述元数据存储在元 数据库中;该方法还包括对所述元数据库进行管理: 当所述元数据对应的失效时间到期,或生成所述查询子句结果数据的用户自定义函数 UDF过期,或生成所述查询子句结果数据的输入数据集中其中一个发生数据变更,或所述查 询子句的输出集被用户强行回收时,删除失效的查询子句; 和/或, 按照原先设置的间隔时间扫描元数据,删除失效的查询子句信息。
10. 根据权利要求9所述的数据查询方法,其特征在于,所述删除失效的查询子句包 括:删除所有依赖于所述查询子句的执行结果的查询子句; 如果所述查询子句对应的执行结果为中间结果,则同时从分布式文件存储系统中删除 该中间结果。
11. 根据权利要求要求10所述的数据查询方法,其特征在于,所述元数据包括:与各查 询子句对应的三元组信息、三元组信息对应的查询子句的失效时间、查询子句被使用次数、 查询子句在查询节点树的层级、查询结果标识。
12. 根据权利要求11所述的数据查询方法,其特征在于,所述三元组包括输入集、输出 集,以及完成输入到输出转换的操作指令集。
13. -种数据查询装置,其特征在于,至少包括元数据库、分解模块、处理模块和输出模 块,其中, 元数据库,用于存储元数据,包括与各查询子句对应的三元组信息,三元组信息对应的 查询子句的失效时间、查询子句被使用次数、查询子句在查询节点树的层级、查询结果标识 信息; 分解模块,用于将查询语句分解为一个或一个以上查询子句; 处理模块,用于遍历查询子句,查询子句与元数据匹配,将其替换为元数据中保存的执 行结果;否则,执行查询子句并更新元数据; 输出模块,用于将最终得到的执行结果用于主查询得到查询结果。
14. 根据权利要求13所述的数据查询装置,其特征在于,该装置还包括:获取模块,用 于获取查询语句,验证查询语句的有效性与正确性。
15. 根据权利要求14所述的数据查询装置,其特征在于,所述获取模块,还用于对所述 查询语句进行规范化与查询优化。
16. 根据权利要求13?15任一项所述的数据查询装置,其特征在于,所述处理模块,具 体用于利用查询子句的三元组信息与元数据进行匹配: 当查询子句的三元组信息在元数据库中存在时,将查询子句替换为执行结果;重置该 元数据的失效时间; 当查询子句的三元组信息在元数据库中不存在时,执行当前查询子句,持久化执行结 果,并在元数据中添加对应的三元组信息;设置该元数据的失效时间,以及该查询子句在查 询子句算子树的层级。
17. 根据权利要求16所述的数据查询装置,其特征在于,所述处理模块还用于,在所述 查询子句的三元组信息与元数据匹配时,将所述执行结果对应的记录被使用次数加一。
18. 根据权利要求13?15任一项所述的数据查询装置,其特征在于,所述输出模块,具 体用于将所述查询子句中子查询的执行结果进行迭代并用于主查询,得到查询结果。
19. 根据权利要求13?15任一项所述的数据查询装置,其特征在于,在所述分解模块 中预先设置有查询子句优化策略; 所述分解模块,还用于按照优化策略对分解得到的查询子句进行优化。
20.根据权利要求13?15任一项所述的数据查询装置,其特征在于,所述处理模块,还 用于对元数据库进行管理,清除失效的查询子句: 当所述元数据对应的失效时间到期,或生成所述查询子句结果数据的UDF过期,或生 成所述查询子句结果数据的输入数据集中其中一个发生数据变更,或所述查询子句的输出 集被用户强行回收时,删除失效的查询子句; 和/或, 按照原先设置的间隔时间扫描元数据,删除失效的查询子句; 其中,所述删除失效的查询子句为删除所有依赖于所述查询子句的执行结果的查询子 句;如果所述查询子句对应的执行结果为中间结果,则同时从分布式文件存储系统中删除 该中间结果。
【文档编号】G06F17/30GK104123288SQ201310146187
【公开日】2014年10月29日 申请日期:2013年4月24日 优先权日:2013年4月24日
【发明者】乔平, 夏晨, 傅跃兵 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1