SQL语句的处理方法及装置制造方法及图纸

技术编号:21658576 阅读:24 留言:0更新日期:2019-07-20 05:37
本发明专利技术实施例提供一种SQL语句的处理方法及装置,其中方法包括生成SQL语句的执行计划,从第一执行顺位的计算组件开始,根据执行计划中是否存在Agg Node计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。本发明专利技术实施例减少冗余计算,数据量越大,效果越明显,特别是PB级别的海量计算。

Processing Method and Device of SQL Statement

【技术实现步骤摘要】
SQL语句的处理方法及装置
本专利技术实施例涉及数据库
,更具体地,涉及一种SQL语句的处理方法及装置。
技术介绍
结构化查询语言(StructuredQueryLanguage)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL语句中会包含表达式,并且会存在重复的表达式,在SQL语句的解析过程中,首先计算表达式,再做后续计算,但是并没有缓存表达式计算的结果。例如SQL语句:groupbya+b,算完了a+b之后,接着做分组计算(groupby),不管后面是否会用到a+b,都不会缓存a+b的结果。对于重复的表达式,如果数据分析引擎每次都做计算,数据分析引擎会做大量的冗余计算,数据分析引擎处理的数据量越大,冗余计算就越多。
技术实现思路
本专利技术实施例提供一种克服上述问题或者至少部分地解决上述问题的SQL语句的处理方法及装置。第一个方面,本专利技术实施例提供一种SQL语句的处理方法,包括:利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;从第一执行顺位的计算组件开始,根据执行计划中是否存在AggNode计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;若所述执行计划中不存在AggNode计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至ScanNode计算组件输出的预设位置。第二个方面,本专利技术实施例提供一种SQL语句的处理装置,包括:执行计划生成模块,用于利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;重复表达式查询模块,用于从第一执行顺位的计算组件开始,根据执行计划中是否存在AggNode计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;预留模块,用于若所述执行计划中不存在AggNode计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至ScanNode计算组件输出的预设位置。第三方面,本专利技术实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所提供的方法的步骤。第四方面,本专利技术实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。本专利技术实施例提供的SQL语句的处理方法及装置,通过重复表达式预留,减少冗余计算,数据量越大,效果越明显,特别是PB级别的海量计算。计算分离,将表达式计算和其他计算显示分离,使得表达式对计算组件是透明的,计算组件只需考虑普通的列就可以,降低计算组件(agg算子、sort算子、join算子)的设计和开发难度,使得计算组件的软件架构更加清晰。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例提供的SQL语句的处理方法的流程示意图;图2为现有技术的执行计划的流程示意图;图3为本专利技术实施例的执行计划的流程示意图;图4为本专利技术实施例提供的SQL语句的处理装置的结构示意图;图5为本专利技术实施例提供的电子设备的实体结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。为了更好地理解本专利技术实施例,现对本专利技术实施例出现的各技术名词进行解释:Tuple:元组,是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。TupleSchema:描述Tuple的元数据。其中含有SlotSchame的一个列表,每个SlotSchame对应着Tuple中的一个列。SlotSchame:描述列的信息,例如列的类型,长度等。ScanNode:读取数据的组件,从表中读取数据,并做过滤。每个ScanNode对应一个Table(表),如果是selfjoin,Planner在生成执行计划时,也会产生两个ScanNode。Planner:根据SQL语句产生执行计划的组件。JoinNode:计算两个表的关联的计算组件。如果SQL语句中有多个join,那么Planner在生成执行计划时,也会产生多个JoinNode。AggNode:用来做分组、聚集运算、过滤(having中的过滤条件)的计算组件,计算SQL语句中的groupby、聚集函数、distinct、having。SortNode:用来做数据排序的计算组件,计算SQL语句中的orderby子语句。OutputNode:用来计算SQL语句中projection中的表达式的计算组件,例如selecta+bfromt中的a+b。在对SQL语句进行解析的过程中,Planner会根据SQL语句产生执行计划,并为ScanNode和AggNode生成TupleSchema,然后从执行计划最下面开始逐层往上优化,每个Node都有表达式列表(EXPRESSIONLIST),每个Node会先计算表达式列表中的表达式,表达式中包含保存算结果的位置信息,再进行后续的计算(关联、分组、排序等)。图1为本专利技术实施例提供的SQL语句的处理方法的流程示意图,如图1所示,包括:S101、利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位。执行计划由多种Node组合而成(例如ScanNode,jn,an等等),有这些node按照执行顺序进行排列即形成了执行计划。下面以一个具体实施例来说明本专利技术实施例的SQL语言的执行过程。某电信运营商,想查询2018年11月份,通话费用与短信费用之和超过20元的用户的信息,该电信运营商下发的SQL如下:Selectt1.id,t1.age,t1.name,t1.cola+t2.colbfromtable1t1jointable2t2ont1.id=t2.idwheret1.cola+t2.colb>50andt1.colc=‘201811’andt2.cold=‘201811’orderbyt1.cola+t2.colb其中,table1是数据库的一张表,这张表包含了:用户ID、姓名、年龄等,还有每个月的花费信息(cola),月份信息(colc),该表中本文档来自技高网...

【技术保护点】
1.一种SQL语句的处理方法,其特征在于,包括:利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;从第一执行顺位的计算组件开始,根据执行计划中是否存在Agg Node计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。

【技术特征摘要】
1.一种SQL语句的处理方法,其特征在于,包括:利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;从第一执行顺位的计算组件开始,根据执行计划中是否存在AggNode计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;若所述执行计划中不存在AggNode计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至ScanNode计算组件输出的预设位置。2.根据权利要求1所述的处理方法,其特征在于,若所述执行计划中存在AggNode计算组件,则对于AggNode计算组件之前执行顺位的当前计算组件,将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至ScanNode计算组件输出的预设位置;对于AggNode计算组件之后执行顺位的当前计算组件,将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至AggNode计算组件输出的预设位置。3.根据权利要求1所述的处理方法,其特征在于,所述查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式,具体为:若当前计算组件为ScanNode计算组件且执行计划中不存在AggNode计算组件,则查询ScanNode计算组件与后续执行顺序的所有计算机组件之间存在的重复表达式;若当前计算组件为ScanNode计算组件且执行计划中存在AggNode计算组件,则查询ScanNode计算组件与AggNode计算组件中的特定表达式之间存在的重复表达式;其中,所述特定表达式为AggNode计算组件中分组计算的表达式以及聚集函数参数中的表达式。4.根据权利要求1所述的处理方法,其特征在于,所述查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式,具体为:若当前计算组件为JoinNode计算组件,则根据SQL语句中join的顺序生成JoinNode计算组件的二叉树,采样后续遍历的方式查询当前计算组件与父系节点直至根节点中的表达式以及根节点后续执行顺位的计算组件之间存在的重复表达式;同时,若所述执行计划中存在AggNode计算组件,还查询当前计算组件与AggNode计算组件中的特定表达式之间...

【专利技术属性】
技术研发人员:刘垚何献青田俊
申请(专利权)人:北京东方国信科技股份有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1