CN105701128B - 一种查询语句的优化方法和装置 - Google Patents
一种查询语句的优化方法和装置 Download PDFInfo
- Publication number
- CN105701128B CN105701128B CN201410711901.1A CN201410711901A CN105701128B CN 105701128 B CN105701128 B CN 105701128B CN 201410711901 A CN201410711901 A CN 201410711901A CN 105701128 B CN105701128 B CN 105701128B
- Authority
- CN
- China
- Prior art keywords
- operator
- operand
- version number
- query tree
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种查询语句的优化方法和装置,涉及数据查询技术领域,用以解决由于需要缓存历史逻辑查询树及其对应的查询结果而导致的占用大量的存储空间的问题。本发明实施例提供的查询语句的优化方法包括:接收n个查询语句;将所述n个查询语句生成n个逻辑查询树;根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号;对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,以减少所述n个逻辑查询树生成的物理任务的数量。本发明实施例提供的技术方案可用于大数据查询系统对数据仓库进行批量查询的过程中。
Description
技术领域
本发明涉及数据查询技术领域,尤其涉及一种查询语句的优化方法和装置。
背景技术
目前,大数据查询系统(例如:Hive,Shark,Impala等)解析查询语句和优化查询语句的基本单位为单个查询语句。大数据查询系统解析查询语句的过程一般包括:大数据查询系统将查询语句生成逻辑查询树(也称为逻辑查询计划),将逻辑查询树生成该大数据查询系统中的查询执行引擎(例如,MapReduce、Spark等)可识别的物理查询树(也称为物理查询计划);该查询执行引擎执行物理查询树中的物理任务,生成查询结果;其中,逻辑查询树由多个操作符构成。
为了提高查询效率,一种查询语句的优化方法包括:大数据查询系统通过比较当前查询语句对应的逻辑查询树中的操作符与缓存的历史逻辑查询树中的操作符,确定出当前查询语句对应的逻辑查询树与历史逻辑查询树中可复用查询结果的目标操作符;将历史逻辑查询树中的目标操作符对应的查询结果作为当前查询语句中的目标操作符对应的查询结果。另外,该方法还可以包括:缓存当前查询语句对应的逻辑查询树及其对应的查询结果,以供大数据查询系统在对下一个查询语句进行优化的过程中使用。
上述查询语句的优化方法通过复用历史逻辑查询树对应的查询结果来提高查询效率,这样,当查询语句的数量较多时,需要占用大量的存储空间来缓存历史逻辑查询树及其对应的查询结果。
发明内容
本发明实施例提供一种查询语句的优化方法和装置,用以解决由于需要缓存历史逻辑查询树及其对应的查询结果而导致的占用大量的存储空间的问题。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种查询语句的优化方法,包括:
接收n个查询语句;其中,n≥2,n为整数;
将所述n个查询语句生成n个逻辑查询树;
根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号;其中,所述预设规则包括:不同操作数的版本号不同,操作符每次所定值的操作数的版本号不同,不同操作符组中的操作符对应的同一操作数的版本号不同;所述操作符组是指以对所述同一操作数进行定值的操作符为界限对所述n个逻辑查询树中的操作符进行分组后得到的一个分组;
对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,以减少所述n个逻辑查询树生成的物理任务的数量。
结合第一方面,在第一种可能的实现方式中,所述根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号,包括:
为所述n个逻辑查询树中的操作符每次所定值的操作数添加唯一的版本号;
为目标操作符组中的操作符对应的目标操作数添加目标版本号;其中,所述目标操作符组中的首个操作符为对操作数进行定值的操作符,所述目标操作数为所述目标操作符组中的首个操作符所定值的操作数;所述目标版本号与该目标操作符组中的首个操作符所定值的操作数的版本号相同;
为尚未拥有版本号的同一操作数添加唯一的版本号。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
将所对应的操作数的版本号相同、具有定值-引用关联关系、且所属不同逻辑查询树的两个操作符中的对操作数进行定值的操作符与对操作数进行引用的操作符的后继之间建立前驱后继关系,并删除对操作数进行引用的操作符。
结合第一方面、第一方面的第一种可能的实现方式至第二种可能的实现方式任一种,在第三种可能的实现方式中,所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
为所对应的操作数的版本号相同、操作类型相同、且所属不同逻辑查询树的两个操作符添加合并分离标签;其中,所述合并分离标签用于使该两个操作符生成同一物理任务,并在执行该物理任务之后生成两个查询结果。
结合第一方面、第一方面的第一种可能的实现方式至第三种可能的实现方式任一种,在第四种可能的实现方式中,所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
通过共有的子树将两个逻辑查询树合并为一个逻辑查询树;其中,所述共有的子树中相应的操作符对应的版本号相同,所述共有的子树包含具有后继不具有前驱的操作符。
结合第一方面、第一方面的第一种可能的实现方式至第四种可能的实现方式任一种,在第五种可能的实现方式中,在所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化之后,所述方法还包括:
确定具有定值-引用关联关系或定值-定值关联关系的两个操作符;
在该两个操作符中的前一个操作符对应的物理任务与后一个操作符对应的物理任务之间添加有向边,以使得该前一个操作符对应的物理任务在该后一个操作符对应的物理任务之前输出。
结合第一方面、第一方面的第一种可能的实现方式至第五种可能的实现方式任一种,在第六种可能的实现方式中,在所述根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号之后,所述方法还包括:
为所述n个逻辑查询树中的、且出现次数大于或等于一阈值的版本号对应的操作符添加热数据标签;其中,相同热数据标签对应同一版本号;
将添加有相同热数据标签的、且不具有有向边的操作符生成的物理任务并行输出。
结合第一方面、第一方面的第一种可能的实现方式至第六种可能的实现方式任一种,在第七种可能的实现方式中,在所述根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号之后,所述方法还包括:
将所述n个逻辑查询树中的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为第一类分组,将其他逻辑查询树归为第二类分组;
确定所述第一类分组的第一类优化方式和所述第二类分组的第二类优化方式;
所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
按照所述第一类优化方式对所述第一类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化;
按照所述第二类优化方式对所述第二类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
结合第一方面的第七种可能的实现方式,在第八种可能的实现方式中,在所述将所述n个逻辑查询树中的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为第一类分组之后,所述方法还包括:
将所述第一类分组中的、所对应的操作数的版本号相同的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为一个子分组;
所述按照所述第一类优化方式对所述第一类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
按照所述第一类优化方式分别对所述第一类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
结合第一方面的第七种可能的实现方式或第八种可能的实现方式,在第九种可能的实现方式中,在所述将其他逻辑查询树归为第二类分组之后,所述方法还包括:
根据逻辑查询树间的所对应的操作数的版本号的重复程度将所述第二类分组中的逻辑查询树分为多个子分组;
所述按照所述第二类优化方式对所述第二类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
按照所述第二类优化方式分别对所述第二类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
结合第一方面、第一方面的第一种可能的实现方式至第九种可能的实现方式任一种,在第十种可能的实现方式中,在所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化之后,所述方法还包括:
为对所述n个逻辑查询树进行优化后生成的m个逻辑查询树添加虚拟根节点,以形成总逻辑查询树;其中,n≥m≥1,m为整数;
按照查询语句内的优化方法对所述总逻辑查询树中的操作符进行优化。
第二方面,提供一种查询语句的优化装置,包括:
接收单元,用于接收n个查询语句;其中,n≥2,n为整数;
生成单元,用于将所述n个查询语句生成n个逻辑查询树;
执行单元,用于根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号;其中,所述预设规则包括:不同操作数的版本号不同,操作符每次所定值的操作数的版本号不同,不同操作符组中的操作符对应的同一操作数的版本号不同;所述操作符组是指以对所述同一操作数进行定值的操作符为界限对所述n个逻辑查询树中的操作符进行分组后得到的一个分组;
优化单元,用于对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,以减少所述n个逻辑查询树生成的物理任务的数量。
结合第二方面,在第一种可能的实现方式中,所述执行单元具体用于:
为所述n个逻辑查询树中的操作符每次所定值的操作数添加唯一的版本号;
为目标操作符组中的操作符对应的目标操作数添加目标版本号;其中,所述目标操作符组中的首个操作符为对操作数进行定值的操作符,所述目标操作数为所述目标操作符组中的首个操作符所定值的操作数;所述目标版本号与该目标操作符组中的首个操作符所定值的操作数的版本号相同;
为尚未拥有版本号的同一操作数添加唯一的版本号。
结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述优化单元具体用于:
将所对应的操作数的版本号相同、具有定值-引用关联关系、且所属不同逻辑查询树的两个操作符中的对操作数进行定值的操作符与对操作数进行引用的操作符的后继之间建立前驱后继关系,并删除对操作数进行引用的操作符。
结合第二方面、第二方面的第一种可能的实现方式至第二种可能的实现方式任一种,在第三种可能的实现方式中,所述优化单元还用于:
为所对应的操作数的版本号相同、操作类型相同、且所属不同逻辑查询树的两个操作符添加合并分离标签;其中,所述合并分离标签用于使该两个操作符生成同一物理任务,并在执行该物理任务之后生成两个查询结果。
结合第二方面、第二方面的第一种可能的实现方式至第三种可能的实现方式任一种,在第四种可能的实现方式中,所述优化单元还用于:
通过共有的子树将两个逻辑查询树合并为一个逻辑查询树;其中,所述共有的子树中相应的操作符对应的版本号相同,所述共有的子树包含具有后继不具有前驱的操作符。
结合第二方面、第二方面的第一种可能的实现方式至第四种可能的实现方式任一种,在第五种可能的实现方式中,所述查询语句的优化装置还包括:
确定单元,用于确定具有定值-引用关联关系或定值-定值关联关系的两个操作符;
所述执行单元还用于,在该两个操作符中的前一个操作符对应的物理任务与后一个操作符对应的物理任务之间添加有向边,以使得该前一个操作符对应的物理任务在该后一个操作符对应的物理任务之前输出。
结合第二方面、第二方面的第一种可能的实现方式至第五种可能的实现方式任一种,在第六种可能的实现方式中,所述执行单元还用于:
为所述n个逻辑查询树中的、且出现次数大于或等于一阈值的版本号对应的操作符添加热数据标签;其中,相同热数据标签对应同一版本号;
所述查询语句的优化装置还包括:输出单元,用于将添加有相同热数据标签的、且不具有有向边的操作符生成的物理任务并行输出。
结合第二方面、第二方面的第一种可能的实现方式至第六种可能的实现方式任一种,在第七种可能的实现方式中,所述查询语句的优化装置还包括:
分类单元,用于将所述n个逻辑查询树中的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为第一类分组,将其他逻辑查询树归为第二类分组;
确定单元还用于确定所述第一类分组的第一类优化方式和所述第二类分组的第二类优化方式;
所述优化单元具体用于:
按照所述第一类优化方式对所述第一类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化;
按照所述第二类优化方式对所述第二类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
结合第二方面的第七种可能的实现方式,在第八种可能的实现方式中,所述分类单元还用于:
将所述第一类分组中的、所对应的操作数的版本号相同的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为一个子分组;
所述优化单元具体用于:
按照所述第一类优化方式分别对所述第一类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
结合第二方面的第七种可能的实现方式或第八种可能的实现方式,在第九种可能的实现方式中,所述分类单元还用于:
根据逻辑查询树间的所对应的操作数的版本号的重复程度将所述第二类分组中的逻辑查询树分为多个子分组;
所述优化单元具体用于:
按照所述第二类优化方式分别对所述第二类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
结合第二方面、第二方面的第一种可能的实现方式至第九种可能的实现方式任一种,在第十种可能的实现方式中,所述执行单元还用于:
为对所述n个逻辑查询树进行优化后生成的m个逻辑查询树添加虚拟根节点,以形成总逻辑查询树;其中,n≥m≥1,m为整数;
优化单元具体用于按照查询语句内的优化方法对所述总逻辑查询树中的操作符进行优化。
本发明实施例提供的技术方案中,通过为多个查询语句生成的逻辑查询树中的操作符对应的操作数添加版本号,并根据版本号为逻辑查询树中的操作符进行优化,使得生成的物理任务的数量减少,达到有效提高查询效率的目的;相比现有技术来说,本发明实施例提供的技术方案不需要缓存历史的查询结果,节约了存储空间。解决了现有技术中的由于需要缓存历史逻辑查询树及其对应的查询结果而导致的占用大量的存储空间的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种查询语句的优化方法的流程图;
图2为本发明实施例一提供的一种查询语句的优化方法的示意图;
图3为本发明实施例一提供的又一种查询语句的优化方法的示意图;
图4为本发明实施例一提供的又一种查询语句的优化方法的示意图;
图5为本发明实施例一提供的又一种查询语句的优化方法的示意图;
图6为本发明实施例二提供的一种查询语句的优化方法的流程图;
图7为本发明实施例二提供的又一种查询语句的优化方法的示意图;
图8为本发明实施例二提供的又一种查询语句的优化方法的示意图;
图9为本发明实施例二提供的又一种查询语句的优化方法的示意图;
图10为本发明实施例二提供的又一种查询语句的优化方法的示意图;
图11为本发明实施例二提供的又一种查询语句的优化方法的示意图;
图12为本发明实施例二提供的一种查询语句的优化方法的示意图;
图13为本发明实施例二提供的又一种查询语句的优化方法的示意图;
图14为本发明实施例二提供的又一种查询语句的优化方法的示意图;
图15为本发明实施例三提供的一种大数据查询系统的结构示意图;
图16为本发明实施例三提供的又一种大数据查询系统的结构示意图;
图17为本发明实施例四提供的又一种大数据查询系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。本文中字符“/”,一般表示前后关联对象是一种“或”的关系。另外,本文中的术语“多个”是指两个或两个以上。
本文中对操作数进行定值(define,简称def)的操作符可以包括:文件接收操作符(File Sink Operator,简称FS)。
本文中对操作数进行引用(use)的操作符可以包括:扫描操作符(Table ScanOperator,简称TS)。
实施例一
本发明实施例提供一种查询语句的优化方法,如图1所示,包括:
101、接收n个查询语句;其中,n≥2,n为整数。
本发明实施例提供的查询语句的优化方法的执行主体可以为大数据查询系统,该大数据查询系统可以包括但不限于Hive、Shark或Impala等。本发明实施例提供的查询语句的优化方法可以应用在大数据查询系统对数据仓库进行批量查询的过程中,其中,数据仓库可以由一个/多个操作数组成。本发明实施例提供的查询语句的优化方法具体为查询语句间的优化方法。
在本发明实施例中,一次优化过程中,以n个查询语句为基本单位,任意两次逻辑查询优化过程的基本单位可以相同也可以不同。其中,本发明实施例对n的取值的及其设置方式不进行限定。
步骤101具体实现时可以为:大数据查询系统批次接收查询语句,其中,每批次可以接收一个/多个查询语句,当共接收到n个查询语句时停止接收。可选的,步骤101可以包括:大数据查询系统同时接收n个查询语句。需要说明的是,步骤101中接收到的n个查询语句之间存在先后执行顺序,以使大数据查询系统按照该先后执行顺序输出n个查询语句对应的查询结果;其中该先后执行顺序可以由用户指定。
可选的,步骤101之前,该方法还可以包括:扩展大数据查询系统的查询语句接收窗口控制功能,通过限制查询语句接收窗口的规模或查询语句接收窗口边界的语句类型等方式来控制查询语句接收窗口接收查询语句的数量(即n)。
102、将所述n个查询语句生成n个逻辑查询树。
一个查询语句可以生成多个操作符,各操作符按照一定的先后执行顺序对其对应的操作数执行相应的操作。“逻辑查询树”是指以操作符为节点,用有向边表示各操作符之间的先后执行顺序的树状结构。本发明实施例中的附图2-5、附图7-14中的逻辑查询树中的操作符之间的有向边的方向为由下向上。一个操作符可以对应一个或多个操作数,操作数可以代表一张数据表、数据表中的一个分区或数据表中的一列。
步骤102具体实现时可以为:通过采用单个查询语句生成逻辑查询树的方法,依次将n个查询语句生成n个逻辑查询树;其中,每个查询语句对应一个逻辑查询树。单个查询语句生成逻辑查询树的方法为现有技术,在此不再过多阐述。
103、根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号;其中,所述预设规则包括:不同操作数的版本号不同,操作符每次所定值的操作数的版本号不同,不同操作符组中的操作符对应的同一操作数的版本号不同;所述操作符组是指以对所述同一操作数进行定值的操作符为界限对所述n个逻辑查询树中的操作符进行分组后得到的一个分组。
其中,“操作符每次所定值的操作数的版本号不同”包括以下两种情况:操作符每次所定值的不同的操作数的版本号不同,操作符每次所定值的相同的操作数的版本号不同。例如,操作符1所定值的操作数a的版本号与操作符2所定值的操作数b的版本号不同,操作符1所定值的操作数a的版本号与操作符3所定值的操作数a的版本号不同。“操作符每次所定值的相同的操作数的版本号不同”具体可以包括:具有引用-定值关联关系的操作符中所引用的操作数的版本号与所定值的操作数的版本号不同,具有定值-定值关联关系的操作符所定值的操作数的版本号不同等。
可选的,所述预设规则还可以包括:具有定值-引用关联关系的操作符中所定值的操作数的版本号与所引用的操作数的版本号相同。
需要说明的是,具有引用-定值关联关系、定值-引用关联关系或定值-定值关联关系的操作符所对应的操作数为同一操作数,且执行在操作符之间的操作符中没有对该操作数进行定值操作或引用操作的操作符。另外,具有引用-定值关联关系的操作符中的其中一个操作符对该操作数进行引用操作,另一个操作符对该操作数进行定值操作,且对该操作数进行引用操作的操作符的执行顺序在对该操作数进行定值操作的操作符之前;具有定值-引用关联关系的操作符中的其中一个操作符对该操作数进行定值操作,另一个操作符对该操作数进行引用操作,且对该操作数进行定值操作的操作符的执行顺序在对该操作数进行引用操作的操作符之前。具有定值-定值关联关系的操作符中的两个操作符均为该操作数进行定值操作的操作符。
具有引用-定值关联关系、定值-引用关联关系或定值-定值关联关系的操作符可以是一个逻辑查询树中的两个操作符,也可以是不同的逻辑查询树中的两个操作符,甚至可以是同一个操作符。另外,操作类型是指操作符对其对应的操作数进行操作的类型;该操作类型可以为引用操作类型、定值操作类型或其他操作类型。
还需要说明的是,作为操作符组的界限的操作符可以单独作为一个操作符组,也可以归属于与其相邻的操作符组,本发明实施例对此不作限制。
104、对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,以减少所述n个逻辑查询树生成的物理任务的数量。
步骤104可以包括:对所对应的操作数的版本号相同、且所属不同逻辑查询树的部分/全部操作符进行优化,以减少所述n个逻辑查询树生成的物理任务的数量。
在执行步骤104之后,该方法还可以包括:大数据查询系统中的查询执行引擎执行物理任务,生成查询结果。进一步地,该方法还可以包括:删除该n个查询语句对应的n个逻辑查询树、物理任务和/或查询结果,以节省存储空间。
需要说明的是,利用本发明实施例提供的技术方案对查询语句进行优化的过程中,大数据查询系统不一定按照n个查询语句的先后执行顺序进行操作(具体示例可参见下述实施例二);因此,在得到该n个查询语句对应的查询结果后,该方法还可以包括:大数据查询系统根据该先后执行顺序输出该n个查询语句对应的查询结果。
本发明实施例提供的技术方案中,通过为多个查询语句生成的逻辑查询树中的操作符对应的操作数添加版本号,并根据版本号为逻辑查询树中的操作符进行优化,使得生成的物理任务的数量减少,达到有效提高查询效率的目的;相比现有技术来说,本发明实施例提供的技术方案不需要缓存历史的查询结果,节约了存储空间。解决了现有技术中的由于需要缓存历史逻辑查询树及其对应的查询结果而导致的占用大量的存储空间的问题。
可选的,步骤102具体可以通过以下步骤1)-3)实现:
1)为所述n个逻辑查询树中的操作符每次所定值的操作数添加唯一的版本号;
2)为目标操作符组中的操作符对应的目标操作数添加目标版本号;其中,所述目标操作符组中的首个操作符为对操作数进行定值的操作符,所述目标操作数为所述目标操作符组中的首个操作符所定值的操作数;所述目标版本号与该目标操作符组中的首个操作符所定值的操作数版本号相同;
3)为尚未拥有版本号的同一操作数添加唯一的版本号。
其中,步骤1)具体实现时可以为:大数据查询系统为代表一张数据表、数据表中的一个分区或数据表中的一列的操作数添加唯一的版本号。
需要说明的是,在具体实现时,一个操作符可以对应一个/多个操作数,一个操作数可以对应一个/多个版本号。
“尚未分配版本号的操作数”是指具有以下特征的操作数,其中,该特征可以包括:所对应的操作符中没有对操作数进行定值的操作符,或,与目标操作数相同、但不属于目标操作符组中的操作符对应的操作数。具体示例可参考下述实施例中的步骤606。
可选的,步骤104可以通过以下三种方式实现:
方式一、将所对应的操作数的版本号相同、具有定值-引用关联关系、且所属不同逻辑查询树的两个操作符中的对操作数进行定值的操作符与对操作数进行引用的操作符的后继之间建立前驱后继关系,并删除对操作数进行引用的操作符,使得该两个操作符所属的逻辑查询树合并为一个逻辑查询树。
“前驱后继关系”是指存在有向边的两个操作符之间的关系。“操作符的前驱”是指该操作符所属的逻辑查询树中的、与该操作符之间存在有向边的、且执行顺序在该操作符之前的操作符。“操作符的后继”是指该操作符所属的逻辑查询树中的、与该操作符之间存在有向边的、且执行顺序在该操作符之后的操作符。例如,如图2所示,操作符13与操作符14之间存在前驱后继关系,其中,操作符13为操作符14的前驱,操作符14为操作符13的后继。
如图2所示逻辑查询树A包括操作符11、12、13、14,逻辑查询树B包括操作符21、22、23;若操作符14和操作符21为所对应的操作数版本号相同、具有定值-引用关联关系的两个操作符,则步骤104可以包括:将操作符14与操作符21的后继操作符22之间建立前驱后继关系,并删除操作符21,使得逻辑查询树A与逻辑查询树B合并为逻辑查询树C。
方式二、为所对应的操作数的版本号相同、操作类型相同、且所属不同逻辑查询树的两个操作符添加合并分离标签;其中,所述合并分离标签用于使该两个操作符生成同一物理任务,并在执行该物理任务之后生成两个查询结果。
如图3所示,操作符13与操作符21为所对应的操作数的版本号相同、操作类型相同、且所属不同逻辑查询树的两个操作符,则步骤104可以包括:为操作符13与操作符21添加合并分离标签,该合并分离标签用于使操作符13与操作符21生成同一物理任务,并在执行该物理任务之后生成两个查询结果。
方式三、通过共有的子树将两个逻辑查询树合并为一个逻辑查询树;其中,所述共有的子树中相应的操作符对应的版本号相同。
需要说明的是,两个逻辑查询树存在的“共有的子树”包含以下特征:相对应的操作符的操作类型、有向边连接关系、操作符对应的操作数的版本号相同,包含具有后继不具有前驱的操作符。另外,该共有的子树可以由单/多个操作符构成。
如图4所示,当逻辑查询树A与逻辑查询树B共有的子树由单个操作符构成,即图4中的401,则步骤104可以包括:通过共有的子树401将逻辑查询树A与逻辑查询树B合并为一个逻辑查询树C。
如图5所示,当逻辑查询树A与逻辑查询树B共有的子树由多个操作符构成,即图5中的501,则步骤104可以包括:通过共有的子树501将逻辑查询树A与逻辑查询树B合并为一个逻辑查询树C。
可选的,步骤103之后,该方法还可以包括步骤a)-b):
步骤a)、将n个逻辑查询树中的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为第一类分组,将其他逻辑查询树归为第二类分组。
具体实现时,n个逻辑查询树中可能存在多组具有定值-引用关联关系的操作符,该方式下,步骤a)可以包括:将该多组操作符所属的逻辑查询树均归为第一类分组。例如,n个逻辑查询树中存在三组具有定值-引用关联关系的操作符,其所属的逻辑查询树分别为:逻辑查询树A和逻辑查询树B,逻辑查询树A和逻辑查询树C,逻辑查询树D和逻辑查询树E,则步骤a)可以包括:将逻辑查询树A、B、C、D和E均归为第一类分组。
步骤b)、确定第一类分组的第一类优化方式和第二类分组的第二类优化方式。
其中,第一类优化方式和第二类优化方式为不同的两类优化方式,具体可以包括:所包含的优化方式的数量和/或所包含的各优化方式的优先级顺序不同。其中,本发明实施例对该优先级顺序的设置方式不进行限定,例如大数据查询系统可以根据优化代价模型识别出对第一类分组进行优化时第一类优化方式中的各优化方式的优化代价,从而确定第一类优化方式中的各优化方式的优先级顺序;也可以接收用户指示的第一类优化方式中的各优化方式的优先级顺序。
在该可选的实现方式中,步骤104具体可以实现为:按照第一类优化方式对第一类分组中的版本号相同、且所属不同逻辑查询树的操作符进行优化;按照第二类优化方式对第二类分组中的版本号相同、且所属不同逻辑查询树的操作符进行优化。需要说明的是,在该可选的实现方式中,通过采用不同的优化方式对不同的组别进行优化,可以有效的提高优化效率。
为了进一步提高优化效率,可选的,在步骤a)之后,该方法还可以包括:将第一类分组中的、对应的操作数的版本号相同的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为一个子分组。例如,可以将上述步骤a)所示例的第一类分组中的逻辑查询树A、B、C归为一个子分组,逻辑查询树D、E分为一个子分组。在该可选的实现方式中,步骤104具体可以实现为:按照第一类优化方式分别对第一类分组中的子分组中的版本号相同、且所属不同逻辑查询树的操作符进行优化。
进一步地,在步骤a)之后,该方法还可以包括:根据逻辑查询树间的版本号的重复程度将第二类分组中的逻辑查询树分为多个子分组。在该可选的实现方式中,步骤104具体可以实现为:按照第二类优化方式分别对所述第二类分组中的子分组中的对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
其中,“逻辑查询树间的版本号的重复程度”可以通过以下几种特征来表征:重复的版本号的种类、重复的版本号的种类数、重复的版本号的种类数占总版本号的种类数的百分比。其中重复的版本号的种类越多、重复的版本号的种类数越大、重复的版本号的种类数占总版本号的种类数的百分比越高,说明逻辑查询树间的版本号的重复程度越高。当然,还可以通过其他特征来表征逻辑查询树间的版本号的重复程度,本发明实施例并不对其进行限制。
可选的,在步骤104之后,该方法还包括:为对所述n个逻辑查询树进行优化后生成的m个逻辑查询树添加虚拟根节点,以形成总逻辑查询树;其中,n≥m≥1,m为整数;按照查询语句内的优化方法对所述总逻辑查询树中的操作符进行优化;删除所述虚拟根节点。具体地,可以根据现有技术中提供的查询语句内的优化方法对总逻辑查询树中的操作符进行优化。
可选的,在步骤104之后,该方法可以还包括:确定具有定值-引用关联关系或定值-定值关联关系的两个操作符;在该两个操作符中的前一个操作符对应的物理任务与后一个操作符对应的物理任务之间添加有向边,以使得该前一个操作符对应的物理任务在该后一个操作符对应的物理任务之前输出。
可选的,为了减小存储空间,在步骤103之后,该方法还可以包括:为n个逻辑查询树中的、且出现次数大于/等于一阈值的版本号对应的操作符添加热数据标签;其中,相同热数据标签对应同一版本号;将添加有相同热数据标签的、且不具有有向边的操作符生成的物理任务并行输出。
需要说明的是,关于该可选的方式的具体示例可以参考下述实施例二中的相关部分。
实施例二
本实施例中以一次优化过程为例对实施例一中提供的查询语句的优化方法进行示例性说明,本实施例中的相关内容的解释可以参考实施例一。实施例一中的“第一类优化方式”在本实施例中为:将所对应的操作数的版本号相同、具有定值-引用关联关系、且所属不同逻辑查询树的操作符之间建立前驱后继关系;实施例一中的“第二类优化方式”在本实施例中为:通过共有的子树将两个逻辑查询树合并为一个逻辑查询树。本实施例的执行主体为大数据查询系统。
如图6所示,本实施例提供的查询语句的优化方法包括以下步骤:
601、接收n个查询语句,其中,n≥2,n为整数。
602、将n个查询语句生成n个逻辑查询树。
如图7所示,Q1、Q2、Q3…Q9为大数据查询系统接收到的n(n=9)个查询语句,Q1A、Q2A、Q3A…Q9A为由Q1、Q2、Q3…Q9生成的9个逻辑查询树,其中Q1A为Q1生成的逻辑查询树,Q2A为Q2生成的逻辑查询树,以此类推。其中,逻辑查询树中的每个矩形框代表一个操作符。
需要说明的是,大数据查询系统执行查询语句时,多个查询语句之间存在先后执行顺序,也就是说,多个逻辑查询树之间存在先后执行顺序;另外,一个逻辑查询树中的操作符之间也存在先后执行顺序(即有向边的顺序),因此多个逻辑查询树中的操作符之间均存在先后执行顺序。例如,图7中的9个逻辑查询树之间的先后执行顺序为:Q1A、Q2A、Q3A…Q9A,每个逻辑查询树中操作符的先后执行顺序由下向上的顺序,这样,9个逻辑查询树中的操作符的先后执行顺序为:11、12、…、15、21、22、…、25、…、91、92、…、96。
603、确定n个逻辑查询树中的操作符对应的操作数。
基于图7所示的示例,大数据查询系统确定的9个逻辑查询树中的操作符与其对应的操作数的对应关系如表1所示。
表1
604、为n个逻辑查询树中的操作符每次所定值的操作数添加唯一的版本号。
基于表1所示的示例,大数据查询系统为9个逻辑查询树中的操作符每次所定值的操作数添加版本号后,操作符所定值的操作数与版本号之间的对应关系如表2所示。需要说明的是,该表2中还包含了操作符所定值的操作数与其对应的操作符之间的对应关系。
表2
操作符每次所定值的操作数 | 操作符 | 版本号 |
a | 15 | 0 |
b | 25 | 1 |
b | 84 | 2 |
605、为目标操作符组中的操作符对应的目标操作数添加目标版本号;其中,目标操作符组中的首个操作符为对操作数进行定值的操作符,目标操作数为目标操作符组中的首个操作符所定值的操作数;目标版本号与为该目标操作符组中的首个操作符所定值的操作数的版本号相同。
基于表2所示的示例,步骤605具体可以包括:分别针对操作数a和操作数b对9个逻辑查询树中的操作符进行分组。具体的:
1)、针对操作数a对9个逻辑查询树中的操作符进行分组,得到其中,目标操作符组为操作符组2;目标操作数为操作数a。
执行步骤605之后,目标操作数与版本号之间的对应关系如表3所示,需要说明的是,该表3中还包含了目标操作数与其对应的操作符之间的对应关系。
表3
2)、针对操作数b对9个逻辑查询树中的操作符进行分组,得到其中,目标操作符组为操作符组4、5;目标操作数为操作数b。
执行步骤605之后,目标操作数与版本号之间的对应关系如表3所示,需要说明的是,该表4中还包含了目标操作数与其对应的操作符之间的对应关系。
表4
606、为尚未拥有版本号的同一操作数添加唯一的版本号。
基于表2所示的示例,“尚未分配版本号的操作数”包括:所对应的操作符中没有对操作数进行定值的操作符(例如操作数c、d、e),或,与目标操作数相同、但不属于目标操作符组中的操作符对应的操作数(例如操作符组1中的操作数a和操作符组3中的操作数b)。执行步骤606之后,该尚未拥有版本号的操作数与版本号之间的对应关系如表5所示。需要说明的是,该表5中还包含了尚未拥有版本号的操作数与其对应的操作符之间的对应关系。
表5
步骤603-606为大数据系统为9个逻辑查询树中的操作符对应的操作数添加版本号的过程。在执行步骤606之后,9个逻辑查询树中的操作符对应的操作数与版本号之间的对应关系如表6所示,其中,表6为表3、表4和表5的组合。
表6
通过表6可以看出,一个操作数可以对应一个/多个版本号,例如,操作数c对应版本号5,操作数b对应版本号1、2和4;一个操作符可以对应一个/多个操作数,例如,操作符11对应操作数a,操作符64对应操作数c和e。
607、将操作符对应的操作数的版本号映射到逻辑查询树中的对应的操作符上。
按照表6中的操作符与其对应的操作数的版本号之间的关系,为图7所示的9个逻辑查询树中的操作符映射版本号后得到的逻辑查询树如图8所示。其中,逻辑查询树中的矩形框中的数字代表操作符的标识,数字下方有带括号的数字时,括号内的数字代表该操作符对应的操作数的版本号;例如,如图8所示,逻辑查询树Q1A中的操作符15下方的“(0)”代表操作符15对应的操作数的版本号为0。需要说明的是,图8中仅为部分操作符对应的操作数标注了版本号,事实上,每个操作符对应的操作数都有其对应的版本号。
608、将n个逻辑查询树中的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为第一类分组,将其他逻辑查询树归为第二类分组。
如图8所示的逻辑查询树中,假设具有定值-引用关联关系、且所属不同逻辑查询树的操作符为:操作符15与操作符51,操作符25与操作符52,操作符84与操作符91;那么,步骤608可以具体实现为:将逻辑查询树Q1A、Q2A、Q5A、Q8A、Q9A归为第一类分组,其他逻辑查询树Q3A、Q4A、Q6A、Q7A分为第二类分组,如图9所示。
609、将第一类分组中的、版本号相同的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为一个子分组。
在如图9所示的第一类分组中,操作符15与操作符51具有定值-引用关联关系、且其对应的操作数版本号相同(版本号均为0);操作符25与操作符52具有定值-引用关联关系、且其对应的操作数版本号相同(版本号均为1);操作符84与操作符91具有定值-引用关联关系、且其对应的操作数版本号相同(版本号均为2)。因此,步骤610可以具体实现为:将逻辑查询树Q1A、Q2A和Q5A分为子分组1,将逻辑查询树Q8A和Q9A分为子分组2,如图10所示。
610、根据逻辑查询树间的版本号的重复程度将第二类分组中的逻辑查询树分为多个子分组。
本实施例中逻辑查询树间的版本号的重复程度通过逻辑查询树间的重复的版本号的种类及版本号的种类数来表征。
在如图9所示的第二类分组中,逻辑查询树Q3A与逻辑查询树Q6A存在共有的子树901,该共有的子树中的操作符对应的操作数的版本号为7,则逻辑查询树Q3A与逻辑查询树Q6A间重复的版本号为7,重复的版本号的种类数为1;逻辑查询树Q4A与逻辑查询树Q7A存在共有的子树902,该共有的子树中的操作符对应的操作数的版本号为6、5,则逻辑查询树Q4A与Q7A间的重复的版本号为6、5,重复的版本号的种类数为2;因此可以将Q3A、Q6A分为子分组1,将Q4A、Q7A分为子分组2,如图11所示。
步骤608-610为大数据查询系统根据版本号对n个逻辑查询树进行分组的过程,其中,步骤609和步骤610的执行顺序不分先后。
611、针对第一类分组中的各子分组,将版本号相同、具有定值-引用关联关系、且所属不同逻辑查询树的操作符之间建立前驱后继关系,使得第一类分组中的每个子分组中的各逻辑查询树合并为一个逻辑查询树。
例如,将图10中子分组1中的操作符中的操作符15与操作符51的后继操作符53之间建立前驱后继关系,操作符25与操作符52的后继操作符53之间建立前驱后继关系,并删除操作符51、52,使得操作符15、25、51所属的逻辑查询树合并为一个树;将子分组2中的操作符84与操作符91的后继操作符93之间建立前驱后继关系,并删除操作符91,使得操作符84、91所属的逻辑查询树合并为一个树;如图12所示。
612、针对第二类分组中的各子分组中的逻辑查询树,通过共有的子树将两个逻辑查询树合并为一个逻辑查询树。
例如,将图11中的子分组1中的逻辑查询树通过共有的子树901将两个逻辑查询树合并为一个逻辑查询树;将子分组2中的逻辑查询树通过共有的子树902将两个逻辑查询树合并为一个逻辑查询树,如图13所示。
步骤611-612为大数据查询系统对逻辑查询树进行组内优化的过程。其中,步骤611和步骤612的执行顺序不分先后。
613、为经过组内优化后的逻辑查询树添加虚拟根节点,形成总逻辑查询树,按照查询语句内的优化方法对总逻辑查询树中的操作符进行优化。
步骤613为大数据查询系统对逻辑查询树进行组间优化的过程。
如图14所示,为图13中的逻辑查询树添加虚拟根节点后形成的总逻辑查询树。
614、删除虚拟根节点,得到目标逻辑查询树;将得到的目标逻辑查询树生成物理任务。
在步骤614之后,该方法还可以包括:根据步骤614中得到的具有定值-引用关联关系或定值-定值关联关系操作符对应的物理任务之间添加有向边。
在步骤606之后步骤614之前,该方法还可以包括:为n个逻辑查询树中的、且出现次数大于或等于一阈值的版本号对应的操作符添加热数据标签。在步骤614之后,该方法还可以包括:将添加有相同热数据标签的、且不具有有向边的操作符生成的物理任务并行输出。
为了使大数据查询系统按照n个查询语句的先后执行顺序输出n个查询语句对应的查询结果,在步骤601之后步骤614之前,该方法还可以包括,为n个逻辑查询树生成的m个物理查询任务中的n个用于输出查询结果的物理查询任务添加指示标签I、II、III…,该指示标签用于使大数据查询系统按照该指示标签的顺序输出查询结果。例如,分别为图7所示的逻辑查询树Q1A、Q2A、Q3A…Q9A添加指示标签I、II、III…IX,在步骤614之后,大数据查询系统按照指示标签的顺序I、II、III…IX输出指示标签对应的逻辑查询树的查询结果。
本发明实施例提供的技术方案中,通过为多个查询语句生成的逻辑查询树中的操作符对应的操作数添加版本号,并根据版本号为逻辑查询树中的操作符进行优化,使得生成的物理任务的数量减少,达到有效提高查询效率的目的;相比现有技术来说,本发明实施例提供的技术方案不需要缓存历史的查询结果,节约了存储空间。解决了现有技术中的由于需要缓存历史逻辑查询树及其对应的查询结果而导致的占用大量的存储空间的问题。另外,本实施例根据版本号为多个逻辑查询树进行分组及子分组,不同的子分组中的操作符采用不同的优化方式,减少了寻找可以优化的操作符的时间,进一步提高了查询效率。
实施例三
本发明实施例提供一种查询语句的优化装置150,用以执行图1所示的查询语句的优化方法,如图15所示,查询语句的优化装置150包括:
接收单元1501,用于接收n个查询语句;其中,n≥2,n为整数;
生成单元1502,用于将所述n个查询语句生成n个逻辑查询树;
执行单元1503,用于根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号;其中,所述预设规则包括:不同操作数的版本号不同,操作符每次所定值的操作数的版本号不同,不同操作符组中的操作符对应的同一操作数的版本号不同;所述操作符组是指以对所述同一操作数进行定值的操作符为界限对所述n个逻辑查询树中的操作符进行分组后得到的一个分组;
优化单元1504,用于对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,以减少所述n个逻辑查询树生成的物理任务的数量。
可选的,所述执行单元1503具体用于:为所述n个逻辑查询树中的操作符每次所定值的操作数添加唯一的版本号;为目标操作符组中的操作符对应的目标操作数添加目标版本号;其中,所述目标操作符组中的首个操作符为对操作数进行定值的操作符,所述目标操作数为所述目标操作符组中的首个操作符所定值的操作数;所述目标版本号与该目标操作符组中的首个操作符所定值的操作数的版本号相同;为尚未拥有版本号的同一操作数添加唯一的版本号。
可选的,所述优化单元1504具体用于:
将所对应的操作数的版本号相同、具有定值-引用关联关系、且所属不同逻辑查询树的两个操作符中的对操作数进行定值的操作符与对操作数进行引用的操作符的后继之间建立前驱后继关系,并删除对操作数进行引用的操作符。
可选的,所述优化单元1504还用于:
为所对应的操作数的版本号相同、操作类型相同、且所属不同逻辑查询树的两个操作符添加合并分离标签;其中,所述合并分离标签用于使该两个操作符生成同一物理任务,并在执行该物理任务之后生成两个查询结果。
可选的,所述优化单元1504还用于:
通过共有的子树将两个逻辑查询树合并为一个逻辑查询树;其中,所述共有的子树中相应的操作符对应的版本号相同,所述共有的子树包含具有后继不具有前驱的操作符。
可选的,如图16所示,所述查询语句的优化装置150还可以包括:
确定单元1505,用于确定具有定值-引用关联关系或定值-定值关联关系的两个操作符;
所述执行单元1503还用于,在该两个操作符中的前一个操作符对应的物理任务与后一个操作符对应的物理任务之间添加有向边,以使得该前一个操作符对应的物理任务在该后一个操作符对应的物理任务之前输出。
可选的,所述执行单元1503还用于:为所述n个逻辑查询树中的、且出现次数大于或等于一阈值的版本号对应的操作符添加热数据标签;其中,相同热数据标签对应同一版本号;
所述查询语句的优化装置150还可以包括:输出单元1506,用于将添加有相同热数据标签的、且不具有有向边的操作符生成的物理任务并行输出。
可选的,所述查询语句的优化装置150还可以包括:
分类单元1507,用于将所述n个逻辑查询树中的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为第一类分组,将其他逻辑查询树归为第二类分组;
确定单元1505还用于,确定所述第一类分组的第一类优化方式和所述第二类分组的第二类优化方式;
所述优化单元1504具体用于:
按照所述第一类优化方式对所述第一类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化;
按照所述第二类优化方式对所述第二类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
可选的,所述分类单元1507还用于:将所述第一类分组中的、所对应的操作数的版本号相同的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为一个子分组;
所述优化单元1504具体用于:按照所述第一类优化方式分别对所述第一类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
可选的,所述分类单元1507还用于:根据逻辑查询树间的所对应的操作数的版本号的重复程度将所述第二类分组中的逻辑查询树分为多个子分组;
所述优化单元1504具体用于:按照所述第二类优化方式分别对所述第二类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
可选的,所述执行单元1503还用于:为对所述n个逻辑查询树进行优化后生成的m个逻辑查询树添加虚拟根节点,以形成总逻辑查询树;其中,n≥m≥1,m为整数;
优化单元1504具体用于,按照查询语句内的优化方法对所述总逻辑查询树中的操作符进行优化。
本发明实施例提供的技术方案中,通过为多个查询语句生成的逻辑查询树中的操作符对应的操作数添加版本号,并根据版本号为逻辑查询树中的操作符进行优化,使得生成的物理任务的数量减少,达到有效提高查询效率的目的;相比现有技术来说,本发明实施例提供的技术方案不需要缓存历史的查询结果,节约了存储空间。解决了现有技术中的由于需要缓存历史逻辑查询树及其对应的查询结果而导致的占用大量的存储空间的问题。
实施例四
在硬件实现上,实施例三中的接收单元可以为接收器;其他单元可以以硬件形式内嵌于或独立于查询语句的优化装置的处理器中,也可以以软件形式存储于查询语句的优化装置的存储器中,以便于处理器调用执行以上各个单元对应的操作,该处理器可以为中央处理单元(CPU)、微处理器、单片机等。
如图17所示,为本发明实施例提供的一种查询语句的优化装置170,用以执行图1所示的查询语句的优化方法,该查询语句的优化装置170包括:接收器1701、存储器1702、处理器1703和总线系统1704。
其中,存储器1702和处理器1703之间是通过总线系统1704耦合在一起的,其中总线系统1704除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统1704。
接收器1701,用于接收n个查询语句;其中,n≥2,n为整数;
存储器1702,用于存储一组代码;
存储器1702中存储的代码用于控制处理器1703执行以下动作:
将所述n个查询语句生成n个逻辑查询树;
根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号;其中,所述预设规则包括:不同操作数的版本号不同,操作符每次所定值的操作数的版本号不同,不同操作符组中的操作符对应的同一操作数的版本号不同;所述操作符组是指以对所述同一操作数进行定值的操作符为界限对所述n个逻辑查询树中的操作符进行分组后得到的一个分组;
对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,以减少所述n个逻辑查询树生成的物理任务的数量。
可选的,所述处理器1703具体用于:为所述n个逻辑查询树中的操作符每次所定值的操作数添加唯一的版本号;为目标操作符组中的操作符对应的目标操作数添加目标版本号;其中,所述目标操作符组中的首个操作符为对操作数进行定值的操作符,所述目标操作数为所述目标操作符组中的首个操作符所定值的操作数;所述目标版本号与该目标操作符组中的首个操作符所定值的操作数的版本号相同;为尚未拥有版本号的同一操作数添加唯一的版本号。
可选的,所述处理器1703具体用于:
将所对应的操作数的版本号相同、具有定值-引用关联关系、且所属不同逻辑查询树的两个操作符中的对操作数进行定值的操作符与对操作数进行引用的操作符的后继之间建立前驱后继关系,并删除对操作数进行引用的操作符。
可选的,所述处理器1703还用于:
为所对应的操作数的版本号相同、操作类型相同、且所属不同逻辑查询树的两个操作符添加合并分离标签;其中,所述合并分离标签用于使该两个操作符生成同一物理任务,并在执行该物理任务之后生成两个查询结果。
可选的,所述处理器1703还用于:
通过共有的子树将两个逻辑查询树合并为一个逻辑查询树;其中,所述共有的子树中相应的操作符对应的版本号相同,所述共有的子树包含具有后继不具有前驱的操作符。
可选的,所述处理器1703用于确定具有定值-引用关联关系或定值-定值关联关系的两个操作符;
所述处理器1703还用于,在该两个操作符中的前一个操作符对应的物理任务与后一个操作符对应的物理任务之间添加有向边,以使得该前一个操作符对应的物理任务在该后一个操作符对应的物理任务之前输出。
可选的,所述处理器1703还用于:
为所述n个逻辑查询树中的、且出现次数大于或等于一阈值的版本号对应的操作符添加热数据标签;其中,相同热数据标签对应同一版本号;
可选的,所述处理器1703用于将添加有相同热数据标签的、且不具有有向边的操作符生成的物理任务并行输出。
可选的,所述处理器1703用于将所述n个逻辑查询树中的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为第一类分组,将其他逻辑查询树归为第二类分组;
所述处理器1703还用于确定所述第一类分组的第一类优化方式和所述第二类分组的第二类优化方式;
所述处理器1703具体用于:
按照所述第一类优化方式对所述第一类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化;
按照所述第二类优化方式对所述第二类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
可选的,所述处理器1703还用于:
将所述第一类分组中的、所对应的操作数的版本号相同的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为一个子分组;
所述处理器1703具体用于:
按照所述第一类优化方式分别对所述第一类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
可选的,所述处理器1703还用于:
根据逻辑查询树间的所对应的操作数的版本号的重复程度将所述第二类分组中的逻辑查询树分为多个子分组;
所述处理器1703具体用于:
按照所述第二类优化方式分别对所述第二类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
可选的,所述处理器1703还用于:
为对所述n个逻辑查询树进行优化后生成的m个逻辑查询树添加虚拟根节点,以形成总逻辑查询树;其中,n≥m≥1,m为整数;
所述处理器1703具体用于按照查询语句内的优化方法对所述总逻辑查询树中的操作符进行优化。
本发明实施例提供的技术方案中,通过为多个查询语句生成的逻辑查询树中的操作符对应的操作数添加版本号,并根据版本号为逻辑查询树中的操作符进行优化,使得生成的物理任务的数量减少,达到有效提高查询效率的目的;相比现有技术来说,本发明实施例提供的技术方案不需要缓存历史的查询结果,节约了存储空间。解决了现有技术中的由于需要缓存历史逻辑查询树及其对应的查询结果而导致的占用大量的存储空间的问题。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (22)
1.一种查询语句的优化方法,其特征在于,包括:
接收n个查询语句;其中,n≥2,n为整数;
将所述n个查询语句生成n个逻辑查询树;
根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号;其中,所述预设规则包括:不同操作数的版本号不同,操作符每次所定值的操作数的版本号不同,不同操作符组中的操作符对应的同一操作数的版本号不同;所述操作符组是指以对所述同一操作数进行定值的操作符为界限对所述n个逻辑查询树中的操作符进行分组后得到的一个分组;
对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,以减少所述n个逻辑查询树生成的物理任务的数量。
2.根据权利要求1所述的方法,其特征在于,所述根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号,包括:
为所述n个逻辑查询树中的操作符每次所定值的操作数添加唯一的版本号;
为目标操作符组中的操作符对应的目标操作数添加目标版本号;其中,所述目标操作符组中的首个操作符为对操作数进行定值的操作符,所述目标操作数为所述目标操作符组中的首个操作符所定值的操作数;所述目标版本号与该目标操作符组中的首个操作符所定值的操作数的版本号相同;
为尚未拥有版本号的同一操作数添加唯一的版本号。
3.根据权利要求1或2所述的方法,其特征在于,所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
将所对应的操作数的版本号相同、具有定值-引用关联关系、且所属不同逻辑查询树的两个操作符中的对操作数进行定值的操作符与对操作数进行引用的操作符的后继之间建立前驱后继关系,并删除对操作数进行引用的操作符。
4.根据权利要求1-2任一项所述的方法,其特征在于,所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
为所对应的操作数的版本号相同、操作类型相同、且所属不同逻辑查询树的两个操作符添加合并分离标签;其中,所述合并分离标签用于使该两个操作符生成同一物理任务,并在执行该物理任务之后生成两个查询结果。
5.根据权利要求1-2任一项所述的方法,其特征在于,所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
通过共有的子树将两个逻辑查询树合并为一个逻辑查询树;其中,所述共有的子树中相应的操作符对应的版本号相同,所述共有的子树包含具有后继不具有前驱的操作符。
6.根据权利要求1-2任一项所述的方法,其特征在于,在所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化之后,所述方法还包括:
确定具有定值-引用关联关系或定值-定值关联关系的两个操作符;
在该两个操作符中的前一个操作符对应的物理任务与后一个操作符对应的物理任务之间添加有向边,以使得该前一个操作符对应的物理任务在该后一个操作符对应的物理任务之前输出。
7.根据权利要求1-2任一项所述的方法,其特征在于,在所述根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号之后,所述方法还包括:
为所述n个逻辑查询树中的、且出现次数大于或等于一阈值的版本号对应的操作符添加热数据标签;其中,相同热数据标签对应同一版本号;
将添加有相同热数据标签的、且不具有有向边的操作符生成的物理任务并行输出。
8.根据权利要求1-2任一项所述的方法,其特征在于,在所述根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号之后,所述方法还包括:
将所述n个逻辑查询树中的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为第一类分组,将其他逻辑查询树归为第二类分组;
确定所述第一类分组的第一类优化方式和所述第二类分组的第二类优化方式;
所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
按照所述第一类优化方式对所述第一类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化;
按照所述第二类优化方式对所述第二类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
9.根据权利要求8所述的方法,其特征在于,在所述将所述n个逻辑查询树中的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为第一类分组之后,所述方法还包括:
将所述第一类分组中的、所对应的操作数的版本号相同的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为一个子分组;
所述按照所述第一类优化方式对所述第一类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
按照所述第一类优化方式分别对所述第一类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
10.根据权利要求8所述的方法,其特征在于,在所述将其他逻辑查询树归为第二类分组之后,所述方法还包括:
根据逻辑查询树间的所对应的操作数的版本号的重复程度将所述第二类分组中的逻辑查询树分为多个子分组;
所述按照所述第二类优化方式对所述第二类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,包括:
按照所述第二类优化方式分别对所述第二类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
11.根据权利要求1-2任一项所述的方法,其特征在于,在所述对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化之后,所述方法还包括:
为对所述n个逻辑查询树进行优化后生成的m个逻辑查询树添加虚拟根节点,以形成总逻辑查询树;其中,n≥m≥1,m为整数;
按照查询语句内的优化方法对所述总逻辑查询树中的操作符进行优化。
12.一种查询语句的优化装置,其特征在于,包括:
接收单元,用于接收n个查询语句;其中,n≥2,n为整数;
生成单元,用于将所述n个查询语句生成n个逻辑查询树;
执行单元,用于根据预设规则为所述n个逻辑查询树中的操作符对应的操作数添加版本号;其中,所述预设规则包括:不同操作数的版本号不同,操作符每次所定值的操作数的版本号不同,不同操作符组中的操作符对应的同一操作数的版本号不同;所述操作符组是指以对所述同一操作数进行定值的操作符为界限对所述n个逻辑查询树中的操作符进行分组后得到的一个分组;
优化单元,用于对所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化,以减少所述n个逻辑查询树生成的物理任务的数量。
13.根据权利要求12所述的查询语句的优化装置,其特征在于,所述执行单元具体用于:
为所述n个逻辑查询树中的操作符每次所定值的操作数添加唯一的版本号;
为目标操作符组中的操作符对应的目标操作数添加目标版本号;其中,所述目标操作符组中的首个操作符为对操作数进行定值的操作符,所述目标操作数为所述目标操作符组中的首个操作符所定值的操作数;所述目标版本号与该目标操作符组中的首个操作符所定值的操作数的版本号相同;
为尚未拥有版本号的同一操作数添加唯一的版本号。
14.根据权利要求12或13所述的查询语句的优化装置,其特征在于,所述优化单元具体用于:
将所对应的操作数的版本号相同、具有定值-引用关联关系、且所属不同逻辑查询树的两个操作符中的对操作数进行定值的操作符与对操作数进行引用的操作符的后继之间建立前驱后继关系,并删除对操作数进行引用的操作符。
15.根据权利要求12-13任一项所述的查询语句的优化装置,其特征在于,所述优化单元还用于:
为所对应的操作数的版本号相同、操作类型相同、且所属不同逻辑查询树的两个操作符添加合并分离标签;其中,所述合并分离标签用于使该两个操作符生成同一物理任务,并在执行该物理任务之后生成两个查询结果。
16.根据权利要求12-13任一项所述的查询语句的优化装置,其特征在于,所述优化单元还用于:
通过共有的子树将两个逻辑查询树合并为一个逻辑查询树;其中,所述共有的子树中相应的操作符对应的版本号相同,所述共有的子树包含具有后继不具有前驱的操作符。
17.根据权利要求12-13任一项所述的查询语句的优化装置,其特征在于,所述查询语句的优化装置还包括:
确定单元,用于确定具有定值-引用关联关系或定值-定值关联关系的两个操作符;
所述执行单元还用于,在该两个操作符中的前一个操作符对应的物理任务与后一个操作符对应的物理任务之间添加有向边,以使得该前一个操作符对应的物理任务在该后一个操作符对应的物理任务之前输出。
18.根据权利要求12-13任一项所述的查询语句的优化装置,其特征在于,所述执行单元还用于:
为所述n个逻辑查询树中的、且出现次数大于或等于一阈值的版本号对应的操作符添加热数据标签;其中,相同热数据标签对应同一版本号;
所述查询语句的优化装置还包括:输出单元,用于将添加有相同热数据标签的、且不具有有向边的操作符生成的物理任务并行输出。
19.根据权利要求12-13任一项所述的查询语句的优化装置,其特征在于,所述查询语句的优化装置还包括:
分类单元,用于将所述n个逻辑查询树中的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为第一类分组,将其他逻辑查询树归为第二类分组;
确定单元还用于确定所述第一类分组的第一类优化方式和所述第二类分组的第二类优化方式;
所述优化单元具体用于:
按照所述第一类优化方式对所述第一类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化;
按照所述第二类优化方式对所述第二类分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
20.根据权利要求19所述的查询语句的优化装置,其特征在于,所述分类单元还用于:
将所述第一类分组中的、所对应的操作数的版本号相同的、且具有定值-引用关联关系的操作符所属的逻辑查询树归为一个子分组;
所述优化单元具体用于:
按照所述第一类优化方式分别对所述第一类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
21.根据权利要求19所述的查询语句的优化装置,其特征在于,所述分类单元还用于:
根据逻辑查询树间的所对应的操作数的版本号的重复程度将所述第二类分组中的逻辑查询树分为多个子分组;
所述优化单元具体用于:
按照所述第二类优化方式分别对所述第二类分组中的子分组中的所对应的操作数的版本号相同、且所属不同逻辑查询树的操作符进行优化。
22.根据权利要求12-13任一项所述的查询语句的优化装置,其特征在于,所述执行单元还用于:
为对所述n个逻辑查询树进行优化后生成的m个逻辑查询树添加虚拟根节点,以形成总逻辑查询树;其中,n≥m≥1,m为整数;
优化单元具体用于按照查询语句内的优化方法对所述总逻辑查询树中的操作符进行优化。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410711901.1A CN105701128B (zh) | 2014-11-28 | 2014-11-28 | 一种查询语句的优化方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410711901.1A CN105701128B (zh) | 2014-11-28 | 2014-11-28 | 一种查询语句的优化方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105701128A CN105701128A (zh) | 2016-06-22 |
CN105701128B true CN105701128B (zh) | 2019-03-08 |
Family
ID=56230509
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410711901.1A Active CN105701128B (zh) | 2014-11-28 | 2014-11-28 | 一种查询语句的优化方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105701128B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107545015B (zh) * | 2016-06-29 | 2020-12-04 | 华为技术有限公司 | 一种查询故障的处理方法及处理装置 |
CN106611044B (zh) * | 2016-12-02 | 2020-05-08 | 星环信息科技(上海)有限公司 | 一种sql优化方法及设备 |
CN110502532B (zh) * | 2019-08-26 | 2021-06-01 | 上海达梦数据库有限公司 | 远程数据库对象的优化方法、装置、设备和存储介质 |
CN111563101B (zh) * | 2020-07-11 | 2020-12-29 | 阿里云计算有限公司 | 执行计划优化方法、装置、设备及存储介质 |
CN112308328B (zh) * | 2020-11-09 | 2023-06-06 | 中国科学院计算技术研究所 | 面向Top-Down网络测量系统的并行测量任务的优化方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929996A (zh) * | 2012-10-24 | 2013-02-13 | 华南理工大学 | XPath查询优化方法及系统 |
CN103902543A (zh) * | 2012-12-25 | 2014-07-02 | 华为技术有限公司 | 数据库查询方法和装置及数据库系统 |
US8832077B1 (en) * | 2011-05-04 | 2014-09-09 | Google Inc. | Selectively retrieving search results in accordance with different logical relationships |
-
2014
- 2014-11-28 CN CN201410711901.1A patent/CN105701128B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8832077B1 (en) * | 2011-05-04 | 2014-09-09 | Google Inc. | Selectively retrieving search results in accordance with different logical relationships |
CN102929996A (zh) * | 2012-10-24 | 2013-02-13 | 华南理工大学 | XPath查询优化方法及系统 |
CN103902543A (zh) * | 2012-12-25 | 2014-07-02 | 华为技术有限公司 | 数据库查询方法和装置及数据库系统 |
Non-Patent Citations (2)
Title |
---|
Hive - a petabyte scale data warehouse using Hadoop;Ashish Thusoo等;《IEEE》;20101231;第996-1005页 * |
基于Oracle数据库SQL查询语句优化规则的研究;吴洁明等;《陕西理工学院学报(自然科学版)》;20130831;第29卷(第4期);第34-38页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105701128A (zh) | 2016-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105701128B (zh) | 一种查询语句的优化方法和装置 | |
CN105550225B (zh) | 索引构建方法、查询方法及装置 | |
CN109146447A (zh) | 区块链透明分片方法、装置及系统 | |
US20170255673A1 (en) | Batch Data Query Method and Apparatus | |
CN104298541A (zh) | 云存储系统的数据分布算法及其装置 | |
CN107391554A (zh) | 高效分布式局部敏感哈希方法 | |
CN104331421A (zh) | 一种大数据的高效处理方法及系统 | |
CN103369042A (zh) | 一种数据处理方法和装置 | |
US8938443B2 (en) | Runtime optimization of spatiotemporal events processing | |
CN103177035A (zh) | 一种在数据库中查询数据的装置及方法 | |
CN113900810A (zh) | 分布式图处理方法、系统及存储介质 | |
CN103810223B (zh) | 一种基于数据分组的内存数据组织查询方法 | |
CN103823846A (zh) | 一种基于图论的大数据存储及查询方法 | |
CN103425729A (zh) | 管理计算机系统中的内存 | |
CN106201917B (zh) | 一种数据处理系统和方法 | |
US20240095260A1 (en) | Multi-subgraph matching method and apparatus, and device | |
CN105550332A (zh) | 一种基于双层索引结构的起源图查询方法 | |
CN104283966A (zh) | 云存储系统的数据分布算法及其装置 | |
CN102915344A (zh) | 一种sql语句处理方法及装置 | |
CN108920105A (zh) | 基于社区结构的图数据分布式存储方法及装置 | |
US20070094214A1 (en) | Parallelization of bayesian network structure learning | |
CN106446289B (zh) | 基于Pinpoint的信息查询方法和装置 | |
CN106649385B (zh) | 基于HBase数据库的数据排序方法和装置 | |
KR101780534B1 (ko) | 이미지 기반 검색을 위한 맵리듀스 기반의 이미지 특징 추출 방법 및 시스템 | |
CN107204998B (zh) | 处理数据的方法和装置 |
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 |