CN105677683B - 批量数据查询方法和装置 - Google Patents
批量数据查询方法和装置 Download PDFInfo
- Publication number
- CN105677683B CN105677683B CN201410673523.2A CN201410673523A CN105677683B CN 105677683 B CN105677683 B CN 105677683B CN 201410673523 A CN201410673523 A CN 201410673523A CN 105677683 B CN105677683 B CN 105677683B
- Authority
- CN
- China
- Prior art keywords
- tree
- query plan
- operator
- logical
- logical 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.)
- Active
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/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
-
- 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/245—Query processing
- G06F16/2452—Query translation
- G06F16/24524—Access plan code generation and invalidation; Reuse of access plans
-
- 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/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/2454—Optimisation of common expressions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Operations Research (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种批量数据查询方法和装置,通过获取多条查询语句对应的多棵逻辑查询计划树,根据每棵逻辑查询计划树的各操作符将多棵逻辑查询计划树划分为多个查询组,每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系,然后,对每个查询组内的逻辑查询计划树进行查询间优化,根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树,最后,根据多棵物理查询计划树执行物理查询得到多条查询语句的查询结果。所述方法通过对多棵逻辑查询计划树进行分组,提高了查询组内的逻辑查询计划树之间的优化机会,通过对查询组内的逻辑查询计划树进行查询间优化,提高了批量数据查询的效率。
Description
技术领域
本发明实施例涉及数据仓库查询优化技术,尤其涉及一种批量数据查询方法和装置。
背景技术
目前代表性的大数据查询系统(如:Hive,Shark,Impala)均以单条查询语句作为解析和优化的基本单位,其基本查询处理流程如下:首先,将读入的单条查询语句解析成树状结构的逻辑查询计划树,然后,通过对逻辑查询计划树的每一个算子选择实现算法,并确定这些算子的执行顺序,从而将逻辑查询计划树转换为物理查询计划,最后,查询执行引擎执行该物理查询计划,并输出查询结果。
大数据查询系统的一个关键性能是查询效率,目前常用的提高大数据查询系统查询效率的方法主要是通过对逻辑查询计划树进行等价变换,以减少物理查询计划中的任务数量、降低任务的执行开销(包括:降低对文件系统的读写频率、控制网络传输的数据量以及查询操作的计算量等)。然而,在数据仓库(Data Warehouse)的批量查询场景下,传统的以单条查询语句为解析和优化基本单位的处理模式存在优化机会不足的问题。例如:Hive0.12版本新增的任务流关联性优化只能为标准测试集TPC-H共计22个查询用例中的3个用例带来加速,且对用例的书写方式有特定的要求。
与查询内优化机会不足构成强烈对比的是数据仓库批量查询应用场景中所呈现出的丰富的查询间优化机会,查询间优化机会即多条查询语句之间存在的优化机会,在批量查询应用场景下,查询语句之间存在雷同的概率较高,因此,存在大量的查询优化机会,但是,现有技术中只针对单条查询语句进行查询优化,使得大数据查询的查询效率低下。
发明内容
本发明实施例提供一种批量数据查询方法和装置,以提高批量数据查询效率。
本发明第一方面提供一种批量数据查询方法,包括:
获取多条查询语句对应的多棵逻辑查询计划树,其中,每条查询语句对应一棵逻辑查询计划树,所述多棵逻辑查询计划树中的每棵逻辑查询计划树包括多个操作符,所述每棵逻辑查询计划树的每个操作符包括至少一个操作数;
根据所述每棵逻辑查询计划树的各操作符将所述多棵逻辑查询计划树划分为多个查询组,其中,每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系;
对所述每个查询组内的各逻辑查询计划树进行查询间优化;
根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树;
根据所述多棵物理查询计划树执行物理查询,得到所述多条查询语句的查询结果。
结合本发明第一方面,在本发明第一方面的第一种可能的实现方式中,所述根据所述每棵逻辑查询计划树的各操作符将所述多棵逻辑查询计划树划分为多个查询组,包括:
根据所述每棵逻辑查询计划树的各操作符和所述每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述每棵逻辑查询计划树的查询间写读依赖关系,将所有具有查询间写读依赖关系的逻辑查询计划树划分到第一分组中,将所有不具有查询间写读依赖关系的逻辑查询计划树划分到第二分组中;
根据所述第一分组中的每棵逻辑查询计划树的查询间写读依赖关系将所述第一分组中的逻辑查询计划树划分为至少一个查询组;
统计所述第二分组中的每棵逻辑查询计划树的各类操作符的数量,根据所述每棵逻辑查询计划树的各类操作符的数量,确定所述每棵逻辑查询计划树的操作符重叠度,将所述第二分组中具有操作符重叠关系的逻辑查询计划树划分到第一子分组中,将所述第二分组中除所述第一子分组中的逻辑查询计划树之外的其他逻辑查询计划树划分到第二子分组中;
根据所述第一子分组中每棵逻辑查询计划树的操作符重叠度将所述第一子分组中逻辑查询计划树划分为至少一个查询组;
根据所述第二子分组中的每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述第二子分组中的每棵逻辑查询计划的操作数重叠度,根据所述第二子分组中的每棵逻辑查询计划的操作数重叠度,将所述第二子分组中的逻辑查询计划树划分为至少一个查询组。
结合本发明第一方面的第一种可能的实现方式,在本发明第一方面的第二种可能的实现方式中,所述根据每棵逻辑查询计划树的各操作符和所述每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述每棵逻辑查询计划树的查询间写读依赖关系,包括:
分别判断所述每棵逻辑查询计划树的文件定值操作符所定值的各操作数的数据标识,是否与所述多棵逻辑查询计划树中的其他逻辑查询计划树的扫描操作符的各操作数的数据标识相同;
若相同,则确定包含所述文件定值操作符和所述扫描操作符的逻辑查询计划树具有查询间写读依赖关系。
结合本发明第一方面的第一种和第二种可能的实现方式,在本发明第一方面的第三种可能的实现方式中,所述根据所述每棵逻辑查询计划树的各类操作符的数量,确定所述每棵逻辑查询计划树的操作符重叠度,包括:
将所述第二分组中的每棵逻辑查询计划树的各类操作符的数量分别与所述第二分组中的其他逻辑查询计划树的各类操作符的数量进行比较,若所述第二分组中的两棵逻辑查询计划树的各类操作符的数量均相同,则将所述各类操作符的数量的总和分别作为所述两棵逻辑查询计划树在一次比较过程中的操作符重叠度,其中,所述一次比较过程包括所述第二分组中的一棵逻辑查询计划树与其他任意一棵逻辑查询计划树的比较过程。
结合本发明第一方面以及本发明第一方面的第一种至第三种可能的实现方式,在本发明第一方面的第四种可能的实现方式中,所述对所述每个查询组内的逻辑查询计划树进行查询间优化以生成查询间优化后的多棵逻辑查询计划树,包括:
判断所述每个查询组内的第一查询子树和第二查询子树的树结构是否相同,其中,所述第一查询子树和所述第二查询子树属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一查询子树和所述第二查询子树的树结构相同,判断所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识是否相同;
若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之前,则将所述第二查询子树的后继连接到所述第一查询子树上,所述第二查询子树作为所述第一查询子树的新增后继,以使所述第二查询子树的后继复用所述第一查询子树的查询结果;
或者,若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之后,则将所述第一查询子树的后继连接到所述第二查询子树上,所述第一查询子树的后继作为所述第二查询子树的新增后继,以使所述第一查询子树的后继复用所述第二查询子树的查询结果。
结合本发明第一方面以及本发明第一方面的第一种至第三种可能的实现方式,在本发明第一方面的第五种可能的实现方式中,所述对所述每个查询组内的逻辑查询计划树进行查询间优化,包括:
判断所述每个查询组内的一对文件定值操作符和扫描操作符对应的操作数的数据标识是否相同,其中,所述扫描操作符和所述文件定值操作符属于同一个查询组内的两棵不同的逻辑查询计划树;
若所述文件定值操作符和所述扫描操作符对应的操作数的数据标识相同,则确定所述文件定值操作符和所述扫描操作符所属的逻辑查询计划树具有写读依赖关系,将所述文件定值操作符的前驱与所述扫描操作符的后继直接连接,并删除所述扫描操作符。
结合本发明第一方面以及本发明第一方面的第一种至第三种可能的实现方式,在本发明第一方面的第六种可能的实现方式中,所述对所述每个查询组内的逻辑查询计划树进行查询间优化,包括:
判断所述每个查询组内的第一操作符和第二操作符的操作数的数据标识是否相同,其中,所述第一操作符和所述第二操作符属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一操作符和所述第二操作符的操作数的数据标识相同,则为所述第一操作符和所述第二操作符添加合并标识,所述合并标识用于在生成物理查询计划树时将所述第一操作符和所述第二操作符进行合并。
结合本发明第一方面以及本发明第一方面的第一种至第六种可能的实现方式,在本发明第一方面的第七种可能的实现方式中,所述根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树之前,所述方法还包括:
创建一个虚拟操作节点,以所述虚拟操作节点为根节点,将查询间优化后的多棵逻辑查询计划树的根节点作为所述虚拟操作节点的前驱,生成一棵虚拟逻辑查询计划树;
对所述虚拟逻辑查询计划树进行查询内优化,生成查询内优化后的虚拟逻辑查询计划树;
删除所述查询内优化后的虚拟逻辑查询计划树的所述虚拟操作节点,得到所述优化后的多棵逻辑查询计划树。
本发明第二方面提供一种批量数据查询装置,包括:
获取模块,用于获取多条查询语句对应的多棵逻辑查询计划树,其中,每条查询语句对应一棵逻辑查询计划树,所述多棵逻辑查询计划树中的每棵逻辑查询计划树包括多个操作符,所述每棵逻辑查询计划树的每个操作符包括至少一个操作数;
分组模块,用于根据所述每棵逻辑查询计划树的各操作符将所述多棵逻辑查询计划树划分为多个查询组,其中,每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系;
优化模块,用于对所述每个查询组内的各逻辑查询计划树进行查询间优化;
生成模块,用于根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树;
查询模块,用于根据所述多棵物理查询计划树执行物理查询,得到所述多条查询语句的查询结果。
结合本发明第二方面,在本发明第二方面的第一种可能的实现方式中,所述分组模块包括:
第一分组单元,用于根据所述每棵逻辑查询计划树的各操作符和所述每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述每棵逻辑查询计划树的查询间写读依赖关系,将所有具有查询间写读依赖关系的逻辑查询计划树划分到第一分组中,将所有不具有查询间写读依赖关系的逻辑查询计划树划分到第二分组中;
所述第一分组单元,还用于根据所述第一分组中的每棵逻辑查询计划树的查询间写读依赖关系将所述第一分组中的逻辑查询计划树划分为至少一个查询组;
第二分组单元,用于统计所述第二分组中的每棵逻辑查询计划树的各类操作符的数量,根据所述每棵逻辑查询计划树的各类操作符的数量,确定所述每棵逻辑查询计划树的操作符重叠度,将所述第二分组中具有操作符重叠关系的逻辑查询计划树划分到第一子分组中,将所述第二分组中除所述第一子分组中的逻辑查询计划树之外的其他逻辑查询计划树划分到第二子分组中;
所述第二分组单元,还用于根据所述第一子分组中每棵逻辑查询计划树的操作符重叠度将所述第一子分组中逻辑查询计划树划分为至少一个查询组;
第三分组单元,用于根据所述第二子分组中的每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述第二子分组中的每棵逻辑查询计划的操作数重叠度,根据所述第二子分组中的每棵逻辑查询计划的操作数重叠度,将所述第二子分组中的逻辑查询计划树划分为至少一个查询组。
结合本发明第二方面的第一种可能的实现方式,在本发明第二方面的第二种可能的实现方式中,所述第一分组单元具体用于:
分别判断所述每棵逻辑查询计划树的文件定值操作符所定值的各操作数的数据标识,是否与所述多棵逻辑查询计划树中的其他逻辑查询计划树的扫描操作符的各操作数的数据标识相同;
若相同,则确定包含所述文件定值操作符和所述扫描操作符的逻辑查询计划树具有查询间写读依赖关系。
结合本发明第二方面的第一种和第二种可能的实现方式,在本发明第二方面的第三种可能的实现方式中,所述第二分组单元具体用于:
将所述第二分组中的每棵逻辑查询计划树的各类操作符的数量分别与所述第二分组中的其他逻辑查询计划树的各类操作符的数量进行比较,若所述第二分组中的两棵逻辑查询计划树的各类操作符的数量均相同,则将所述各类操作符的数量的总和分别作为所述两棵逻辑查询计划树在一次比较过程中的操作符重叠度,其中,所述一次比较过程包括所述第二分组中的一棵逻辑查询计划树与其他任意一棵逻辑查询计划树的比较过程。
结合本发明第二方面以及第二方面的第一种至第三种可能的实现方式,在本发明第二方面的第四种可能的实现方式中,所述优化模块具体用于:
判断所述每个查询组内的第一查询子树和第二查询子树的树结构是否相同,其中,所述第一查询子树和所述第二查询子树属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一查询子树和所述第二查询子树的树结构相同,判断所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识是否相同;
若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之前,则将所述第二查询子树的后继连接到所述第一查询子树上,所述第二查询子树作为所述第一查询子树的新增后继,以使所述第二查询子树的后继复用所述第一查询子树的查询结果;
或者,若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之后,则将所述第一查询子树的后继连接到所述第二查询子树上,所述第一查询子树的后继作为所述第二查询子树的新增后继,以使所述第一查询子树的后继复用所述第二查询子树的查询结果。
结合本发明第二方面以及第二方面的第一种至第三种可能的实现方式,在本发明第二方面的第五种可能的实现方式中,所述优化模块具体用于:
判断所述每个查询组内的一对文件定值操作符和扫描操作符对应的操作数的数据标识是否相同,其中,所述扫描操作符和所述文件定值操作符属于同一个查询组内的两棵不同的逻辑查询计划树;
若所述文件定值操作符和所述扫描操作符对应的操作数的数据标识相同,则确定所述文件定值操作符和所述扫描操作符所属的逻辑查询计划树具有写读依赖关系,将所述文件定值操作符的前驱与所述扫描操作符的后继直接连接,并删除所述扫描操作符。
结合本发明第二方面以及第二方面的第一种至第三种可能的实现方式,在本发明第二方面的第六种可能的实现方式中,所述优化模块具体用于:
判断所述每个查询组内的第一操作符和第二操作符的操作数的数据标识是否相同,其中,所述第一操作符和所述第二操作符属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一操作符和所述第二操作符的操作数的数据标识相同,则为所述第一操作符和所述第二操作符添加合并标识,所述合并标识用于在生成物理查询计划树时将所述第一操作符和所述第二操作符进行合并。
结合本发明第二方面以及第二方面的第一种至第六种可能的实现方式,在本发明第二方面的第七种可能的实现方式中,所述优化模块还用于:
创建一个虚拟操作节点,以所述虚拟操作节点为根节点,将查询间优化后的多棵逻辑查询计划树的根节点作为所述虚拟操作节点的前驱,生成一棵虚拟逻辑查询计划树;
对所述虚拟逻辑查询计划树进行查询内优化,生成查询内优化后的虚拟逻辑查询计划树;
删除所述查询内优化后的虚拟逻辑查询计划树的所述虚拟操作节点,得到所述优化后的多棵逻辑查询计划树。
本发明实施例的批量数据查询方法和装置,通过获取多条查询语句对应的多棵逻辑查询计划树,根据每棵逻辑查询计划树的各操作符将多棵逻辑查询计划树划分为多个查询组,对每个查询组内的逻辑查询计划树进行查询间优化以生成查询间优化后的多棵逻辑查询计划树,划分后的每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系,然后,对每个查询组内的各逻辑查询计划树进行查询间优化,根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树,最后,根据多棵物理查询计划树执行物理查询,得到多条查询语句的查询结果。上述方法通过对多棵逻辑查询计划树进行分组,可以提高查询组内的逻辑查询计划树之间的优化机会,进一步通过对查询组内的逻辑查询计划树进行查询间优化,提高了批量数据查询的查询效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍。
图1为本发明实施例一提供的批量数据查询方法的流程图;
图2为本发明实施例二提供的批量数据查询方法的流程图;
图3为本发明实施例三提供的批量数据查询方法的流程图;
图4为本发明实施例四提供的批量数据查询装置的结构示意图;
图5为本发明实施例五提供的批量数据查询装置的结构示意图;
图6为本发明实施例六提供的批量数据查询装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
本发明各实施例的方法主要应用在批量数据查询的场景下,例如可以应用在数据仓库中,在数据仓库中存在大量的批量数据查询机会,数据仓库中存在大量的数据,这些数据通常存储在分布式文件系统中。
图1为本发明实施例一提供的批量数据查询方法的流程图,本实施例提供的方法本实施例可以由批量数据查询装置执行,批量数据查询装置具体为数据库服务器,如图1所示,本实施例的方法可以包括以下步骤:
步骤101、获取多条查询语句对应的多棵逻辑查询计划树,其中,每条查询语句对应一棵逻辑查询计划树,该多棵逻辑查询计划树中的每棵逻辑查询计划树包括多个操作符,该每棵逻辑查询计划树的每个操作符包括至少一个操作数。
客户端发送的每条查询语句在服务器端会被解析成一个树状结构的逻辑查询计划树,逻辑查询计划树包括多个节点,每个节点对应一个操作符,每个操作符引用一个或多个操作数。常用的操作符包括:扫描操作符(Scan Operator)、排序操作符(SortOperator)、选择操作符(Select Operator)、聚集操作符(Aggregate Operator)、乘积操作符(Product Operator)、连接操作符(Join Operator)和文件定值操作符(FilesinkOperator)等。
步骤102、根据每棵逻辑查询计划树的各操作符将该多棵逻辑查询计划数划分为多个查询组,其中,每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系。
本实施例中,若来自一棵逻辑查询计划树的文件定值操作符所定值的操作数的数据标识与来自另一棵逻辑查询计划树的扫描操作符的某个操作数的数据标识相同,那么这两棵逻辑查询计划树具有写读依赖关系。若两棵逻辑查询计划数的全部操作符均相同,那么这两棵逻辑查询计划树具有操作符重叠关系。若两棵逻辑查询计划树的全部或部分操作数的数据标识相同,那么这两棵逻辑查询计划树具有操作数重叠关系。具有操作符重叠关系的两棵逻辑查询计划树具有的相同操作符的个数称为操作数重叠度,具有操作数重叠关系的两棵逻辑查询计划树的具有的相同数据标识的个数称为操作数重叠度。
本实施例的方法是基于查询间流分析的结果,通过流分析会为多棵逻辑查询计划树中的每棵逻辑查询计划树的各操作符的各操作数添加数据标识,使得在多多棵逻辑查询计划树进行优化时,根据每棵逻辑查询计划树的各操作符和各操作符的操作数的数据标识,确定每棵逻辑查询计划树之间的写读依赖关系、操作符重叠关系和操作数重叠关系,然后,根据每棵逻辑查询计划树的写读依赖关系、操使得分组后的每个查询组的逻辑查询计划树之间具有作符重叠关系和操作数重叠关系中的任意一个或其组合对多棵逻辑查询计划树进行分组,下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系。可选地,该数据标识具体可以为操作数的版本号。
本实施例中,通过对多棵逻辑查询计划树进行分组,可以增加分组后每个查询组内的逻辑查询计划树之间的优化机会,为下一步对每个查询组内的逻辑查询计划树进行查询间优化提供方便。例如,根据查询间写读依赖关系分组,可以将具有查询间写读依赖关系的逻辑查询计划树分到一个查询组内,然后,根据查询间写读依赖关系对逻辑查询计划树进行查询间优化,避免频繁的对分布式文件系统进行读写。或者,根据操作符重叠关系分组,可以将具有公共查询子树的逻辑查询计划树划分到一个查询组内,然后在进行查询间优化时可以将公共查询子树的结果进行复用。或者,根据操作数重叠关系进行分组,可以将操作数重叠度高的逻辑查询计划树分到一组,在进行查询间优化时,将具有相同数据标识的操作符合并到一个任务,减少对同一数据的访问或操作开销。
另外,通过分组使得每个组内的逻辑查询计划树的数目较少,能够减少查询间优化的代价和复杂度,从而在提高批量查询效率的同时,降低了逻辑查询计划的优化代价。
步骤103、对每个查询组内的逻辑查询计划树进行查询间优化。
查询间优化是针对一个查询组内的多棵逻辑查询计划树整体进行优化,也就是优化机会存在逻辑查询计划树之间,而不是针对单棵逻辑查询计划树进行优化,在进行查询间优化时主要存在以下三种优化机会:
第一种优化机会:公共查询子树(Common Query Subtree),也称公共子查询,该优化机会针对的是具有操作符重叠关系的逻辑查询计划树,若查询组内的一棵逻辑查询计划树的第一查询子树与另一棵逻辑查询计划树的第二查询子树的树结构相同,并且第一查询子树的每个操作符的操作数的数据标识与第二查询子树的每个操作符的操作数的数据标识均相同。当第一查询子树的执行顺序在第二查询子树之前时,则称第一查询子树为公共查询子树,第二查询子树为第一查询子树的一个副本,当第一查询子树的执行顺序在第二查询子树之后时,则称第二查询子树为公共查询子树,第一查询子树为第二查询子树的一个副本。
由于第一查询子树和第二查询子树的树结构相同,并且第一查询子树和第二查询子树的所有操作数均相同,可知,第一查询子树和第二查询子树的查询结果相同,因此,对这一情景的优化机会为:对该第一查询子树的查询结果和该第二查询子树的查询结果进行复用。
在进行查询间优化时,先要识别出该公共查询子树的优化机会,具体地:判断每个查询组内的第一查询子树和第二查询子树的树结构是否相同,其中,该第一查询子树和该第二查询子树属于同一个查询组的两棵不同的逻辑查询计划树;若该第一查询子树和该第二查询子树的树结构相同,进一步判断该第一查询子树的操作符的操作数的数据标识与该第二查询子树的操作符的操作数的数据标识是否相同,若该第一查询子树的操作符的操作数的数据标识与该第二查询子树的操作符的操作数的数据标识相同,则确定该第一查询子树和该第二查询子树为公共查询子树,识别出该公共查询子树的优化机会。
在识别出该公共查询子树的优化机会后,则对该第一查询子树和该第二查询子树进行优化,具体地:若该第一查询子树的执行顺序在该第二查询子树之前,则将该第二查询子树的后继连接到该第一查询子树上,该第二查询子树的后继作为该第一查询子树的新增后继,删除第一查询子树,以使该第二查询子树的后继复用该第一查询子树的查询结果。或者,若该第一查询子树的执行顺序在该第二查询子树之后,则将该第一查询子树的后继连接到该第二查询子树上,该第一查询子树的后继作为该第二查询子树的新增后继,删除第二查询子树,以使该第一查询子树的后继复用该第二查询子树的查询结果。
通过对公共查询子树的优化机会进行优化,避免重复的对同一查询结果反复的进行查询,降低了数据库查询的开销,提高了数据库查询的效率。
第二种优化机会:查询内联(Query inlining),查询内联针对的是具有查询间写读依赖关系的两棵逻辑查询计划树的优化机会,在分布式存储系统中,当写入数据较大时,文件定值操作符和扫描操作符占用的开销大,为了降低文件定值操作符和扫描操作符的开销,本实施例中,对具有查询间写读依赖关系的两棵逻辑查询计划树进行优化。
先要识别出该查询内联机会,具体地,判断每个查询组内的一对文件定值操作符和扫描操作符对应的操作数的数据标识是否相同,其中,该扫描操作符和该文件定值操作符属于同一个查询组内的两棵不同的逻辑查询计划树;若该文件定值操作符和该扫描操作符对应的操作数的数据标识相同,则确定该文件定值操作符和该扫描操作符所属的逻辑查询计划树具有查询间写读依赖关系。在识别出该查询内联机会之后,对查询内联机会进行以下优化:将该文件定值操作符的前驱与该扫描操作符的后继直接连接,并删除该扫描操作符。
例如,对于一对存在查询间写读依赖关系的操作符<OPw,OPr>,OPw表示文件定值操作符,OPr表示扫描操作符,OPw和OPr分别属于两棵逻辑查询计划树,在不进行查询间优化时,OPw的前驱在执行完后,OPw将OPw的前驱的输出结果写入分布式文件系统,后续,在执行OPr时,需要从分布式文件系统中再将OPw的前驱的输出结果读出来,然后OPr的后继对读取的OPw的前驱的输出结果进行处理,对分布式文件系统读写数据需要花费大量的时间,从而降低了数据的查询效率。本实施例中,为了降低对分布式文件系统的读写开销,为OPw的前驱和OPr的后继建立新的前驱-后继关系,即将OPr的后继与OPw的前驱直接连接,将OPr的后继作为了OPw的前驱的后继,这样,OPw的前驱在执行完后,直接将OPw的前驱的输出结果作为OPr的后继的输入进行处理,不需要先将OPw的前驱的输出结果写入分布式文件系统然后再读出来,从而降低了对分布式文件系统的读写开销,提高了查询效率。
在进行查询内联优化时,将OPw的前驱与OPr的后继直接连接,删除OPr,从而将OPw所属的逻辑查询计划树与OPr所属的逻辑查询计划树合并为一棵逻辑查询计划树。合并后的逻辑查询计划树可能会引入新的查询内优化,查询内优化是针对单棵逻辑查询计划树的优化,典型的如任务流关联性优化(Job-flow Correlation Optimization)机会,在引入新的查询内优化后,可以对合并后的逻辑查询计划树进行查询内优化。
第三种优化机会:关联子查询(Correlation Query Subtree),该优化机会针对的是具有操作数重叠关系的逻辑查询计划树,若查询组内存在两个操作符:第一操作符和第二操作符,其中,第一操作符和第二操作符属于同一个查询组内的两棵不同的逻辑查询计划树,且第一操作符和第二操作符的操作数存在重叠,即第一操作符的操作数和第二操作符的操作数的数据标识部分或全部相同,则称第一操作符和第二操作符互为关联子查询。
先要识别出该关联子查询优化机会,具体地,判断每个查询组内的第一操作符和第二操作符的操作数的数据标识是否相同,其中,该第一操作符和该第二操作符属于同一个查询组的两棵不同的逻辑查询计划树;若该第一操作符和该第二操作符的操作数的数据标识相同,则确定该第一操作符和该第二操作符具有关联子查询优化机会。
在识别出该关联子查询优化机会后,对该关联子查询优化机会进行优化:为该第一操作符和该第二操作符添加合并标识,以使在生成物理查询树时将该第一操作符和该第二操作符合并为同一个任务,以减少对重叠数据的扫描操作开销。
在为该第一操作符和该第二操作符添加合并标识时,具体可以通过以下两种方式:一种方式中,直接为第一操作符和第二操作符添加相同的标识信息,在生成物理查询计划时,若两个操作符的标识信息相同,则将这两个操作符合并到同一个任务。另一种方式中,为第一操作符和第二操作符添加公共的后继,将第一操作符和第二操作符的原有后继作为该公共的后继的后继,将该公共的后继作为合并标识,在生成物理查询计划时,若两个操作符的具有公共的后继,则将这两个操作符合并到同一个任务,该公共的后继可以为一个新的操作符类型,以区别现有的操作符,该公共的后继并不具有实际的操作功能,仅记录第一操作符与其原有后继,以及第二操作符与其原有后继之际的对应关系。
步骤104、根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树。
在对查询组内的各逻辑查询计划树进行查询间优化之后,得到查询间优化后的多棵逻辑查询计划树,然后,根据查询间优化后的多棵逻辑查询计划树生成多棵物理查询计划,根据逻辑查询计划树生成对应的物理查询计划为现有技术,这里不做过多的描述。
步骤105、根据多棵物理查询计划树执行物理查询,得到多条查询语句的查询结果。
本实施例,通过获取多条查询语句的多棵逻辑查询计划树,并根据每棵逻辑查询计划树的各操作符将该多棵逻辑查询计划树划分为多个查询组,划分后的每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系。然后,对每个查询组内的逻辑查询计划树进行查询间优化,根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树。最后,根据多棵物理查询计划树执行物理查询,得到多条查询语句的查询结果。上述方法通过对多棵逻辑查询计划树进行分组,可以提高查询组内的逻辑查询计划树之间的优化机会,通过对查询组内的逻辑查询计划树进行查询间优化,提高了批量数据查询的查询效率。
图2为本发明实施例二提供的批量数据查询方法的流程图,本实施例中主要对实施例一中步骤102进行详细说明,如图2所示,本实施例的方法可以包括以下步骤:
步骤201、获取多条查询语句对应的多棵逻辑查询计划树,其中,每条查询语句对应一棵逻辑查询计划树,该多棵逻辑查询计划树中的每棵逻辑查询计划树包括多个操作符,该每棵逻辑查询计划树的每个操作符包括至少一个操作数,每个操作数具有数据标识,相同操作数的数据标识相同。
本步骤的具体实现方式可参照实施例一的相关描述,这里不再赘述。
步骤202、根据每棵逻辑查询计划树的各操作符和每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定每棵逻辑查询计划树的查询间写读依赖关系,将所有具有查询间写读依赖关系的逻辑查询计划树划分到第一分组中,将所有不具有查询间写读依赖关系的逻辑查询计划树划分到第二分组中,根据第一分组中的每棵逻辑查询计划树的查询间写读依赖关系将第一分组中的逻辑查询计划树划分为至少一个查询组。
一种实现方式中,若流分析结果中包含了各操作数的数据标识,那么先识别出每棵逻辑查询计划树中的文件定值操作符,然后,分别判断每棵逻辑查询计划树的文件定值操作符所定值的各操作数的数据标识,是否与多棵逻辑查询计划树中的其他逻辑查询计划树的扫描操作符的各操作数的数据标识相同,若相同,则确定包含该文件定值操作符和该扫描操作符的逻辑查询计划树具有查询间写读依赖关系。
另一种方式中,若流分析结果中包含了来自不同逻辑查询计划树的操作符之间的查询间写读依赖关系,那么每对存在查询间写读依赖关系的操作符所属的逻辑查询计划树之间也存在查询间写读依赖关系。
本实施例中,可以对多棵逻辑查询计划树进行编号,按照编号顺序依次确定每棵逻辑查询计划树的查询间写读依赖关系。例如,有10棵逻辑查询计划树,编号依次为1-10,那么先确定第1棵逻辑查询计划树的查询间写读依赖关系,首先确定第1棵逻辑查询计划树中的文件定值操作符的目的路径是否为空,若第1棵逻辑查询计划树中有一个文件定值操作符的目的路径非空,其次,判断第1棵逻辑查询计划树的文件定值操作符所定值的操作数的数据标识是否与第2棵逻辑查询计划树的扫描操作符的所有操作数中至少一个的数据标识相同,若第1棵逻辑查询计划树的文件定值操作符所定值的操作数的数据标识与第2棵逻辑查询计划树的扫描操作符的所有操作数中至少一个的数据标识相同,则确定第1棵逻辑查询计划树和第2棵逻辑查询计划树具有查询间写读依赖关系,然后,依次判断第一棵逻辑查询计划树与剩余的8棵逻辑查询计划树之间是否具有查询间写读依赖关系。在第1棵逻辑查询计划树的查询间写读依赖关系确定完之后,确定第2棵逻辑查询计划树的查询间写读依赖关系,按照上述的方法依次确定每棵逻辑查询计划树的查询间写读依赖关系。另外,当某一棵逻辑查询计划树中没有文件定值操作符时,跳过该逻辑查询计划树,判断下一棵逻辑查询计划树的查询间写读依赖关系。
每棵逻辑查询计划树中也可能包括多个文件定值操作符,因此,每棵逻辑查询计划树可能与多棵逻辑查询计划树具有查询间写读依赖关系。在确定每棵逻辑查询计划树的查询间写读依赖关系后,将多棵逻辑查询计划中所有具有查询间写读依赖关系的逻辑查询计划树划分到第一分组,将不具有查询间写读依赖关系的逻辑查询计划树划分到第二分组内,然后,根据查询间写读依赖关系对第一分组内的逻辑查询计划树进行分组。在具体分组时,假设第1棵逻辑查询计划树与第2棵逻辑查询计划树和第6棵逻辑查询计划树都具有查询间写读依赖关系,并且第6棵逻辑查询计划树与第4棵逻辑查询计划树也具有查询间写读依赖关系,那么在分组时,可以将第1棵逻辑查询计划树与第2棵逻辑查询计划树划分到一个查询组,将第6棵逻辑查询计划树与第4棵逻辑查询计划树划分到一个查询组,也可以将第1棵逻辑查询计划树、第2棵逻辑查询计划树、第6棵逻辑查询计划树和第4棵逻辑查询计划树划分到一个查询组,本发明实施例并不对具体的分组方式进行限制。
通过本步骤,将具有查询间写读依赖关系的逻辑查询计划树分到一个查询组内,从而提高了查询组内的优化机会。
步骤203、统计第二分组中的每棵逻辑查询计划树的各类操作符的数量,根据每棵逻辑查询计划树的各类操作符的数量,确定每棵逻辑查询计划树的操作符重叠度,将第二分组中具有操作符重叠关系的逻辑查询计划树划分到第一子分组中,将第二分组中除第一子分组中的逻辑查询计划树之外的其他逻辑查询计划树划分到第二子分组中,根据第一子分组中每棵逻辑查询计划树的操作符重叠度将第一子分组中逻辑查询计划树划分为至少一个查询组。
其中,操作符有多种类型,例如连接操作符、聚合操作符、扫描操作符等,统计第二分组中的每棵逻辑查询计划树的各类操作符的数量,本实施例中,具体为统计第二分组中的每棵逻辑查询计划树的连接操作符、聚合操作符、扫描操作符等分别出现的次数。根据每棵逻辑查询计划树的各类操作符的数量,确定每棵逻辑查询计划树的操作符重叠度,具体为:将第二分组中的每棵逻辑查询计划树的各类操作符的数量分别与第二分组中的其他逻辑查询计划树的各类操作符的数量进行比较,若第二分组中的两棵逻辑查询计划树的各类操作符的数量均相同,则将各类操作符的数量的总和分别作为所述两棵逻辑查询计划树在一次比较过程中的操作符重叠度,其中,一次比较过程包括第二分组中的一棵逻辑查询计划树与其他任意一棵逻辑查询计划树的比较过程。若第二分组中的两棵逻辑查询计划树的各类操作符的数量中有一类操作符数量不相同,那么这两棵逻辑查询计划树的在本次比较过程中的操作符重叠度为0。
仍以步骤202中的例子为例,第二分组中包括6棵逻辑查询计划树:第3棵、第5棵、第7棵、第8棵、第9棵和第10棵逻辑查询计划树。先统计这6棵逻辑查询计划树的各类操作符的数量,假设只统计连接操作符、聚合操作符、扫描操作符这三类操作符的数量,然后,分别将第3棵逻辑查询计划树的各类操作符的数量与其他5棵逻辑查询计划树的各类操作符的数量相同,假设,第3棵逻辑查询计划树的连接操作符的数量为3,聚合操作符的数量为5,扫描操作符的数量为6,第3棵逻辑查询计划树的各类操作符的数量与第8棵逻辑查询计划树的各类操作符的数量相同,第3棵逻辑查询计划树的各类操作符的数量与其他4棵逻辑查询计划树的各类操作符的数量不相同,那么确定第3棵逻辑查询计划树与第6棵逻辑查询计划树的操作符重叠度为3+5+6=11,第3棵逻辑查询计划树与其他4棵逻辑查询计划树的操作符重叠度为0。然后,依次确定剩余5棵逻辑查询计划树在每一次比较过程的操作数重叠度。假设,第二分组中只有第3棵逻辑查询计划树的各类操作符的数量与第8棵逻辑查询计划树的各类操作符的数量相同,那么将第3棵逻辑查询计划树与第8棵逻辑查询计划树划分到第一子分组中,并将第3棵逻辑查询计划树与第8棵逻辑查询计划树划分到同一个查询组内。
当第一子分组中有多棵逻辑查询计划树时,按照各逻辑查询计划树的操作符重叠度划分查询组,将操作符重叠度相同的逻辑查询计划树划分到一组,例如,第一子分组中有4棵逻辑查询计划树,其中第1棵和第2棵逻辑查询计划树的各类操作符的数量均相同,操作符重叠度为11,第3棵和第4棵逻辑查询计划树的各类操作符的数量均相同,操作符重叠度为13,那么将第1棵和第2棵逻辑查询计划树划分到一个查询组内,第3棵和第4棵划分到另一个查询组内。若上述4棵逻辑查询计划树的各类操作符的数量均相同,并且操作符重叠度都相同,那么可以将这4棵逻辑查询计划树划分到一个查询组内。两外一种情况,虽然4棵逻辑查询计划树的操作符重叠度相同,但是第1棵和第2棵逻辑查询计划树的各类操作符的数量,与第3棵和第4棵逻辑查询计划树的各类操作符的数量不完全相同,例如,第1棵和第2棵逻辑查询计划树的连接操作符数量为2,扫描操作符数量为5,聚合操作符数量为4,第3棵和第4棵逻辑查询计划树的连接操作符数量为4,扫描操作符数量为5,聚合操作符数量为2,因此,不能将4棵逻辑查询计划树划分到一个查询组内,需要将第1棵和第2棵逻辑查询计划树划分到一个查询组,第3棵和第4棵逻辑查询计划树划分到另一个查询组内。
步骤204、根据第二子分组中的每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定第二子分组中的每棵逻辑查询计划的操作数重叠度,根据第二子分组中的每棵逻辑查询计划的操作数重叠度,将第二子分组中的逻辑查询计划树划分为至少一个查询组。
一种实现方式中,可以根据第二子分组中的每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定第二子分组中的每棵逻辑查询计划的操作数重叠度,具体为:将第二子分组中的每棵逻辑查询计划树的各操作符的各操作数的数据标识,分别与第二子分组中的其他逻辑查询计划树的各操作符的各操作数的数据标识进行比较,以获得第二子分组中的每棵逻辑查询计划树在每一次比较过程中的操作数重叠度,其中,每一次比较过程包括第二子分组中的一棵逻辑查询计划树与所述第二子分组中其他任意一棵逻辑查询计划树比较的过程。
仍以上述例子为例,在根据逻辑查询计划树的查询间写读依赖关系和操作符重叠关系进行划分后,对于剩余的第二子分组中的逻辑查询计划树:第5棵、第7棵、第9棵和第10棵逻辑查询计划树,先将第5棵逻辑查询计划树的各操作符的各操作数的数据标识与第7棵逻辑查询计划树的操作符的操作数进行比较,假设第5棵逻辑查询计划树共有6种数据标识,第7棵逻辑查询计划树共有5种数据标识,第5棵逻辑查询计划树有3种数据标识与第7棵逻辑查询计划树的数据标识相同,则确定第5棵逻辑查询计划树与第7棵逻辑查询计划树的操作数重叠度为3,然后,依次确定第5棵逻辑查询计划树与第9棵逻辑查询计划树和第10棵逻辑查询计划树的操作数重叠度,在确定第7棵逻辑查询计划树与其他3棵逻辑查询计划树的操作数重叠度,由于已经确定过第5棵逻辑查询计划树与第7棵逻辑查询计划树的操作数重叠度,因此,在确定第7棵逻辑查询计划树的重叠度时,不需要确定第7棵逻辑查询计划树与第5棵逻辑查询计划树的操作数重叠度,只需要确定第7棵逻辑查询计划树与第9棵逻辑查询计划树和第10棵逻辑查询计划树的操作数重叠度,最后在确定第9棵逻辑查询计划树与第10棵逻辑查询计划树的操作数重叠度。
在确定第二子分组中的每棵逻辑查询计划树在每一次比较过程中的操作数重叠度后,根据操作数重叠度的大小进行分组,优先将重叠度最大的逻辑查询计划树划分到一组。例如,第5棵逻辑查询计划树与第7棵逻辑查询计划树的操作数重叠度最高,该最高操作数重叠度为5,那么将第5棵逻辑查询计划树与第7棵逻辑查询计划树划分到一个查询组内,若第5棵逻辑查询计划树与第9棵逻辑查询计划树的重叠度也为5,第9棵逻辑查询计划树与第10棵逻辑查询计划树的重叠度为3,那么可以将第9棵逻辑查询计划树也划分到该查询组内,该查询组内共有三棵逻辑查询计划树,由于只剩第10棵逻辑查询计划树了,可以将第10棵逻辑查询计划树单独划分到一个查询组内,也可以将第10棵逻辑查询计划树划分到该查询组内。
需说明的是,两棵逻辑查询计划树的重叠操作数的总数相同,并不表示两棵逻辑查询计划树的重叠操作数的每一个元素都相同,因此,在确定多棵逻辑查询计划树的重叠度相同后,还可以进一步判断两棵逻辑查询计划树所包含的重叠操作数的数据标识是否相同,例如,第5棵逻辑查询计划树与第7棵逻辑查询计划树的操作数重叠度为5,重叠操作数的数据标识分别为:数据标识A、B、C、D和E,第5棵逻辑查询计划树与第9棵逻辑查询计划树的操作数重叠度也为5,但是,重叠操作数的数据标识不一样,第5棵逻辑查询计划树与第9棵逻辑查询计划树的重叠数据的数据标识包括:数据标识A、B、C、E和F,第9棵逻辑查询计划树与第10棵逻辑查询计划树的操作数6的重叠度与3。因此,在分组时,可以将第5棵逻辑查询计划树与第7棵逻辑查询计划树划分到一个查询组,将第9棵逻辑查询计划树与第10棵逻辑查询计划树划分到一个查询组。
另一种实现方式中,可以根据第二子分组中的每棵逻辑查询计划树的扫描操作符的各操作数的数据标识,确定第二子分组中的每棵逻辑查询计划的操作数重叠度。具体地,将第二子分组中的每棵逻辑查询计划树的扫描操作符的各操作数的数据标识,分别与第二子分组中的其他逻辑查询计划树的扫描操作符的各操作数的数据标识进行比较,以获得第二子分组中的每棵逻辑查询计划树在每一次比较过程中的操作数重叠度,其中,每一次比较过程包括第二子分组中的一棵逻辑查询计划树与所述第二子分组中其他任意一棵逻辑查询计划树比较的过程。
步骤205、对每个查询组内的各逻辑查询计划树进行查询间优化。
本步骤的具体实现方式可以参照实施例一中的相关描述,这里不再赘述。
步骤206、根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树。
步骤207、根据该多棵物理查询计划树执行物理查询,得到该多条查询语句的查询结果。
本实施例中,先根据每棵逻辑查询计划树的查询间写读依赖关系对多棵逻辑查询计划树进行分组,将具有查询间写读依赖关系的逻辑查询计划树划分到同一个查询组内,然后,对剩余的不具有查询间写读依赖关系的逻辑查询计划树在按照操作符重叠关系进行划分,最后对根据查询间写读依赖关系和操作符重叠关系划分后剩余的逻辑查询计划树按照操作数重叠关系进行划分。通过上述方法可以提高查询组内的逻辑查询计划树之间的优化机会,进一步通过对查询组内的逻辑查询计划树进行查询间优化,提高了批量数据查询的查询效率。另外,通过分组使得每棵组内的逻辑查询计划数目较少,能够减少查询间优化的代价和复杂度,从而整体上降低了查询优化的代价。
本发明实施例二中以根据逻辑查询计划树的操作数重叠关系、操作符重叠关系和查询间写读依赖关系三个参数进行分组为例对分组方式进行了详细说明,但本发明并不对此进行限制,还可以根据上述三个参数中的任意一个参数进行划分。例如,在只根据查询间写读依赖关系进行分组时,先将具有查询间写读依赖关系的逻辑查询计划树划分到一个查询组内,将不具有查询间写读依赖关系的逻辑查询计划树划分到一个查询组内,若不具有查询间写读依赖关系的逻辑查询计划树很多时,导致分组过大,这时可以将不具有查询间写读依赖关系的逻辑查询计划树随机的划分为几个查询组。在只根据操作符重叠关系进行分组时,先将各类操作符的数量均相同的逻辑查询计划树划分到一个查询组内,将剩余的逻辑查询计划树划分到一个查询组内。当根据查询间写读依赖关系和操作符重叠关系分组时,先根据查询间写读依赖关系进行分组,对剩余的不具有查询间写读依赖关系的逻辑查询计划树,根据操作符重叠关系进行分组。当根据查询间写读依赖关系和操作数重叠关系分组时,先根据查询间写读依赖关系进行分组,对剩余的不具有查询间写读依赖关系的逻辑查询计划树,根据操作数重叠关系进行分组。根据查询间写读依赖关系、操作数重叠度或操作符重叠度分组的具体方法可参照实施例二中的相关描述,这里不再赘述。
图3为本发明实施例三提供的批量数据查询方法的流程图,本实施例和实施例一的区别在于,本实施例中,在对每个查询组进行查询间优化后,还对组间整体进行优化,如图2所示,本实施例的方法可以包括以下步骤:
步骤301、获取多条查询语句对应的多棵逻辑查询计划树,其中,每条查询语句对应一棵逻辑查询计划树。
步骤302、根据每棵逻辑查询计划树的各操作符将多棵逻辑查询计划树划分为多个查询组,其中,每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系。
步骤303、对每个查询组内的逻辑查询计划树进行查询间优化。
步骤301-303的具体实现方式可参照实施例一和实施例二的相关描述,这里不再赘述。
步骤304、创建一个虚拟操作节点,以该虚拟操作节点为根节点,将该查询间优化后的多棵逻辑查询计划树的根节点作为该虚拟操作节点的前驱,生成一棵虚拟逻辑查询计划树。
本步骤的目的是将查询间优化后的多棵逻辑查询计划树合并为一棵逻辑查询计划树,具体地,通过创建一个虚拟操作节点,并建立该虚拟操作节点与查询间优化后的每棵逻辑查询计划树的根节点的后继-前驱关系,即将该虚拟操作节点作为查询间优化后的每棵逻辑查询计划树的根节点,从而形成棵虚拟逻辑查询计划树。该虚拟操作节点代表的操作符的类型为除现有操作符类型之外一个新类型。
步骤305、对该虚拟逻辑查询计划树进行查询内优化,生成查询内优化后的虚拟逻辑查询计划树。
步骤304中通过将查询间优化后的多棵逻辑查询计划树合并为一棵虚拟逻辑查询计划树,从而能够利用现有的查询内优化技术对该虚拟逻辑查询计划树进行优化。常用的查询内优化技术包括:谓词下降(Predicate Pushdown)优化、列裁剪(Column Pruning)优化、任务流关联性优化等。可以根据优化规则或代价优化模型,决定是否对该虚拟逻辑查询计划树进行优化。
步骤306、删除查询内优化后的虚拟逻辑查询计划树的虚拟操作节点,得到优化后的多棵逻辑查询计划树。
步骤307、根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树。
步骤308、根据该多棵物理查询计划树执行物理查询,得到改多条查询语句的查询结果。
本实施例,通过将查询间优化后的多棵逻辑查询计划树的合并成一棵逻辑查询计划树,然后,对合并后的逻辑查询计划树进行查询内优化,进一步地对多棵逻辑查询计划树进行了优化,提高了批量查询的查询效率。
图4为本发明实施例四提供的批量数据查询装置的结构示意图,如图4所示,本实施例提供的装置包括:获取模块11、分组模块12、优化模块13、生成模块14和查询模块15。
其中,获取模块11,用于获取多条查询语句对应的多棵逻辑查询计划树,其中,每条查询语句对应一棵逻辑查询计划树,所述多棵逻辑查询计划树中的每棵逻辑查询计划树包括多个操作符,所述每棵逻辑查询计划树的每个操作符包括至少一个操作数;
分组模块12,用于根据所述每棵逻辑查询计划树的各操作符将所述多棵逻辑查询计划树划分为多个查询组,其中,每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系;
优化模块13,用于对所述每个查询组内的各逻辑查询计划树进行查询间优化;
生成模块14,用于根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树;
查询模块15,用于根据所述多棵物理查询计划树执行物理查询,得到所述多条查询语句的查询结果。
可选地,所述优化模块13具体用于:
判断所述每个查询组内的第一查询子树和第二查询子树的树结构是否相同,其中,所述第一查询子树和所述第二查询子树属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一查询子树和所述第二查询子树的树结构相同,判断所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识是否相同;
若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之前,则将所述第二查询子树的后继连接到所述第一查询子树上,所述第二查询子树作为所述第一查询子树的新增后继,以使所述第二查询子树的后继复用所述第一查询子树的查询结果;
或者,若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之后,则将所述第一查询子树的后继连接到所述第二查询子树上,所述第一查询子树的后继作为所述第二查询子树的新增后继,以使所述第一查询子树的后继复用所述第二查询子树的查询结果。
可选地,所述优化模块13具体用于:
判断所述每个查询组内的一对文件定值操作符和扫描操作符对应的操作数的数据标识是否相同,其中,所述扫描操作符和所述文件定值操作符属于同一个查询组内的两棵不同的逻辑查询计划树;
若所述文件定值操作符和所述扫描操作符对应的操作数的数据标识相同,则确定所述文件定值操作符和所述扫描操作符所属的逻辑查询计划树具有写读依赖关系,将所述文件定值操作符的前驱与所述扫描操作符的后继直接连接,并删除所述扫描操作符。
可选地,所述优化模块13具体用于:
判断所述每个查询组内的第一操作符和第二操作符的操作数的数据标识是否相同,其中,所述第一操作符和所述第二操作符属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一操作符和所述第二操作符的操作数的数据标识相同,则为所述第一操作符和所述第二操作符添加合并标识,所述合并标识用于在生成物理查询计划树时将所述第一操作符和所述第二操作符进行合并。
本实施例的装置,可用于执行方法实施例一的方法,具体实现方式和技术效果类似,这里不再赘述。
图5为本发明实施例五提供的批量数据查询装置的结构示意图,本实施例的装置在图4所示装置结构的基础上,进一步地,所述分组模块12包括:第一分组单元121、第二分组单元122和第三分组单元123。
其中,第一分组单元121,用于根据所述每棵逻辑查询计划树的各操作符和所述每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述每棵逻辑查询计划树的查询间写读依赖关系,将所有具有查询间写读依赖关系的逻辑查询计划树划分到第一分组中,将所有不具有查询间写读依赖关系的逻辑查询计划树划分到第二分组中;
所述第一分组单元121,还用于根据所述第一分组中的每棵逻辑查询计划树的查询间写读依赖关系将所述第一分组中的逻辑查询计划树划分为至少一个查询组;
第二分组单元122,用于统计所述第二分组中的每棵逻辑查询计划树的各类操作符的数量,根据所述每棵逻辑查询计划树的各类操作符的数量,确定所述每棵逻辑查询计划树的操作符重叠度,将所述第二分组中具有操作符重叠关系的逻辑查询计划树划分到第一子分组中,将所述第二分组中除所述第一子分组中的逻辑查询计划树之外的其他逻辑查询计划树划分到第二子分组中;
所述第二分组单元122,还用于根据所述第一子分组中每棵逻辑查询计划树的操作符重叠度将所述第一子分组中逻辑查询计划树划分为至少一个查询组;
第三分组单元123,用于根据所述第二子分组中的每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述第二子分组中的每棵逻辑查询计划的操作数重叠度,根据所述第二子分组中的每棵逻辑查询计划的操作数重叠度,将所述第二子分组中的逻辑查询计划树划分为至少一个查询组。
可选地,所述第一分组单元121具体用于:
分别判断所述每棵逻辑查询计划树的文件定值操作符所定值的各操作数的数据标识,是否与所述多棵逻辑查询计划树中的其他逻辑查询计划树的扫描操作符的各操作数的数据标识相同;
若相同,则确定包含所述文件定值操作符和所述扫描操作符的逻辑查询计划树具有查询间写读依赖关系。
可选地,所述第二分组单元122具体用于:
将所述第二分组中的每棵逻辑查询计划树的各类操作符的数量分别与所述第二分组中的其他逻辑查询计划树的各类操作符的数量进行比较,若所述第二分组中的两棵逻辑查询计划树的各类操作符的数量均相同,则将所述各类操作符的数量的总和分别作为所述两棵逻辑查询计划树在一次比较过程中的操作符重叠度,其中,所述一次比较过程包括所述第二分组中的一棵逻辑查询计划树与其他任意一棵逻辑查询计划树的比较过程。
进一步地,所述优化模块13还用于:
创建一个虚拟操作节点,以所述虚拟操作节点为根节点,将查询间优化后的多棵逻辑查询计划树的根节点作为所述虚拟操作节点的前驱,生成一棵虚拟逻辑查询计划树;
对所述虚拟逻辑查询计划树进行查询内优化,生成查询内优化后的虚拟逻辑查询计划树;
删除所述查询内优化后的虚拟逻辑查询计划树的所述虚拟操作节点,得到所述优化后的多棵逻辑查询计划树。
本实施例的装置,可以用于执行实施例二和实施例三的方法,其实现原理和技术效果类似,此处不再赘述。
图6为本发明实施例六提供的批量数据查询装置的结构示意图,如图6所示,本实施例的批量数据查询装置300包括:处理器31、存储器32和系统总线33,所述处理器31和所述存储器32之间通过所述系统总线33连接并完成相互间的通信;所述存储器32,用于存储计算机执行指令321;所述处理器31,用于运行所述计算机执行指令321,以执行如下所述的方法:
获取多条查询语句对应的多棵逻辑查询计划树,其中,每条查询语句对应一棵逻辑查询计划树,所述多棵逻辑查询计划树中的每棵逻辑查询计划树包括多个操作符,所述每棵逻辑查询计划树的每个操作符包括至少一个操作数;
根据所述每棵逻辑查询计划树的各操作符将所述多棵逻辑查询计划树划分为多个查询组,其中,每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系;
对所述每个查询组内的各逻辑查询计划树进行查询间优化;
根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树;
根据所述多棵物理查询计划树执行物理查询,得到所述多条查询语句的查询结果。
可选地,所述根据所述每棵逻辑查询计划树的各操作符将所述多棵逻辑查询计划树划分为多个查询组,包括:
根据所述每棵逻辑查询计划树的各操作符和所述每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述每棵逻辑查询计划树的查询间写读依赖关系,将所有具有查询间写读依赖关系的逻辑查询计划树划分到第一分组中,将所有不具有查询间写读依赖关系的逻辑查询计划树划分到第二分组中;
根据所述第一分组中的每棵逻辑查询计划树的查询间写读依赖关系将所述第一分组中的逻辑查询计划树划分为至少一个查询组;
统计所述第二分组中的每棵逻辑查询计划树的各类操作符的数量,根据所述每棵逻辑查询计划树的各类操作符的数量,确定所述每棵逻辑查询计划树的操作符重叠度,将所述第二分组中具有操作符重叠关系的逻辑查询计划树划分到第一子分组中,将所述第二分组中除所述第一子分组中的逻辑查询计划树之外的其他逻辑查询计划树划分到第二子分组中;
根据所述第一子分组中每棵逻辑查询计划树的操作符重叠度将所述第一子分组中逻辑查询计划树划分为至少一个查询组;
根据所述第二子分组中的每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述第二子分组中的每棵逻辑查询计划的操作数重叠度,根据所述第二子分组中的每棵逻辑查询计划的操作数重叠度,将所述第二子分组中的逻辑查询计划树划分为至少一个查询组。
本实施例中,所述根据每棵逻辑查询计划树的各操作符和所述每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述每棵逻辑查询计划树的查询间写读依赖关系,包括:
分别判断所述每棵逻辑查询计划树的文件定值操作符所定值的各操作数的数据标识,是否与所述多棵逻辑查询计划树中的其他逻辑查询计划树的扫描操作符的各操作数的数据标识相同;
若相同,则确定包含所述文件定值操作符和所述扫描操作符的逻辑查询计划树具有查询间写读依赖关系。
本实施例中,所述根据所述每棵逻辑查询计划树的各类操作符的数量,确定所述每棵逻辑查询计划树的操作符重叠度,包括:
将所述第二分组中的每棵逻辑查询计划树的各类操作符的数量分别与所述第二分组中的其他逻辑查询计划树的各类操作符的数量进行比较,若所述第二分组中的两棵逻辑查询计划树的各类操作符的数量均相同,则将所述各类操作符的数量的总和分别作为所述两棵逻辑查询计划树在一次比较过程中的操作符重叠度,其中,所述一次比较过程包括所述第二分组中的一棵逻辑查询计划树与其他任意一棵逻辑查询计划树的比较过程。
可选地,所述对所述每个查询组内的逻辑查询计划树进行查询间优化,包括:
判断所述每个查询组内的第一查询子树和第二查询子树的树结构是否相同,其中,所述第一查询子树和所述第二查询子树属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一查询子树和所述第二查询子树的树结构相同,判断所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识是否相同;
若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之前,则将所述第二查询子树的后继连接到所述第一查询子树上,所述第二查询子树作为所述第一查询子树的新增后继,以使所述第二查询子树的后继复用所述第一查询子树的查询结果;
或者,若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之后,则将所述第一查询子树的后继连接到所述第二查询子树上,所述第一查询子树的后继作为所述第二查询子树的新增后继,以使所述第一查询子树的后继复用所述第二查询子树的查询结果。
可选地,所述对所述每个查询组内的逻辑查询计划树进行查询间优化,包括:
判断所述每个查询组内的一对文件定值操作符和扫描操作符对应的操作数的数据标识是否相同,其中,所述扫描操作符和所述文件定值操作符属于同一个查询组内的两棵不同的逻辑查询计划树;
若所述文件定值操作符和所述扫描操作符对应的操作数的数据标识相同,则确定所述文件定值操作符和所述扫描操作符所属的逻辑查询计划树具有写读依赖关系,将所述文件定值操作符的前驱与所述扫描操作符的后继直接连接,并删除所述扫描操作符。
可选地,所述对所述每个查询组内的逻辑查询计划树进行查询间优化,包括:
判断所述每个查询组内的第一操作符和第二操作符的操作数的数据标识是否相同,其中,所述第一操作符和所述第二操作符属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一操作符和所述第二操作符的操作数的数据标识相同,则为所述第一操作符和所述第二操作符添加合并标识,所述合并标识用于在生成物理查询计划树时将所述第一操作符和所述第二操作符进行合并。
可选地,所述根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树之前,所述方法还包括:
创建一个虚拟操作节点,以所述虚拟操作节点为根节点,将查询间优化后的多棵逻辑查询计划树的根节点作为所述虚拟操作节点的前驱,生成一棵虚拟逻辑查询计划树;
对所述虚拟逻辑查询计划树进行查询内优化,生成查询内优化后的虚拟逻辑查询计划树;
删除所述查询内优化后的虚拟逻辑查询计划树的所述虚拟操作节点,得到所述优化后的多棵逻辑查询计划树。
本实施例的装置,可用于执行实施例一至实施例三的任一方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (16)
1.一种批量数据查询方法,其特征在于,包括:
获取多条查询语句对应的多棵逻辑查询计划树,其中,每条查询语句对应一棵逻辑查询计划树,所述多棵逻辑查询计划树中的每棵逻辑查询计划树包括多个操作符,所述每棵逻辑查询计划树的每个操作符包括至少一个操作数;
根据所述每棵逻辑查询计划树的各操作符将所述多棵逻辑查询计划树划分为多个查询组,其中,每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系;
对所述每个查询组内的各逻辑查询计划树进行查询间优化;
根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树;
根据所述多棵物理查询计划树执行物理查询,得到所述多条查询语句的查询结果。
2.根据权利要求1所述的方法,其特征在于,所述根据所述每棵逻辑查询计划树的各操作符将所述多棵逻辑查询计划树划分为多个查询组,包括:
根据所述每棵逻辑查询计划树的各操作符和所述每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述每棵逻辑查询计划树的查询间写读依赖关系,将所有具有查询间写读依赖关系的逻辑查询计划树划分到第一分组中,将所有不具有查询间写读依赖关系的逻辑查询计划树划分到第二分组中;
根据所述第一分组中的每棵逻辑查询计划树的查询间写读依赖关系将所述第一分组中的逻辑查询计划树划分为至少一个查询组;
统计所述第二分组中的每棵逻辑查询计划树的各类操作符的数量,根据所述每棵逻辑查询计划树的各类操作符的数量,确定所述每棵逻辑查询计划树的操作符重叠度,将所述第二分组中具有操作符重叠关系的逻辑查询计划树划分到第一子分组中,将所述第二分组中除所述第一子分组中的逻辑查询计划树之外的其他逻辑查询计划树划分到第二子分组中;
根据所述第一子分组中每棵逻辑查询计划树的操作符重叠度将所述第一子分组中逻辑查询计划树划分为至少一个查询组;
根据所述第二子分组中的每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述第二子分组中的每棵逻辑查询计划的操作数重叠度,根据所述第二子分组中的每棵逻辑查询计划的操作数重叠度,将所述第二子分组中的逻辑查询计划树划分为至少一个查询组。
3.根据权利要求2所述的方法,其特征在于,所述根据每棵逻辑查询计划树的各操作符和所述每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述每棵逻辑查询计划树的查询间写读依赖关系,包括:
分别判断所述每棵逻辑查询计划树的文件定值操作符所定值的各操作数的数据标识,是否与所述多棵逻辑查询计划树中的其他逻辑查询计划树的扫描操作符的各操作数的数据标识相同;
若相同,则确定包含所述文件定值操作符和所述扫描操作符的逻辑查询计划树具有查询间写读依赖关系。
4.根据权利要求2或3所述的方法,其特征在于,所述根据所述每棵逻辑查询计划树的各类操作符的数量,确定所述每棵逻辑查询计划树的操作符重叠度,包括:
将所述第二分组中的每棵逻辑查询计划树的各类操作符的数量分别与所述第二分组中的其他逻辑查询计划树的各类操作符的数量进行比较,若所述第二分组中的两棵逻辑查询计划树的各类操作符的数量均相同,则将所述各类操作符的数量的总和分别作为所述两棵逻辑查询计划树在一次比较过程中的操作符重叠度,其中,所述一次比较过程包括所述第二分组中的一棵逻辑查询计划树与其他任意一棵逻辑查询计划树的比较过程。
5.根据权利要求1-3中任一项所述的方法,其特征在于,所述对所述每个查询组内的逻辑查询计划树进行查询间优化,包括:
判断所述每个查询组内的第一查询子树和第二查询子树的树结构是否相同,其中,所述第一查询子树和所述第二查询子树属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一查询子树和所述第二查询子树的树结构相同,判断所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识是否相同;
若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之前,则将所述第二查询子树的后继连接到所述第一查询子树上,所述第二查询子树作为所述第一查询子树的新增后继,以使所述第二查询子树的后继复用所述第一查询子树的查询结果;
或者,若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之后,则将所述第一查询子树的后继连接到所述第二查询子树上,所述第一查询子树的后继作为所述第二查询子树的新增后继,以使所述第一查询子树的后继复用所述第二查询子树的查询结果。
6.根据权利要求1-3中任一项所述的方法,其特征在于,所述对所述每个查询组内的逻辑查询计划树进行查询间优化,包括:
判断所述每个查询组内的一对文件定值操作符和扫描操作符对应的操作数的数据标识是否相同,其中,所述扫描操作符和所述文件定值操作符属于同一个查询组内的两棵不同的逻辑查询计划树;
若所述文件定值操作符和所述扫描操作符对应的操作数的数据标识相同,则确定所述文件定值操作符和所述扫描操作符所属的逻辑查询计划树具有写读依赖关系,将所述文件定值操作符的前驱与所述扫描操作符的后继直接连接,并删除所述扫描操作符。
7.根据权利要求1-3中任一项所述的方法,其特征在于,所述对所述每个查询组内的逻辑查询计划树进行查询间优化,包括:
判断所述每个查询组内的第一操作符和第二操作符的操作数的数据标识是否相同,其中,所述第一操作符和所述第二操作符属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一操作符和所述第二操作符的操作数的数据标识相同,则为所述第一操作符和所述第二操作符添加合并标识,所述合并标识用于在生成物理查询计划树时将所述第一操作符和所述第二操作符进行合并。
8.根据权利要求1-3中任一项所述的方法,其特征在于,所述根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树之前,所述方法还包括:
创建一个虚拟操作节点,以所述虚拟操作节点为根节点,将查询间优化后的多棵逻辑查询计划树的根节点作为所述虚拟操作节点的前驱,生成一棵虚拟逻辑查询计划树;
对所述虚拟逻辑查询计划树进行查询内优化,生成查询内优化后的虚拟逻辑查询计划树;
删除所述查询内优化后的虚拟逻辑查询计划树的所述虚拟操作节点,得到所述优化后的多棵逻辑查询计划树。
9.一种批量数据查询装置,其特征在于,包括:
获取模块,用于获取多条查询语句对应的多棵逻辑查询计划树,其中,每条查询语句对应一棵逻辑查询计划树,所述多棵逻辑查询计划树中的每棵逻辑查询计划树包括多个操作符,所述每棵逻辑查询计划树的每个操作符包括至少一个操作数;
分组模块,用于根据所述每棵逻辑查询计划树的各操作符将所述多棵逻辑查询计划树划分为多个查询组,其中,每个查询组中的逻辑查询计划树之间具有下述关系:查询间写读依赖关系、操作符重叠关系或操作数重叠关系;
优化模块,用于对所述每个查询组内的各逻辑查询计划树进行查询间优化;
生成模块,用于根据优化后的多棵逻辑查询计划树生成对应的多棵物理查询计划树;
查询模块,用于根据所述多棵物理查询计划树执行物理查询,得到所述多条查询语句的查询结果。
10.根据权利要求9所述的装置,其特征在于,所述分组模块包括:
第一分组单元,用于根据所述每棵逻辑查询计划树的各操作符和所述每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述每棵逻辑查询计划树的查询间写读依赖关系,将所有具有查询间写读依赖关系的逻辑查询计划树划分到第一分组中,将所有不具有查询间写读依赖关系的逻辑查询计划树划分到第二分组中;
所述第一分组单元,还用于根据所述第一分组中的每棵逻辑查询计划树的查询间写读依赖关系将所述第一分组中的逻辑查询计划树划分为至少一个查询组;
第二分组单元,用于统计所述第二分组中的每棵逻辑查询计划树的各类操作符的数量,根据所述每棵逻辑查询计划树的各类操作符的数量,确定所述每棵逻辑查询计划树的操作符重叠度,将所述第二分组中具有操作符重叠关系的逻辑查询计划树划分到第一子分组中,将所述第二分组中除所述第一子分组中的逻辑查询计划树之外的其他逻辑查询计划树划分到第二子分组中;
所述第二分组单元,还用于根据所述第一子分组中每棵逻辑查询计划树的操作符重叠度将所述第一子分组中逻辑查询计划树划分为至少一个查询组;
第三分组单元,用于根据所述第二子分组中的每棵逻辑查询计划树的各操作符的各操作数的数据标识,确定所述第二子分组中的每棵逻辑查询计划的操作数重叠度,根据所述第二子分组中的每棵逻辑查询计划的操作数重叠度,将所述第二子分组中的逻辑查询计划树划分为至少一个查询组。
11.根据权利要求10所述的装置,其特征在于,所述第一分组单元具体用于:
分别判断所述每棵逻辑查询计划树的文件定值操作符所定值的各操作数的数据标识,是否与所述多棵逻辑查询计划树中的其他逻辑查询计划树的扫描操作符的各操作数的数据标识相同;
若相同,则确定包含所述文件定值操作符和所述扫描操作符的逻辑查询计划树具有查询间写读依赖关系。
12.根据权利要求10或11所述的装置,其特征在于,所述第二分组单元具体用于:
将所述第二分组中的每棵逻辑查询计划树的各类操作符的数量分别与所述第二分组中的其他逻辑查询计划树的各类操作符的数量进行比较,若所述第二分组中的两棵逻辑查询计划树的各类操作符的数量均相同,则将所述各类操作符的数量的总和分别作为所述两棵逻辑查询计划树在一次比较过程中的操作符重叠度,其中,所述一次比较过程包括所述第二分组中的一棵逻辑查询计划树与其他任意一棵逻辑查询计划树的比较过程。
13.根据权利要求9-11中任一项所述的装置,其特征在于,所述优化模块具体用于:
判断所述每个查询组内的第一查询子树和第二查询子树的树结构是否相同,其中,所述第一查询子树和所述第二查询子树属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一查询子树和所述第二查询子树的树结构相同,判断所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识是否相同;
若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之前,则将所述第二查询子树的后继连接到所述第一查询子树上,所述第二查询子树作为所述第一查询子树的新增后继,以使所述第二查询子树的后继复用所述第一查询子树的查询结果;
或者,若所述第一查询子树的操作符的操作数的数据标识与所述第二查询子树的操作符的操作数的数据标识相同,且所述第一查询子树的执行顺序在所述第二查询子树之后,则将所述第一查询子树的后继连接到所述第二查询子树上,所述第一查询子树的后继作为所述第二查询子树的新增后继,以使所述第一查询子树的后继复用所述第二查询子树的查询结果。
14.根据权利要求9-11中任一项所述的装置,其特征在于,所述优化模块具体用于:
判断所述每个查询组内的一对文件定值操作符和扫描操作符对应的操作数的数据标识是否相同,其中,所述扫描操作符和所述文件定值操作符属于同一个查询组内的两棵不同的逻辑查询计划树;
若所述文件定值操作符和所述扫描操作符对应的操作数的数据标识相同,则确定所述文件定值操作符和所述扫描操作符所属的逻辑查询计划树具有写读依赖关系,将所述文件定值操作符的前驱与所述扫描操作符的后继直接连接,并删除所述扫描操作符。
15.根据权利要求9-11中任一项所述的装置,其特征在于,所述优化模块具体用于:
判断所述每个查询组内的第一操作符和第二操作符的操作数的数据标识是否相同,其中,所述第一操作符和所述第二操作符属于同一个查询组的两棵不同的逻辑查询计划树;
若所述第一操作符和所述第二操作符的操作数的数据标识相同,则为所述第一操作符和所述第二操作符添加合并标识,所述合并标识用于在生成物理查询计划树时将所述第一操作符和所述第二操作符进行合并。
16.根据权利要求9-11中任一项所述的装置,其特征在于,所述优化模块还用于:
创建一个虚拟操作节点,以所述虚拟操作节点为根节点,将查询间优化后的多棵逻辑查询计划树的根节点作为所述虚拟操作节点的前驱,生成一棵虚拟逻辑查询计划树;
对所述虚拟逻辑查询计划树进行查询内优化,生成查询内优化后的虚拟逻辑查询计划树;
删除所述查询内优化后的虚拟逻辑查询计划树的所述虚拟操作节点,得到所述优化后的多棵逻辑查询计划树。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410673523.2A CN105677683B (zh) | 2014-11-21 | 2014-11-21 | 批量数据查询方法和装置 |
PCT/CN2015/094948 WO2016078592A1 (zh) | 2014-11-21 | 2015-11-18 | 批量数据查询方法和装置 |
US15/600,199 US10769147B2 (en) | 2014-11-21 | 2017-05-19 | Batch data query method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410673523.2A CN105677683B (zh) | 2014-11-21 | 2014-11-21 | 批量数据查询方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105677683A CN105677683A (zh) | 2016-06-15 |
CN105677683B true CN105677683B (zh) | 2018-12-14 |
Family
ID=56013300
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410673523.2A Active CN105677683B (zh) | 2014-11-21 | 2014-11-21 | 批量数据查询方法和装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10769147B2 (zh) |
CN (1) | CN105677683B (zh) |
WO (1) | WO2016078592A1 (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180060389A1 (en) * | 2016-08-29 | 2018-03-01 | Sap Se | Query optimization over distributed heterogeneous execution engines |
US10409815B2 (en) * | 2017-02-27 | 2019-09-10 | Sap Se | SQLScript compilation tracing system |
US10956417B2 (en) * | 2017-04-28 | 2021-03-23 | Oracle International Corporation | Dynamic operation scheduling for distributed data processing |
CN107220376B (zh) * | 2017-06-21 | 2020-10-27 | 北京奇艺世纪科技有限公司 | 一种数据查询方法和装置 |
CN108108472B (zh) * | 2018-01-02 | 2022-05-31 | 联想(北京)有限公司 | 数据处理方法以及服务器 |
US10572481B1 (en) * | 2018-03-26 | 2020-02-25 | Jeffrey M. Gunther | System and method for integrating health information sources |
US11423022B2 (en) | 2018-06-25 | 2022-08-23 | Oracle International Corporation | Hybrid declarative query compiler and optimizer framework |
CN110909023B (zh) * | 2018-09-17 | 2021-11-19 | 华为技术有限公司 | 一种查询计划的获取方法、数据查询方法及装置 |
CN111382174B (zh) * | 2018-12-28 | 2023-10-17 | 百度在线网络技术(北京)有限公司 | 多方数据联合查询方法、装置、服务器和存储介质 |
CN112860740B (zh) * | 2019-11-27 | 2022-12-20 | 金篆信科有限责任公司 | 一种触发器实现的方法和装置 |
WO2022079856A1 (ja) * | 2020-10-15 | 2022-04-21 | 日本電信電話株式会社 | データ処理装置、データ処理方法及びデータ処理プログラム |
CN113448967B (zh) * | 2021-07-20 | 2022-02-08 | 威讯柏睿数据科技(北京)有限公司 | 一种对数据库操作进行加速的方法和装置 |
CN113656438B (zh) * | 2021-08-06 | 2023-12-12 | 北京数码大方科技股份有限公司 | 数据树的数据查询方法及装置 |
CN114328595B (zh) * | 2021-11-30 | 2024-01-09 | 苏州浪潮智能科技有限公司 | 一种数据查询方法、装置、电子设备及存储介质 |
CN116701429B (zh) * | 2023-05-19 | 2023-12-29 | 杭州云之重器科技有限公司 | 一种基于批量历史任务模糊化的公共查询方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521409A (zh) * | 2011-12-28 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 一种基于通信协议的数据库数据批量更新方法 |
CN102609493A (zh) * | 2012-01-20 | 2012-07-25 | 东华大学 | 一种基于列存储模型的连接顺序查询优化方法 |
CN103914462A (zh) * | 2012-12-31 | 2014-07-09 | 中国移动通信集团公司 | 一种数据存储和查询方法以及装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6721724B1 (en) * | 2000-03-31 | 2004-04-13 | Microsoft Corporation | Validating multiple execution plans for database queries |
US7031958B2 (en) * | 2003-02-06 | 2006-04-18 | International Business Machines Corporation | Patterned based query optimization |
US8392920B2 (en) * | 2010-01-27 | 2013-03-05 | Microsoft Corporation | Parallel query engine with dynamic number of workers |
US8868594B2 (en) * | 2011-12-23 | 2014-10-21 | Sap Ag | Split processing paths for a database calculation engine |
US9280583B2 (en) * | 2012-11-30 | 2016-03-08 | International Business Machines Corporation | Scalable multi-query optimization for SPARQL |
US10740329B2 (en) * | 2013-03-15 | 2020-08-11 | Teradata Us, Inc. | Optimization of database queries for database systems and environments |
CN103761080B (zh) * | 2013-12-25 | 2017-02-15 | 中国农业大学 | 一种基于SQL的MapReduce作业生成方法及系统 |
US9501536B1 (en) * | 2014-07-21 | 2016-11-22 | Pivotal Software, Inc. | Query plan generation for queries having common expressions |
-
2014
- 2014-11-21 CN CN201410673523.2A patent/CN105677683B/zh active Active
-
2015
- 2015-11-18 WO PCT/CN2015/094948 patent/WO2016078592A1/zh active Application Filing
-
2017
- 2017-05-19 US US15/600,199 patent/US10769147B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521409A (zh) * | 2011-12-28 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 一种基于通信协议的数据库数据批量更新方法 |
CN102609493A (zh) * | 2012-01-20 | 2012-07-25 | 东华大学 | 一种基于列存储模型的连接顺序查询优化方法 |
CN103914462A (zh) * | 2012-12-31 | 2014-07-09 | 中国移动通信集团公司 | 一种数据存储和查询方法以及装置 |
Also Published As
Publication number | Publication date |
---|---|
US10769147B2 (en) | 2020-09-08 |
WO2016078592A1 (zh) | 2016-05-26 |
US20170255673A1 (en) | 2017-09-07 |
CN105677683A (zh) | 2016-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105677683B (zh) | 批量数据查询方法和装置 | |
US11372851B2 (en) | Systems and methods for rapid data analysis | |
CN102270232B (zh) | 一种存储优化的语义数据查询系统 | |
CN105488231B (zh) | 一种基于自适应表维度划分的大数据处理方法 | |
CN104361113B (zh) | 一种内存‑闪存混合存储模式下的olap查询优化方法 | |
CN105335402B (zh) | 基于静态Cache的搜索方法、索引数据生成方法以及装置 | |
CN103562910A (zh) | 管理数据查询 | |
CN112860692B (zh) | 一种数据库表结构转换方法、装置及其电子设备 | |
CN103970902A (zh) | 一种大量数据情况下的可靠即时检索方法及系统 | |
US20110238677A1 (en) | Dynamic Sort-Based Parallelism | |
CN102945283B (zh) | 一种语义Web服务组合方法 | |
CN103631922A (zh) | 基于Hadoop集群的大规模Web信息提取方法及系统 | |
CN105608228B (zh) | 一种高效的分布式的rdf数据存储方法 | |
CN109657080A (zh) | 高分卫星遥感数据的分布式处理方法/系统和介质 | |
CN106202102B (zh) | 批量数据查询方法和装置 | |
CN105701128B (zh) | 一种查询语句的优化方法和装置 | |
CN107871055A (zh) | 一种数据分析方法和装置 | |
CN108874395A (zh) | 一种组件化流处理过程中的硬编译方法及装置 | |
CN110008448A (zh) | 将SQL代码自动转换为Java代码的方法和装置 | |
CN106933844A (zh) | 面向大规模rdf数据的可达性查询索引的构建方法 | |
CN110059107A (zh) | 计划优化方法、装置、系统及计算机可读存储介质 | |
CN104021169B (zh) | 一种基于SDD‑1算法的Hive连接查询方法 | |
CN114328525A (zh) | 数据处理方法及设备 | |
CN108121733A (zh) | 一种数据的查询方法及装置 | |
CN104699599B (zh) | 基于idUCf五元结构的过程间静态切片提取方法 |
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 |