CN109033209B - Spark存储过程处理方法及装置 - Google Patents
Spark存储过程处理方法及装置 Download PDFInfo
- Publication number
- CN109033209B CN109033209B CN201810701423.4A CN201810701423A CN109033209B CN 109033209 B CN109033209 B CN 109033209B CN 201810701423 A CN201810701423 A CN 201810701423A CN 109033209 B CN109033209 B CN 109033209B
- Authority
- CN
- China
- Prior art keywords
- statement
- sql
- sql statement
- processing
- cursor
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及Spark存储过程处理方法及装置,应用于Spark的Driver端,所述方法包括:获取Spark存储过程对应的语句集,所述语句集包括操作SQL语句和逻辑控制语句,所述操作SQL语句包括查询SQL语句,所述逻辑控制语句包括游标处理语句;将所述查询SQL语句和所述游标处理语句进行合并后生成第一逻辑计划;将所述第一逻辑计划发送至工作节点WorkerNode集群执行。通过将游标处理过程抽象为一个逻辑计划,并分发至WorkerNode集群执行,根据本公开实施例的Spark存储过程处理方法及装置能够降低Driver端负载压力。
Description
技术领域
本公开涉及大数据技术领域,尤其涉及一种Spark存储过程处理方法及装置。
背景技术
SparkSQL是基于Spark的分布式SQL引擎。一条SQL语句,在SparkSQL 中会经过词法解析、语法解析等阶段,将SQL语句转为可以分布式执行的逻辑计划,并交由WorkerNode(工作节点)集群执行。
Spark存储过程可以用于实现特定功能,是由操作SQL语句和逻辑控制语句组合而成的语句集。其中,操作SQL语句包括查询(Select)SQL语句和插入(Insert)SQL语句,逻辑控制语句可以包括赋值语句、条件判断语句和循环语句等,这些语句为SQL语句或非SQL语句。在执行Spark存储过程时, Spark的Driver(驱动器)端会启动一个PL/SQL(ProceduralLanguage/SQL,过程化SQL语句)引擎。
相关技术中,在PL/SQL引擎对存储过程进行处理的过程中,对于非SQL 语句,则直接在本地执行该逻辑控制语句;对于SQL语句,则生成逻辑计划,并将生成的逻辑计划交由WorkerNode集群执行。Driver端的PL/SQL引擎会将 WorkerNode集群执行上述逻辑计划的结果拉取到本地,然后对所述结果执行逻辑控制语句中的游标处理语句,导致Driver端的负载较大。
发明内容
有鉴于此,本公开提出了一种Spark存储过程处理方法及装置,能够降低Driver端负载压力。
根据本公开的一方面,提供了一种Spark存储过程处理方法,应用于Spark 的Driver端,所述方法包括:获取Spark存储过程对应的语句集,所述语句集包括操作SQL语句和逻辑控制语句,所述操作SQL语句包括查询SQL语句,所述逻辑控制语句包括游标处理语句;将所述查询SQL语句和所述游标处理语句进行合并后生成第一逻辑计划;将所述第一逻辑计划发送至工作节点 WorkerNode集群执行。
根据本公开的另一方面,提供了一种Spark存储过程处理装置,应用于 Spark的Driver端,所述装置包括:获取模块,用于获取Spark存储过程对应的语句集,所述语句集包括操作SQL语句和逻辑控制语句,所述操作SQL语句包括查询SQL语句,所述逻辑控制语句包括游标处理语句;第一生成模块,用于将所述查询SQL语句和所述游标处理语句进行合并后生成第一逻辑计划;第一发送模块,用于将所述第一逻辑计划发送至工作节点WorkerNode集群执行。
通过获取Spark存储过程对应的语句集;将语句集中的查询SQL语句和游标处理语句进行合并后生成第一逻辑计划;将所述第一逻辑计划发送至 WorkerNode集群执行,根据本公开各方面实施例的Spark存储过程处理方法及装置能够将游标处理过程抽象为一个逻辑计划,并分发至WorkerNode集群执行,降低了Driver端负载压力。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1示出根据本公开一实施例的Spark存储过程处理方法的流程图。
图2示出根据本公开一实施例的Spark架构的示意图。
图3示出根据本公开一实施例的Spark存储过程处理方法的流程图。
图4示出根据本公开一实施例的Spark存储过程处理方法的流程图。
图5a和图5b分别示出根据本公开一实施例的Spark存储过程对应的语句集的一个示例。
图6示出根据本公开一实施例的Spark存储过程处理装置的框图。
图7示出根据本公开一实施例的Spark存储过程处理装置的框图。
图8是根据一示例性实施例示出的一种用于Spark存储过程处理的装置的框图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
图1示出根据本公开一实施例的Spark存储过程处理方法的流程图。图2 示出根据本公开一实施例的Spark架构的示意图。如图2所示,Spark架构中包括Driver和WorkerNode(工作节点)集群。其中,Driver负责对应用程序进行调度,对task(任务)分配等进行管理。Driver端的PL/SQL引擎负责对存储过程对应的语句集进行处理。集群中的WorkerNode负责创建Executor(执行器),将资源和任务进一步分配给Executor。其中,Executor是工作节点上的进程,负责对分配给该进程的任务进行处理。
一条SQL语句的处理流程包括词法解析、语法解析、优化、策略制定和执行。SQL语句经过词法解析、语法解析、优化和策略制定可以生成逻辑计划,生成逻辑计划的过程由图2所示的Driver端执行。进入执行阶段后,逻辑计划会被分发到图2所示的WorkerNode中的Executor执行。
图1所示的Spark存储过程处理方法可以应用于图2所示的Driver端 (Driver端的PL/SQL引擎)。如图1所示,该Spark存储过程处理方法可以包括:
步骤S11,获取Spark存储过程对应的语句集,所述语句集包括操作SQL 语句和逻辑控制语句,所述操作SQL语句包括查询SQL语句,所述逻辑控制语句包括游标处理语句。
存储过程可以用于实现用户需要的特定功能,例如向数据表中插入数据、按照给定格式输出数据表中的数据等。存储过程对应的语句集表示实现特定功能需要的语句的集合。存储过程对应的语句集可以包括操作SQL语句和逻辑控制语句。其中,操作SQL语句包括查询SQL语句,逻辑控制语句包括游标处理语句。
操作SQL语句可以用于表示对数据库中的数据进行操作的SQL语句,例如查询SQL语句、插入SQL语句等。其中,查询SQL语句的结果集可以通过游标进行处理。结果集是执行查询SQL语句之后得到的所有行数据的集合。游标是处理结果集的一种机制,通过对游标的操作可以读取结果集中各行的数据。游标可以将读取结果赋值给其他变量。
逻辑控制语句可以表示语句集中除操作SQL语句以外的语句。逻辑控制语句中包括游标处理语句。游标处理语句可以表示能够通过指定变量处理查询SQL语句结果集的语句,其中,指定变量可以用于存储通过游标从查询SQL 语句的结果集中读取的结果,即游标可以将从查询SQL语句的结果集的读取的一行结果赋值给指定变量。在一种可能的实现方式中,游标处理语句可以位于循环体内部和/或循环体的循环条件中。其中,循环体可以为while循环体、for in loop循环体等,对此本公开不做限制。
在一种可能的实现方式中,游标处理语句可以包括:以指定变量为过滤条件的语句和/或对指定变量进行处理的语句。游标处理语句可以为SQL语句,也可以为非SQL语句。
在一个示例中,以指定变量为过滤条件的语句可以为查询SQL语句、插入SQL语句等,例如Insert into table1(select*from table2 where table2.id=v_id),其中,table2.id为表table2的id,v_id为指定变量。在一个示例中,对指定变量进行处理的语句可以为包括以指定变量为条件的判语句、赋值语句、运算(例如,加减乘除等)语句等。
步骤S12,将所述查询SQL语句和所述游标处理语句进行合并后生成第一逻辑计划。
查询SQL语句为游标处理提供了结果集,游标处理语句为结果集中某一行结果提供了数据处理方法,查询SQL语句和游标处理语句共同实现了结果集的处理。因此,可以将查询SQL语句和游标处理语句进行合并,并基于合并结果生成第一逻辑计划。
步骤S13,将所述第一逻辑计划发送至WorkerNode集群中执行。
相关技术中,Driver端的PL/SQL引擎会将SQL语句生成逻辑计划,将该逻辑计划的全部执行结果拉取到本地,然后通过游标对每条执行结果依次进行处理,这样将执行结果拉取到本地执行,相当于单节点处理,集群资源无法得到充分利用,导致Driver端的负载较大且执行效率较低的问题。
在本公开实施例中,通过将游标处理过程抽象为一个逻辑计划,在 WorkerNode集群中执行该逻辑计划,在WorkerNode集群中实现通过游标对执行结果的处理,这样可以充分利用集群资源,既降低了Driver端负载,又提高了Spark存储过程的执行效率。
图3示出根据本公开一实施例的Spark存储过程处理方法的流程图。如图 3所示,该Spark存储过程处理方法还包括:
步骤S14,对于所述语句集中除所述游标处理语句和所述查询SQL语句以外的每个语句,若该语句为SQL语句,则基于该SQL语句生成第二逻辑计划。
步骤S15,将所述第二逻辑计划发送至所述WorkerNode集群中执行。
语句集中除所述游标处理语句和所述查询SQL语句以外的语句可以是 SQL语句,例如Select into语句(该语句只返回一行数据,并赋值给某个变量)、 Insert语句等。这些SQL语句中通常不需要游标进行循环处理,针对这些SQL 语句,可以在本地(Driver端)对各SQL语句进行词法解析、语法解析、优化和策略制定,生成逻辑计划,并将生成的逻辑计划分发到图2所示的 WorkerNode中的Executor执行。
图4示出根据本公开一实施例的Spark存储过程处理方法的流程图。如图 4所示,该Spark存储过程处理方法还包括:
步骤S16,对于所述语句集中除所述游标处理语句和所述操作SQL语句以外的每个语句,若该语句为非SQL语句,则在本地执行该非SQL语句。
语句集中除所述游标处理语句和所述查询SQL语句可以是非SQL语句,例如过滤条件、赋值语句、运算语句、显示语句等。这些非SQL语句中不包括游标,针对这些非SQL语句,可以在本地(Driver端)直接执行。
应用示例
图5a和图5b分别示出根据本公开一实施例的Spark存储过程对应的语句集的一个示例。
示例1,如图5a所示的Spark存储过程对应的语句集。在本公开实施例中,循环条件(select aaa from tab2)为步骤S12中的查询SQL语句、循环体中的运算语句(set s=cur.aaa*cur.aaa)为步骤S12中的游标处理语句,cur为游标, Driver端的PL/SQL引擎可以将循环条件和循环体中的运算语句进行合并,基于合并结果生成第一逻辑计划,并将第一逻辑计划发送至WorkerNode集群中执行。Driver端可以在本地执行显示语句(print('aaa的平方是'||s)),实现展示工作。这样,降低了Driver端的负载。
示例2,如图5b所示的Spark存储过程对应的语句集。在本公开实施例中,循环体中Insert SQL语句(insert into t2(select*from t3where t3.id=v_id))为游标处理语句,其中包括指定变量(v_id),该指定变量用于存储通过游标 (cur)从查询SQL语句(select id from tab1)的结果集中读取的结果,Driver 端的PL/SQL引擎可以将循环体中Insert SQL语句与查询SQL语句进行合并,基于合并结果生成第一逻辑计划,并将第一逻辑计划发送至WorkerNode集群中执行。
图6示出根据本公开一实施例的Spark存储过程处理装置的框图。该装置 60可以应用于Spark的Driver端。如图6所示,该装置60可包括:
获取模块61,用于获取Spark存储过程对应的语句集,所述语句集包括操作SQL语句和逻辑控制语句,所述操作SQL语句包括查询SQL语句,所述逻辑控制语句包括游标处理语句;
第一生成模块62,用于将所述查询SQL语句和所述游标处理语句进行合并后生成第一逻辑计划;
第一发送模块63,用于将所述第一逻辑计划发送至工作节点WorkerNode 集群执行。
在本公开实施例中,通过将游标处理过程抽象为一个逻辑计划,在 WorkerNode集群中执行逻辑计划,在WorkerNode集群中实现通过游标对执行结果的处理,这样可以充分利用集群资源,既降低了Driver端负载,又提高了Spark存储过程的执行效率。
图7示出根据本公开一实施例的Spark存储过程处理装置的框图。如图7 所示,在一种可能的实现方式中,该装置60还包括:
第二生成模块64,用于对于所述语句集中除所述游标处理语句和所述查询SQL语句以外的每个语句,若该语句为SQL语句,则基于该SQL语句生成第二逻辑计划;
第二发送模块65,用于将所述第二逻辑计划发送至所述WorkerNode集群中执行。
在一种可能的实现方式中,该装置60还包括:
执行模块66,用于对于所述语句集中除所述游标处理语句和所述操作SQL语句以外的每个语句,若该语句为非SQL语句,则在本地执行该非SQL 语句。
在一种可能的实现方式中,所述游标处理语句包括:以指定变量为过滤条件的语句和/或对指定变量进行处理的语句,所述指定变量用于存储通过游标从所述查询SQL语句的结果集中读取的结果。
图8是根据一示例性实施例示出的一种用于Spark存储过程处理的装置 900的框图。参照图8,该装置900可包括处理器901、存储有机器可执行指令的机器可读存储介质902。处理器901与机器可读存储介质902可经由系统总线903通信。并且,处理器901通过读取机器可读存储介质902中与Spark存储过程处理逻辑对应的机器可执行指令以执行上文所述的Spark存储过程处理方法。
本文中提到的机器可读存储介质902可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (6)
1.一种Spark存储过程处理方法,其特征在于,应用于Spark的Driver端,所述方法包括:
获取Spark存储过程对应的语句集,所述语句集包括操作SQL语句和逻辑控制语句,所述操作SQL语句包括查询SQL语句,所述逻辑控制语句包括游标处理语句,所述游标处理语句包括:以指定变量为过滤条件的语句和/或对指定变量进行处理的语句,所述指定变量用于存储通过游标从所述查询SQL语句的结果集中读取的结果;
将所述查询SQL语句和所述游标处理语句进行合并后生成第一逻辑计划;
将所述第一逻辑计划发送至工作节点WorkerNode集群执行。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对于所述语句集中除所述游标处理语句和所述查询SQL语句以外的每个语句,若该语句为SQL语句,则基于该SQL语句生成第二逻辑计划;
将所述第二逻辑计划发送至所述WorkerNode集群中执行。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对于所述语句集中除所述游标处理语句和所述操作SQL语句以外的每个语句,若该语句为非SQL语句,则在本地执行该非SQL语句。
4.一种Spark存储过程处理装置,其特征在于,应用于Spark的Driver端,所述装置包括:
获取模块,用于获取Spark存储过程对应的语句集,所述语句集包括操作SQL语句和逻辑控制语句,所述操作SQL语句包括查询SQL语句,所述逻辑控制语句包括游标处理语句,所述游标处理语句包括:以指定变量为过滤条件的语句和/或对指定变量进行处理的语句,所述指定变量用于存储通过游标从所述查询SQL语句的结果集中读取的结果;
第一生成模块,用于将所述查询SQL语句和所述游标处理语句进行合并后生成第一逻辑计划;
第一发送模块,用于将所述第一逻辑计划发送至工作节点WorkerNode集群执行。
5.根据权利要求4所述的装置,其特征在于,所述装置还包括:
第二生成模块,用于对于所述语句集中除所述游标处理语句和所述查询SQL语句以外的每个语句,若该语句为SQL语句,则基于该SQL语句生成第二逻辑计划;
第二发送模块,用于将所述第二逻辑计划发送至所述WorkerNode集群中执行。
6.根据权利要求4所述的装置,其特征在于,所述装置还包括:
执行模块,用于对于所述语句集中除所述游标处理语句和所述操作SQL语句以外的每个语句,若该语句为非SQL语句,则在本地执行该非SQL语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810701423.4A CN109033209B (zh) | 2018-06-29 | 2018-06-29 | Spark存储过程处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810701423.4A CN109033209B (zh) | 2018-06-29 | 2018-06-29 | Spark存储过程处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109033209A CN109033209A (zh) | 2018-12-18 |
CN109033209B true CN109033209B (zh) | 2021-12-31 |
Family
ID=65521069
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810701423.4A Active CN109033209B (zh) | 2018-06-29 | 2018-06-29 | Spark存储过程处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109033209B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111666295B (zh) * | 2019-03-05 | 2023-12-26 | 深圳市天软科技开发有限公司 | 数据提取方法、终端设备及计算机可读存储介质 |
CN113886415B (zh) * | 2020-07-03 | 2023-02-07 | 金篆信科有限责任公司 | 分布式存储过程的运行方法、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104133891A (zh) * | 2014-07-30 | 2014-11-05 | 广州科腾信息技术有限公司 | 一种基于关系型数据库的海量结构化数据的存储方法 |
CN104504001A (zh) * | 2014-12-04 | 2015-04-08 | 西北工业大学 | 面向海量分布式关系数据库的游标构造方法 |
CN107368575A (zh) * | 2016-09-21 | 2017-11-21 | 广州特道信息科技有限公司 | 一种负载均衡的分布式NewSQL数据库系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11243958B2 (en) * | 2015-12-31 | 2022-02-08 | Teradata Us, Inc. | Implementing contract-based polymorphic and parallelizable SQL user-defined scalar and aggregate functions |
-
2018
- 2018-06-29 CN CN201810701423.4A patent/CN109033209B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104133891A (zh) * | 2014-07-30 | 2014-11-05 | 广州科腾信息技术有限公司 | 一种基于关系型数据库的海量结构化数据的存储方法 |
CN104504001A (zh) * | 2014-12-04 | 2015-04-08 | 西北工业大学 | 面向海量分布式关系数据库的游标构造方法 |
CN107368575A (zh) * | 2016-09-21 | 2017-11-21 | 广州特道信息科技有限公司 | 一种负载均衡的分布式NewSQL数据库系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109033209A (zh) | 2018-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11720583B2 (en) | Processing data from multiple sources | |
EP3545435B1 (en) | Database system and method for compiling serial and parallel database query execution plans | |
US9141678B2 (en) | Distributed query cache in a database system | |
CN107250983B (zh) | 查询即时jit编译和执行的装置和方法 | |
CN103092970A (zh) | 一种数据库操作方法及设备 | |
US20080034359A1 (en) | Software transactional protection of managed pointers | |
EP3396542B1 (en) | Database operating method and device | |
CN109033209B (zh) | Spark存储过程处理方法及装置 | |
JP3802058B2 (ja) | ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ | |
AU757152B2 (en) | Language manager interface | |
US7933948B2 (en) | Computer-readable medium to multiplex multiple application server requests over a single database connection | |
CN109656946A (zh) | 一种多表关联查询方法、装置及设备 | |
US8433729B2 (en) | Method and system for automatically generating a communication interface | |
US20130275954A1 (en) | Inter-procedural unreachable code elimination with use graph | |
CN103092955B (zh) | 检查点操作方法、装置及系统 | |
US20170344607A1 (en) | Apparatus and method for controlling skew in distributed etl job | |
US7392359B2 (en) | Non-blocking distinct grouping of database entries with overflow | |
CN111880803A (zh) | 一种应用于多平台的软件构建方法及装置 | |
US7707543B2 (en) | Architecture for a computer-based development environment with self-contained components and a threading model | |
US20220043821A1 (en) | Method for performing multi-caching on data sources of same type and different types by using cluster-based processing system and device using the same | |
US11341054B2 (en) | Method for data processing | |
US11474837B2 (en) | Method and apparatus for efficient programming of electronic payment processing | |
US7007016B2 (en) | Support for concurrent active SQL statements having shared SQL context information | |
CN114090609A (zh) | 一种数据同步方法及终端 | |
CN116910082A (zh) | Sql语句处理方法、装置、服务器及介质 |
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 |