数据处理方法及装置制造方法及图纸

技术编号:20363109 阅读:44 留言:0更新日期:2019-02-16 16:38
本公开提供一种数据处理方法及装置,应用于Spark中的查询优化器,方法包括:获得SQL语句的原始逻辑计划树;在连接节点连接的两个数据表中确定被聚合节点的聚合函数操作的数据表,从所确定的数据表中选取至少一个数据表作为第一数据表;创建与第一数据表对应的第一预聚合节点;将第一预聚合节点插入连接节点和与第一数据表中对应的表扫描节点之间,得到优化的逻辑计划树。如此,减少需要拉取到同一分区中进行连接的数据量,以及减少连接得到的数据量,从而提高Spark进行数据处理的速度。

【技术实现步骤摘要】
数据处理方法及装置
本公开涉及大数据
,具体而言,涉及一种数据处理方法及装置。
技术介绍
Spark是一种基于内存的分布式计算框架,其中包括能够处理SQL(StructuredQueryLanguage,结构化查询语言)语句的SparkSQL组件。在使用SparkSQL组件进行数据分析时,一个查询语句往往涉及到多个数据表的数据关联,从而需要在查询过程中对数据表进行连接(join),也即,将两个数据表中的每一行数据进行任意组合,形成临时的笛卡尔积表。相关技术中,在对两个数据表进行连接时,通常先将满足连接条件的数据拉取(shuffle)到同一分区中,再对数据进行连接。在连接完成后,该分区中的数量会倍增,导致该分区中的计算速度缓慢。
技术实现思路
有鉴于此,本公开的目的在于提供一种数据处理方法及装置,以提高Spark进行数据处理的速度。为了达到上述目的,本公开采用如下技术方案:第一方面,本公开提供一种数据处理方法,应用于Spark中的查询优化器,所述方法包括:获得SQL语句的原始逻辑计划树,所述原始逻辑计划树包括聚合节点、连接节点和表扫描节点,其中,所述连接节点为所述聚合节点的子节点;在所述连接节点连接的两个数据表中确定被所述聚合节点的聚合函数操作的数据表,从所确定的数据表中选取至少一个数据表作为第一数据表;创建与所述第一数据表对应的第一预聚合节点;将所述第一预聚合节点插入所述连接节点和与所述第一数据表对应的表扫描节点之间,得到优化的逻辑计划树。第二方面,本公开提供一种数据处理装置,应用于Spark中的查询优化器,所述装置包括:获得模块,用于获得SQL语句的原始逻辑计划树,所述原始逻辑计划树包括聚合节点、连接节点和表扫描节点;确定模块,用于在所述连接节点连接的两个数据表中确定被所述聚合节点的聚合函数操作的数据表,从所确定的数据表中选取至少一个数据表作为第一数据表;第一节点创建模块,用于创建与所述第一数据表对应的第一预聚合节点;第一节点插入模块,用于将创建的第一预聚合节点插入所述连接节点和与所述第一数据表对应的表扫描节点之间,得到优化的逻辑计划树。第三方面,本公开提供一种机器可读存储介质,其上存储有机器可执行指令,该机器可执行指令被执行时促使处理器实现本公开提供的数据处理方法。相对于现有技术而言,本公开具有以下有益效果:本公开提供的一种数据处理方法及装置,Spark中的查询优化器获得SQL语句的原始逻辑计划树,该原始逻辑计划树包括聚合节点、连接节点和表扫描节点,其中连接节点是聚合节点的子节点。在连接节点连接的两个数据表中确定被聚合节点的聚合函数操作的数据表,从所确定的数据表中选取至少一个数据表作为第一数据表。创建与第一数据表对应的第一预聚合节点,将创建的第一预聚合节点插入连接节点和与第一数据表中对应的表扫描节点之间,得到优化的逻辑计划树。如此,可以减少需要shuffle到同一分区中进行连接的数据量,以及减少对数据表进行连接后得到的数据量,从而提高Spark进行数据处理的速度。附图说明为了更清楚地说明本公开的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。图1为本公开提供的一种Spark中的SparkSQL组件的框架示意图;图2为相关技术中的一种SQL语句的逻辑计划树的示意图;图3为图2所示逻辑计划树对应的处理过程示意图;图4为本公开提供的一种数据处理方法的流程示意图;图5为本公开提供的一种示例中的优化的逻辑计划树的示意图;图6为本公开提供的又一示例中的优化的逻辑计划树的示意图;图7为本公开提供的又一示例中的优化的逻辑计划树的示意图;图8为本公开提供的数据处理方法的又一流程示意图;图9为本公开提供的又一示例中的优化的逻辑计划树的示意图;图10为本公开提供的一种服务器的方框示意图;图11为本公开提供的一种数据处理装置的功能模块框图。图标:10-服务器;11-处理器;12-机器可读存储介质;121-SparkSQL组件;1211-语言处理及执行器;1212-查询优化器;200-数据处理装置;210-获得模块;220-确定模块;230-第一节点创建模块;231-分组条件设置子模块;232-第一预聚合子模块;233-第二预聚合子模块;240-第一节点插入模块;250-第一更新模块;260-第二节点创建模块;270-第二节点插入模块;280-第二更新模块;1213-查询执行器;13-通信单元。具体实施方式为使本公开的目的、技术方案和优点更加清楚,下面将结合本公开中的附图,对本公开中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。如图1所示,是本公开提供的一种Spark中的SparkSQL组件121的框架示意图,该SparkSQL组件121包括语言处理及执行器(LanguageProcessingandExecution,LPE)1211、查询优化器(QueryOptimizer)1212以及查询执行器(QueryExecutor)1213。其中,语言处理及执行器1211用于对SQL语句进行解析得到一逻辑计划树,此时得到的逻辑计划树通常称作UnResolved逻辑计划树。语言处理及执行器1211进一步对该UnResolved逻辑计划树进行绑定(bind)得到一可执行的逻辑计划树(又称“Resolved逻辑计划树”)。查询优化器1212用于根据配置的优化规则(rule)对所述可执行的逻辑计划树进行优化,得到优化的逻辑计划树,并根据优化的逻辑计划树生成对应的物理计划树。查询执行器1213用于执行所述物理计划树并返回相应的数据。经研究发现,如果SQL语句为带有groupby语句(分组函数)的join(连接)语句,Spark在执行该SQL语句时,通常是先对数据表进行连接,再对连接得到的数据表进行分组,并对分组得到的每组数据进行聚合。在此需要说明的是,在SQL语句中通常共同使用groupby语句和聚合函数,即按照指定字段对数据表中的数据进行分组,例如某一数据表中包括字段a和字段b,假设现在通过groupby语句将字段a相同的数据分为一组,则每组数据中的字段b的值可能不同,在此情况下,可以通过聚合函数对每组数据中的字段b进行处理,以使每组数据的字段b仅有一个值。其中,聚合函数包括用于求和的sum函数、用于求平均的avg函数、用于统计行数的count函数、用于确定最小值的min函数以及用于确定最大值的max函数。下面结合图2、图3及如下所示的数据表t1和数据表t2,本文档来自技高网...

【技术保护点】
1.一种数据处理方法,其特征在于,应用于Spark中的查询优化器,所述方法包括:获得SQL语句的原始逻辑计划树,所述原始逻辑计划树包括聚合节点、连接节点和表扫描节点,其中,所述连接节点为所述聚合节点的子节点;在所述连接节点连接的两个数据表中确定被所述聚合节点的聚合函数操作的数据表,从所确定的数据表中选取至少一个数据表作为第一数据表;创建与所述第一数据表对应的第一预聚合节点;将所述第一预聚合节点插入所述连接节点和与所述第一数据表对应的表扫描节点之间,得到优化的逻辑计划树。

【技术特征摘要】
1.一种数据处理方法,其特征在于,应用于Spark中的查询优化器,所述方法包括:获得SQL语句的原始逻辑计划树,所述原始逻辑计划树包括聚合节点、连接节点和表扫描节点,其中,所述连接节点为所述聚合节点的子节点;在所述连接节点连接的两个数据表中确定被所述聚合节点的聚合函数操作的数据表,从所确定的数据表中选取至少一个数据表作为第一数据表;创建与所述第一数据表对应的第一预聚合节点;将所述第一预聚合节点插入所述连接节点和与所述第一数据表对应的表扫描节点之间,得到优化的逻辑计划树。2.根据权利要求1所述的数据处理方法,其特征在于,所述第一预聚合节点包括分组条件;创建与所述第一数据表对应的第一预聚合节点,包括:若所述第一数据表没有被所述聚合节点中的分组函数操作,则从所述连接节点的连接条件中获取所述第一数据表的字段作为第一字段,将该第一字段设置为所述第一预聚合节点的分组条件;若所述第一数据表被所述聚合节点中的分组函数操作,则获取所述分组函数对所述第一数据表的操作字段作为第二字段,从所述连接条件中获取所述第一数据表的字段作为第一字段,将该第一字段和该第二字段均设置为所述第一预聚合节点的分组条件。3.根据权利要求2所述的数据处理方法,其特征在于,所述第一预聚合节点还包括预聚合函数;创建与所述第一数据表对应的第一预聚合节点,还包括:当所述连接节点连接的两个数据表中、不同于所述第一数据表的第二数据表被所述聚合节点中的聚合函数操作、且操作所述第二数据表的聚合函数为sum函数时,将count函数和操作所述第一数据表的聚合函数均设置为所述第一预聚合节点的预聚合函数,其中,所述count函数操作的字段为所述连接条件中包括的所述第一数据表的字段;所述方法还包括:将所述聚合节点中操作所述第二数据表的聚合函数更新为对所述第一预聚合节点的count函数的预聚合结果和操作所述第二数据表的聚合函数的聚合结果进行聚合。4.根据权利要求2所述的数据处理方法,其特征在于,创建与所述第一数据表对应的第一预聚合节点,还包括:当所述连接节点连接的两个数据表中、不同于所述第一数据表的第二数据表没有被所述聚合节点中的聚合函数操作时,或当操作所述第二数据表的聚合函数不是sum函数时,将操作所述第一数据表的聚合函数设置为所述第一预聚合节点的预聚合函数。5.根据权利要求1-4中任一项所述的数据处理方法,其特征在于,所述方法还包括:当所述连接节点连接的两个数据表中、不同于所述第一数据表的第二数据表没有被所述聚合节点中的聚合函数操作、且操作所述第一数据表的聚合函数为sum函数时,为所述第二数据表创建第二预聚合节点;将所述第二预聚合节点插入所述连接节点和与所述第二数据表对应的表扫描节点之间。6.根据权利要求5所述的数据处理方法,其特征在于,为所述第二数据表创建第二预聚合节点,包括:从所述连接条件中获取所述第二数据表的字段作为第三字段,获取所述聚合节点中的分组函数对所述第二数据表的操作字段作为第四字段,并将所述第三字段和所述第四字段均设置为所述第二预聚合节点的分组条件,将count函数设置为所述第二预聚合节点的预聚合函数,其中,所述count函数操作的字段为所述连接条件中包括的所述第二数据表的字段;所述方法还包括:将所述聚合节点中的操作所述第一数据表的聚合函数更新为对所述第一预聚合节点的聚合函数的预聚合结果和所述第二预聚合节点的count函数的预聚合结果进行聚合。7.一种数据处理装置,其特征在于,应用于Spark中的查询优化器,所述装置包括...

【专利技术属性】
技术研发人员:任中涛户蕾蕾史宁宁
申请(专利权)人:新华三大数据技术有限公司
类型:发明
国别省市:河南,41

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

1