CN110032574A - Sql语句的处理方法及装置 - Google Patents
Sql语句的处理方法及装置 Download PDFInfo
- Publication number
- CN110032574A CN110032574A CN201910171270.1A CN201910171270A CN110032574A CN 110032574 A CN110032574 A CN 110032574A CN 201910171270 A CN201910171270 A CN 201910171270A CN 110032574 A CN110032574 A CN 110032574A
- Authority
- CN
- China
- Prior art keywords
- computation module
- expression formula
- node
- agg
- computation
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种SQL语句的处理方法及装置,其中方法包括生成SQL语句的执行计划,从第一执行顺位的计算组件开始,根据执行计划中是否存在Agg Node计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。本发明实施例减少冗余计算,数据量越大,效果越明显,特别是PB级别的海量计算。
Description
技术领域
本发明实施例涉及数据库技术领域,更具体地,涉及一种SQL语句的处理方法及装置。
背景技术
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL语句中会包含表达式,并且会存在重复的表达式,在SQL语句的解析过程中,首先计算表达式,再做后续计算,但是并没有缓存表达式计算的结果。例如SQL语句:group bya+b,算完了a+b之后,接着做分组计算(group by),不管后面是否会用到a+b,都不会缓存a+b的结果。
对于重复的表达式,如果数据分析引擎每次都做计算,数据分析引擎会做大量的冗余计算,数据分析引擎处理的数据量越大,冗余计算就越多。
发明内容
本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的SQL语句的处理方法及装置。
第一个方面,本发明实施例提供一种SQL语句的处理方法,包括:
利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;
从第一执行顺位的计算组件开始,根据执行计划中是否存在Agg Node计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;
若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。
第二个方面,本发明实施例提供一种SQL语句的处理装置,包括:
执行计划生成模块,用于利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;
重复表达式查询模块,用于从第一执行顺位的计算组件开始,根据执行计划中是否存在Agg Node计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;
预留模块,用于若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所提供的方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。
本发明实施例提供的SQL语句的处理方法及装置,通过重复表达式预留,减少冗余计算,数据量越大,效果越明显,特别是PB级别的海量计算。计算分离,将表达式计算和其他计算显示分离,使得表达式对计算组件是透明的,计算组件只需考虑普通的列就可以,降低计算组件(agg算子、sort算子、join算子)的设计和开发难度,使得计算组件的软件架构更加清晰。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的SQL语句的处理方法的流程示意图;
图2为现有技术的执行计划的流程示意图;
图3为本发明实施例的执行计划的流程示意图;
图4为本发明实施例提供的SQL语句的处理装置的结构示意图;
图5为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了更好地理解本发明实施例,现对本发明实施例出现的各技术名词进行解释:
Tuple:元组,是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。
Tuple Schema:描述Tuple的元数据。其中含有Slot Schame的一个列表,每个SlotSchame对应着Tuple中的一个列。
Slot Schame:描述列的信息,例如列的类型,长度等。
Scan Node:读取数据的组件,从表中读取数据,并做过滤。每个Scan Node对应一个Table(表),如果是self join,Planner在生成执行计划时,也会产生两个Scan Node。
Planner:根据SQL语句产生执行计划的组件。
Join Node:计算两个表的关联的计算组件。如果SQL语句中有多个join,那么Planner在生成执行计划时,也会产生多个Join Node。
Agg Node:用来做分组、聚集运算、过滤(having中的过滤条件)的计算组件,计算SQL语句中的group by、聚集函数、distinct、having。
Sort Node:用来做数据排序的计算组件,计算SQL语句中的order by子语句。
Output Node:用来计算SQL语句中projection中的表达式的计算组件,例如select a+b from t中的a+b。
在对SQL语句进行解析的过程中,Planner会根据SQL语句产生执行计划,并为ScanNode和Agg Node生成Tuple Schema,然后从执行计划最下面开始逐层往上优化,每个Node都有表达式列表(EXPRESSION LIST),每个Node会先计算表达式列表中的表达式,表达式中包含保存算结果的位置信息,再进行后续的计算(关联、分组、排序等)。
图1为本发明实施例提供的SQL语句的处理方法的流程示意图,如图1所示,包括:
S101、利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位。
执行计划由多种Node组合而成(例如Scan Node,jn,an等等),有这些node按照执行顺序进行排列即形成了执行计划。下面以一个具体实施例来说明本发明实施例的SQL语言的执行过程。
某电信运营商,想查询2018年11月份,通话费用与短信费用之和超过20元的用户的信息,该电信运营商下发的SQL如下:
Select t1.id,t1.age,t1.name,t1.cola+t2.colb from table1t1jointable2t2on t1.id=t2.id where t1.cola+t2.colb>50and t1.colc=‘201811’andt2.cold=‘201811’order by t1.cola+t2.colb
其中,table1是数据库的一张表,这张表包含了:用户ID、姓名、年龄等,还有每个月的花费信息(cola),月份信息(colc),该表中的一行数据,对应某个用户,在某个月的通话费用。table2也是数据库的一张表,这张表包含了:用户ID、每个月的短信费用(colb)、月份信息(cold),该表中的一行数据,对应某个用户,在某个月的短信费用。
图2为现有技术的执行计划的流程示意图,其中箭头表示数据的流向,每个Node代表一种计算组件,会做相应的运算。在图2中存在两个Scan Node计算组件,分别用于读取表1和表2,之后由Join Node计算组件计算两个表的关联,例如表1中通话费用和表2中短信费用大于50元的用户(t1.cola+t2.colb>50)。Sort Node计算组件用来做数据排序,用代码表示为:t1.cola+t2.colb。Output Node计算组件则用于计算SQL中projection中的表达式的计算组件,用代码表示为:t1.cola+t2.colb。
S102、从第一执行顺位的计算组件开始,根据执行计划中是否存在Agg Node计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式。
由于Agg Node会产生新的tuple schema,所以Scan Node做重复表达式预留时,不能考虑Agg Node之上的其他Node中的表达式。Agg Node之上的所有Node用到的元数据和数据都变了。Agg Node之上的Node中的表达式和AggNode之下的Node中的表达式,即使写法是一样的(比如都是ColumnA+ColumnB),那也不是相同的表达式,就像叫相同名字的两个人,虽然同名,但是是两个不同的人。因此本发明以是否存在Agg Node计算组件来分情况查询重复表达式。
可以理解的是,每个计算组件都包含多个表达式,表达式中包含column(即列),column中包含tuple id和slot id,每个tuple id对应一个tuple schema,slot id对应tuple schema中的一个slot schema,tuple id和slot id相当于一个二维坐标,用来映射保存该column的数据的位置信息,图3为本发明实施例的执行计划的流程示意图,如图3所示,其中“col_预留”是“t1.cola+t2.colb”计算结果的缓存,即在排序和输出结果时,不需要再计算“t1.cola+t2.colb”。Planner计算组件会根据SQL语句产生执行计划,并为ScanNode计算组件和Agg Node计算组件生成Tuple Schema,然后从执行计划最下面开始逐层往上优化,即从Scan Node计算组件开始,然后是Join Node计算组件,然后是Agg Node计算组件以此类推。每个Node都有EXPRESSION LIST,每个Node会先计算EXPRESSION LIST中的表达式,表达式中包含保存算结果的位置信息,再进行后续的计算。通过和图2对比可知,图3中的Sort Node计算组件和Output Node计算组件均要重复计算“t1.cola+t2.colb”,效率较本发明实施例低。
S103、若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。
若执行计划中不存在agg node计算组件,则将重复表达式填入当前处理的计算组件中的表达式列表(EXPRESSION LIST)中,在Scan Node计算组件的tuple schema中预留位置,然后将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。
在进行解析时,以Scan Node计算组件为例,Scan Node计算组件计算表达式的时候,如果发现该表达式被标记为重复表达式,那么会将计算结果保存到Tuple中给其预留的位置,其他Node在做数据计算时看到的是普通的column(列),通过column中的位置信息,直接从Tuple中读取数据并做后续的计算(例如Join Node,可以直接做join,避免冗余的计算,如果Join Node的一些表达式没有和Scan Node中的表达式重复,那么这些表达式就需要在Join Node中做计算)。
本发明实施例通过重复表达式预留,减少冗余计算,数据量越大,效果越明显,特别是PB级别的海量计算。计算分离,将表达式计算和其他计算显示分离,使得表达式对计算组件是透明的,计算组件只需考虑普通的列就可以,降低计算组件(agg算子、sort算子、join算子)的设计和开发难度,使得计算组件的软件架构更加清晰。
在上述各实施例的基础上,作为一种可选实施例,若执行计划中存在Agg Node计算组件,则以agg node计算组件为分水岭,存在两种处理方法,具体为:
对于Agg Node计算组件之前执行顺位的当前计算组件,将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置;
对于Agg Node计算组件之后执行顺位的当前计算组件,将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Agg Node计算组件输出的预设位置。
需要说明的是,由于agg node计算组件会对数据做分组、聚集运算,这样操作的结果就是会改变数据,因此不能用原有数据的元数据来描述,需要用新的元数据来描述。
在上述各实施例的基础上,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式,具体为:
若当前计算组件为Scan Node计算组件且执行计划中不存在Agg Node计算组件,则查询Scan Node计算组件与后续执行顺序的所有计算机组件之间存在的重复表达式;
若当前计算组件为Scan Node计算组件且执行计划中存在Agg Node计算组件,则查询Scan Node计算组件与Agg Node计算组件中的特定表达式之间存在的重复表达式;
其中,所述特定表达式为Agg Node计算组件中分组计算的表达式以及聚集函数参数中的表达式(例如max(a+b+c),指需要判断是否和a+b+c重复)。也就是说,当执行计划存在Agg Node计算组件时,不需要判断Agg Node中having过滤中的表达式,以及Agg Node后续执行顺位的那些Node中的表达式。
此外,对于分组计算中没有被预留的表达式,也需要进行强制预留,即后续计算涉及到的表达式没有与该表达式重复的。这样再做分组计算时,用到的都是column,不涉及到表达式。
在上述各实施例的基础上,若当前计算组件为Join Node计算组件,则根据SQL语句中join的顺序生成Join Node计算组件的二叉树,采样后续遍历的方式查询当前计算组件与父系节点直至根节点中的表达式以及根节点后续执行顺位的计算组件之间存在的重复表达式。
需要说明的是,父系节点即某个节点的父节点、父节点的父节点、父节点的父节点的父节点等等,也就是说不需要考虑兄弟节点。
同时,若所述执行计划中存在Agg Node计算组件,还查询当前计算组件与AggNode计算组件中的特定表达式之间存在的重复表达式;其中,所述特定表达式为Agg Node计算组件中分组计算的表达式以及聚集函数参数中的表达式。
对于Join Node中的等值连接条件如果包含表达式,也许进行预留,这样JoinNode按照等值连接条件计算表的关联时,看到的都是column=column这种模式。例如两种等值连接条件:t1.id=t2.id和t1.a+t2.b=t3.c,第二个等值连接条件中就包含表达式。
在数据计算阶段,Join Node并不会产生新的tuple,Join Node复用Scan Node产生的tuple,即Join Node会将计算结果以覆盖的方式,保存到Scan Node产生的tuple中,所以Join Node没有自己的Tuple Schema,而是复用Scan Node的Tuple Schema。表达式预留优化器如果发现Join Node中有与其他Node重复的表达式,那么表达式预留优化器会在Scan Node的Tuple Schame中,给重复表达式预留位置,有几个重复表达式,就预留几个列,用来保存重复表达式的计算结果,将表达式填入Join Node的表达式列表中,并将表达式的结果保存的位置映射到预留的位置,然后将其他Node中的相应重复的表达式改成column(列),并将column(列)的数据位置信息映射到Scan Node输出的tuple中预留的位置,这样其他Node在做计算时,他看到的是普通的列,可以直接做后续的计算。
在上述各实施例的基础上,若当前计算组件为Agg Node计算组件,则查询当前计算组件中分组计算涉及到的所有表达式以及修改为column列形式的表达式,共同作为参考表达式,查询后续执行顺位的计算组件中与所述参考表达式重复的表达式。
将重复表达式填入Agg Node计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Agg Node计算组件输出的预设位置;同时,将分组计算中的非重复的表达式计算结果映射至Agg Node计算组件输出的预设位置。
此外,对于Agg Node计算组件的分组计算中没有被预留的表达式(即后续计算涉及到的表达式没有与该表达式重复的),也需要进行预留,这样再做分组计算时,用到的都是column,不涉及到表达式。
在上述各实施例的基础上,若当前计算组件为Sort Node,则查询当前计算组件与后续执行顺位的计算组件之间存在的重复表达式;
相应的,所述处理方法还包括:
将Sort Node计算组件中的非重复的表达式计算结果映射至Scan Node计算组件或Agg Node计算组件输出的预设位置。可以理解的是,非重复的表达式的计算结果映射到Scan Node计算组件还是Agg Node计算组件,根据执行计划中是否存在Agg Node计算组件来确定。
本发明实施例不需要看Output Node计算组件,因为Output Node计算组件是执行计划的root Node,所以不存在重复的表达式。
图4为本发明实施例提供的SQL语句的处理装置的结构示意图,如图4所示,该SQL语句的处理装置包括:执行计划生成模块401、重复表达式查询模块402和预留模块403,其中:
执行计划生成模块401,用于利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;
重复表达式查询模块402,用于从第一执行顺位的计算组件开始,根据执行计划中是否存在Agg Node计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;
预留模块403,用于若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。
本发明实施例提供的SQL语句的处理装置,具体执行上述各SQL语句的处理方法实施例流程,具体请详见上述各SQL语句的处理方法实施例的内容,在此不再赘述。本发明实施例提供的SQL语句的处理装置通过重复表达式预留,减少冗余计算,数据量越大,效果越明显,特别是PB级别的海量计算。计算分离,将表达式计算和其他计算显示分离,使得表达式对计算组件是透明的,计算组件只需考虑普通的列就可以,降低计算组件(agg算子、sort算子、join算子)的设计和开发难度,使得计算组件的软件架构更加清晰。
图5为本发明实施例提供的电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(Communications Interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储在存储器530上并可在处理器510上运行的计算机程序,以执行上述各实施例提供的SQL语句的处理方法,例如包括:利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;从第一执行顺位的计算组件开始,根据执行计划中是否存在AggNode计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的SQL语句的处理方法,例如包括:利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;从第一执行顺位的计算组件开始,根据执行计划中是否存在Agg Node计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至ScanNode计算组件输出的预设位置。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种SQL语句的处理方法,其特征在于,包括:
利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;
从第一执行顺位的计算组件开始,根据执行计划中是否存在Agg Node计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;
若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。
2.根据权利要求1所述的处理方法,其特征在于,若所述执行计划中存在Agg Node计算组件,则对于Agg Node计算组件之前执行顺位的当前计算组件,将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置;
对于Agg Node计算组件之后执行顺位的当前计算组件,将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Agg Node计算组件输出的预设位置。
3.根据权利要求1所述的处理方法,其特征在于,所述查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式,具体为:
若当前计算组件为Scan Node计算组件且执行计划中不存在Agg Node计算组件,则查询Scan Node计算组件与后续执行顺序的所有计算机组件之间存在的重复表达式;
若当前计算组件为Scan Node计算组件且执行计划中存在Agg Node计算组件,则查询Scan Node计算组件与Agg Node计算组件中的特定表达式之间存在的重复表达式;
其中,所述特定表达式为Agg Node计算组件中分组计算的表达式以及聚集函数参数中的表达式。
4.根据权利要求1所述的处理方法,其特征在于,所述查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式,具体为:
若当前计算组件为Join Node计算组件,则根据SQL语句中join的顺序生成Join Node计算组件的二叉树,采样后续遍历的方式查询当前计算组件与父系节点直至根节点中的表达式以及根节点后续执行顺位的计算组件之间存在的重复表达式;
同时,若所述执行计划中存在Agg Node计算组件,还查询当前计算组件与Agg Node计算组件中的特定表达式之间存在的重复表达式;
其中,所述特定表达式为Agg Node计算组件中分组计算的表达式以及聚集函数参数中的表达式。
5.根据权利要求1所述的处理方法,其特征在于,所述查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式,具体为:
若当前计算组件为Agg Node计算组件,则查询当前计算组件中分组计算涉及到的所有表达式以及修改为column列形式的表达式,共同作为参考表达式,查询后续执行顺位的计算组件中与所述参考表达式重复的表达式。
6.根据权利要求5所述的处理方法,其特征在于,还包括:
将重复表达式填入Agg Node计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Agg Node计算组件输出的预设位置;
同时,将分组计算中的非重复的表达式计算结果映射至Agg Node计算组件输出的预设位置。
7.根据权利要求1所述的处理方法,其特征在于,所述查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式,具体为:
若当前计算组件为Sort Node,则查询当前计算组件与后续执行顺位的计算组件之间存在的重复表达式;
相应的,所述处理方法还包括:
将Sort Node计算组件中的非重复的表达式计算结果映射至Scan Node计算组件或AggNode计算组件输出的预设位置。
8.一种SQL语句的处理装置,其特征在于,包括:
执行计划生成模块,用于利用Planner计算组件生成SQL语句的执行计划,所述执行计划用于表征各计算组件的执行顺序,同一类型的计算组件属于同一执行顺位;
重复表达式查询模块,用于从第一执行顺位的计算组件开始,根据执行计划中是否存在Agg Node计算组件,查询当前计算组件与后续执行顺位的其他计算组件之间存在的重复表达式;
预留模块,用于若所述执行计划中不存在Agg Node计算组件,则将所述重复表达式填入当前计算组件中的表达式列表中,将其他计算组件中的重复表达式修改为column列形式,将所述重复表达式的计算结果和column列形式的数据位置信息映射至Scan Node计算组件输出的预设位置。
9.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中:
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至7中任意一项所述的SQL语句的处理方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至7中任意一项所述的SQL语句的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910171270.1A CN110032574B (zh) | 2019-03-07 | 2019-03-07 | Sql语句的处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910171270.1A CN110032574B (zh) | 2019-03-07 | 2019-03-07 | Sql语句的处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110032574A true CN110032574A (zh) | 2019-07-19 |
CN110032574B CN110032574B (zh) | 2021-02-02 |
Family
ID=67235095
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910171270.1A Active CN110032574B (zh) | 2019-03-07 | 2019-03-07 | Sql语句的处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110032574B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515971A (zh) * | 2019-08-09 | 2019-11-29 | 金蝶软件(中国)有限公司 | 程序语句处理方法、装置、计算机设备和计算机存储介质 |
CN117407430A (zh) * | 2023-12-05 | 2024-01-16 | 支付宝(杭州)信息技术有限公司 | 数据查询方法、装置、计算机设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140258266A1 (en) * | 2013-03-06 | 2014-09-11 | Oracle International Corporation | Methods and apparatus of shared expression evaluation across rdbms and storage layer |
CN104391895A (zh) * | 2014-11-12 | 2015-03-04 | 珠海世纪鼎利通信科技股份有限公司 | 一种基于云计算的sql语句处理系统 |
CN107506365A (zh) * | 2017-06-26 | 2017-12-22 | 杭州沃趣科技股份有限公司 | 一种对输出列进行合并计算的方法 |
CN107798025A (zh) * | 2016-09-05 | 2018-03-13 | 华为技术有限公司 | 存储过程的运行、编译方法、装置和数据库系统 |
CN108959571A (zh) * | 2018-07-04 | 2018-12-07 | 上海达梦数据库有限公司 | Sql语句的运算方法、装置、终端设备及存储介质 |
CN109145013A (zh) * | 2018-08-10 | 2019-01-04 | 上海达梦数据库有限公司 | 一种表达式转换方法、装置、设备及存储介质 |
CN109308300A (zh) * | 2018-09-27 | 2019-02-05 | 上海达梦数据库有限公司 | 一种逻辑运算的处理方法、装置、转换插件及存储介质 |
-
2019
- 2019-03-07 CN CN201910171270.1A patent/CN110032574B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140258266A1 (en) * | 2013-03-06 | 2014-09-11 | Oracle International Corporation | Methods and apparatus of shared expression evaluation across rdbms and storage layer |
CN104391895A (zh) * | 2014-11-12 | 2015-03-04 | 珠海世纪鼎利通信科技股份有限公司 | 一种基于云计算的sql语句处理系统 |
CN107798025A (zh) * | 2016-09-05 | 2018-03-13 | 华为技术有限公司 | 存储过程的运行、编译方法、装置和数据库系统 |
CN107506365A (zh) * | 2017-06-26 | 2017-12-22 | 杭州沃趣科技股份有限公司 | 一种对输出列进行合并计算的方法 |
CN108959571A (zh) * | 2018-07-04 | 2018-12-07 | 上海达梦数据库有限公司 | Sql语句的运算方法、装置、终端设备及存储介质 |
CN109145013A (zh) * | 2018-08-10 | 2019-01-04 | 上海达梦数据库有限公司 | 一种表达式转换方法、装置、设备及存储介质 |
CN109308300A (zh) * | 2018-09-27 | 2019-02-05 | 上海达梦数据库有限公司 | 一种逻辑运算的处理方法、装置、转换插件及存储介质 |
Non-Patent Citations (2)
Title |
---|
林丽清: "《一种MySQL数据库SQL递归查询的研究与实现》", 《黑龙江科技信息》 * |
郭春生等: "《数据库原理及应用》", 30 June 2017 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515971A (zh) * | 2019-08-09 | 2019-11-29 | 金蝶软件(中国)有限公司 | 程序语句处理方法、装置、计算机设备和计算机存储介质 |
CN110515971B (zh) * | 2019-08-09 | 2022-03-11 | 金蝶软件(中国)有限公司 | 程序语句处理方法、装置、计算机设备和计算机存储介质 |
CN117407430A (zh) * | 2023-12-05 | 2024-01-16 | 支付宝(杭州)信息技术有限公司 | 数据查询方法、装置、计算机设备及存储介质 |
CN117407430B (zh) * | 2023-12-05 | 2024-04-16 | 支付宝(杭州)信息技术有限公司 | 数据查询方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110032574B (zh) | 2021-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739939A (zh) | 知识图谱的数据融合方法和装置 | |
CN111177231B (zh) | 报表生成方法和报表生成装置 | |
CN111382226B (zh) | 一种数据库查询检索方法、装置和电子设备 | |
CN110032575A (zh) | 数据查询方法、装置、设备和存储介质 | |
CN111506621B (zh) | 一种数据统计方法及装置 | |
CN104376068A (zh) | 一种基于动态报表模板的数据展现系统及方法 | |
WO2014143791A1 (en) | Efficiently performing operations on distinct data values | |
CN107506383B (zh) | 一种审计数据处理方法和计算机设备 | |
CN110134705A (zh) | 一种数据查询方法、缓存服务器及终端 | |
CN108052635A (zh) | 一种异构数据源统一联合查询方法 | |
CN109408493A (zh) | 一种数据源的迁移方法及系统 | |
CN109947770A (zh) | 一种数据库查询方法、终端设备及存储介质 | |
CN109522341A (zh) | 实现基于sql的流式数据处理引擎的方法、装置、设备 | |
CN108984155A (zh) | 数据处理流程设定方法和装置 | |
CN109376142A (zh) | 数据迁移方法及终端设备 | |
CN110232178A (zh) | 报表生成方法及装置 | |
CN109885585A (zh) | 支持存储过程、触发器与视图的分布式数据库系统和方法 | |
CN110032574A (zh) | Sql语句的处理方法及装置 | |
CN111881042A (zh) | 自动化测试脚本的生成方法、装置和电子设备 | |
CN108345658A (zh) | 算法计算轨迹的分解处理方法、服务器及存储介质 | |
US20220207039A1 (en) | Query content-based data generation | |
CN110888672A (zh) | 一种基于元数据架构的表达式引擎实现方法及系统 | |
CN113407807A (zh) | 搜索引擎的查询优化方法、装置、电子设备 | |
CN113760961A (zh) | 数据查询方法和装置 | |
CN111125045A (zh) | 一种轻量级etl处理平台 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |