CN111723104A - 一种数据处理***中语法分析的方法、装置及*** - Google Patents
一种数据处理***中语法分析的方法、装置及*** Download PDFInfo
- Publication number
- CN111723104A CN111723104A CN201910222559.1A CN201910222559A CN111723104A CN 111723104 A CN111723104 A CN 111723104A CN 201910222559 A CN201910222559 A CN 201910222559A CN 111723104 A CN111723104 A CN 111723104A
- Authority
- CN
- China
- Prior art keywords
- operator
- syntax analysis
- generated
- parsing
- sql
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开一种数据处理***中语法分析的方法、装置及***,其中,所述方法包括:对需要执行的语句进行语法分析;在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。采用本申请所述的数据处理***中的语法分析方法,可以将数据处理***中基于抽象语法树的算子操作进行处理的算子处理程序前置化到抽象语法树生成阶段,避免了大量抽象语法树中间对象的生成,从而优化了数据处理***的处理效率,减少了***资源的占用。
Description
技术领域
本申请涉及数据分析领域,具体涉及一种数据处理***中语法分析的方法、装置及***。另外,本申请还涉及一种数据存储***中针对SQL语句的语法分析方法及装置。
背景技术
近年来,随着网络技术的快速发展,数据处理***的开发需求也日新月异,同时数据处理***需要执行的SQL语句也越来越复杂。如何提高SQL语句的语法分析效率,优化数据处理***的资源占用,成为本领域技术人员共同追求的技术目标。
为了解决上述技术问题,通常针对执行语句的分析过程分为两个阶段,第一阶段是语法分析阶段,根据需要执行的语句生成抽象语法树;第二阶段是抽象语法树处理阶段,针对生成的抽象语法树的各个节点执行处理逻辑。其中,SQL(Structured QueryLanguage)结构化查询语言,简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系型数据处理***。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据处理***可以使用相同的结构化查询语言作为数据输入与管理的接口。
但是,随着用户通过应用向数据处理***发送的执行语句越来越多,现有技术中先生成抽象语法树后进行分析处理的方式通常会产生大量的中间对象,导致***资源占用较高,影响数据处理***中语法分析的效率,进而无法满足越来越不能满足用户的实际需求。
发明内容
本申请提供一种数据处理***中语法分析的方法、装置及***,以解决现有技术中存在的数据处理***中语法分析的效率低下的问题。另外,本申请还提供数据存储***中针对SQL语句的语法分析方法及装置。
本申请提供的数据处理***中语法分析的方法,包括:对需要执行的语句进行语法分析;在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
可选的,所述数据处理***还包括:判断所述语法分析是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果。
可选的,所述数据处理***包括数据存储***,相应的,所述需要执行的语句包括SQL语句。
可选的,所述在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,包括:在所述数据存储***中对需要执行的SQL语句进行语法分析过程中的形成执行计划阶段,通过为所生成的所述SQL语句的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树。
可选的,所述算子操作为所述数据存储***中分析所述SQL语句生成的基本操作程序。
可选的,所述算子处理程序用于在所述数据存储***中对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作;其中,所述预处理操作为生成所述执行计划之后的处理模块所需要执行的处理操作。
可选的,所述对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作的步骤执行前,执行下述步骤:对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行合法性检验;所述合法性检验是判断所述SQL语句的算子操作的数据结构是否符合预定的SQL语法规则。
可选的,所述语法分析结果中包含已通过回调接口调用相应的算子处理程序执行完毕后产生的算子操作处理结果,以及未调用所述回调接口的算子操作。
相应的,本申请还提供一种数据处理***中语法分析的装置,包括:第一语法分析单元和第一调用单元;所述第一语法分析单元,用于对需要执行的语句进行语法分析;所述第一调用单元,用于在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
可选的,所述数据处理***还包括:第一判断单元,用于判断所述语法分析是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果。
可选的,所述数据处理***包括数据存储***,相应的,所述需要执行的语句包括SQL语句。
可选的,所述第一调用单元具体用于:在所述数据存储***中对需要执行的SQL语句进行语法分析过程中的形成执行计划阶段,通过为所生成的所述SQL语句的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树。
可选的,所述算子操作为所述数据存储***中分析所述SQL语句生成的基本操作程序。
可选的,所述算子处理程序用于在所述数据存储***中对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作;其中,所述预处理操作为生成所述执行计划之后的处理模块所需要执行的处理操作。
可选的,所述对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作的步骤执行前,执行下述步骤:对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行合法性检验;所述合法性检验是判断所述SQL语句的算子操作的数据结构是否符合预定的SQL语法规则。
可选的,所述语法分析结果中包含已通过回调接口调用相应的算子处理程序执行完毕后产生的算子操作处理结果,以及未调用所述回调接口的算子操作。
相应的,本申请还提供一种数据存储***中针对SQL语句的语法分析方法,包括:接收输入的SQL语句;对所述数据存储***中需要执行的SQL语句进行语法分析;在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序;判断所述语法分析是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果;处理输出的所述语法分析结果的内容。
可选的,所述在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,包括:在语法分析生成执行计划过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树。
相应的,本申请还提供一种数据存储***中针对SQL语句的语法分析装置,其特征在于,包括:接收单元、第二语法分析单元、第二调用单元、第二判断单元以及处理单元;所述接收单元,用于接收输入的SQL语句;所述第二语法分析单元,用于对数据存储***中需要执行的SQL语句进行语法分析;所述第二调用单元,用于在所述数据存储***中对SQL语句的进行语法分析生成执行计划过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树;所述第二判断单元,用于判断所述语法分析是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果;所述处理单元,用于处理输出的所述语法分析结果的内容。
可选的,所述第二调用单元具体用于:在语法分析生成执行计划过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树。
相应的,本申请还提供一种数据处理***中语法分析***,包括:上述所述的数据处理***中语法分析的装置,以及所述的数据存储***中针对SQL语句的语法分析装置。
相应的,本申请还提供一种电子设备,包括:处理器以及存储器,所述存储器用于存储数据处理***中语法分析方法的程序,该设备通电并通过所述处理器运行该数据处理***中语法分析方法的程序后,执行下述步骤:对需要执行的语句进行语法分析;在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
相应的,本申请还提供一种存储设备,存储有数据处理***中语法分析方法的程序,该程序被处理器运行,执行下述步骤:对需要执行的语句进行语法分析;在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
与现有技术相比,本申请具有以下优点:
采用本申请所述的数据处理***中的语法分析方法,可以将数据处理***中基于抽象语法树的算子操作进行处理的算子处理程序前置化到抽象语法树生成阶段,避免了大量抽象语法树中间对象的生成,从而优化了数据处理***的语法分析效率,减少了***资源的占用。
附图说明
图1为本发明实施例提供的一种数据处理***中语法分析的方法的流程图;
图2为本发明实施例提供的一种数据处理***中语法分析的装置的示意图;
图3为本发明实施例提供的一种电子设备的示意图;
图4为本发明实施例提供的一种数据存储***中针对SQL语句的语法分析方法的流程图;
图5为本发明实施例提供的一种数据存储***中针对SQL语句的语法分析装置的示意图;
图6为一种现有技术中数据处理***内语法分析过程的流程图;
图7为本发明实施例提供的一种数据处理***中语法分析过程的流程图;
图8为本发明实施例提供的一种数据处理***中语法分析的方法的完整流程图;
图9为本发明实施例提供的一种基于SQL语句的语法分析过程中设置回调接口的示意图;
图10为一种现有技术中基于数据处理***内的INSERT语句进行语法分析的流程图;
图11为一种本发明实施例提供的基于数据处理***内的INSERT语句进行语法分析的流程图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此,本发明不受下面公开的具体实施的限制。
下面基于本发明提供的数据处理***中的语法分析方法,对其实施例进行详细描述。请参考图1所示,其为本发明实施例提供的一种数据处理***中的语法分析方法的流程图。
本发明所述的实施例可以基于传统的数据存储***中的SQL Parser(SQL解析器)实现,以下结合图1说明其具体的实现步骤。
步骤S101:对需要执行的语句进行语法分析。
在本发明实施例中,所述的数据处理***可以是指数据存储***。所述的需要执行的语句可以是指数据存储***中用于存储对象查询和管理的SQL语句。例如,所述SQL语句具体可以包括:用于从数据存储***表中检索数据行和列的SELECT语句(选择数据操作语句);用于向数据存储***表添加新数据行的INSERT语句(***数据操作语句);用于从数据存储***表中删除数据行的DELETE语句(删除数据操作语句);用于更新数据存储***表中的数据的UPDATE语句(更新数据操作语句)等。
本发明所述的实施例中对需要执行的语句进行语法分析,即:对上述SQL语句中的SELECT语句、INSERT语句、DELETE语句以及UPDATE语句进行语法分析,生成包含大量算子操作的AST(Abstract Syntax Tree;抽象语法树)的过程。其中,所述算子操作为数据存储***中分析所述SQL语句生成的基本操作程序。
如图6所示,其为一种现有技术中数据处理***内语法分析过程的流程图。在现有技术中,SQL Parser(SQL语法分析模块)是数据库中不可缺少的重要组件。目前,SQLParser通常设置在SQL语句语法分析整个处理流程最前面的处理环节。SQL语句输入数据存储***后进行语法分析,生成AST,然后,数据存储***中的后续处理模块再基于AST进行处理。这一过程通常是瀑布式模型,即SQL Parser都是先生成AST,然后,后续数据处理模块基于AST各个节点中存储的算子操作进行遍历处理。需要说明的是,SQL Parser对需要执行的语句进行语法分析后,数据存储***中的后续数据处理模块可以是指Processing Modules或者Optimizer优化程序处理模块等。
上述传统处理方式通常会产生大量AST中间对象,导致占用较多的数据存储***资源。为此,本发明提供一种数据处理***中的语法分析方法。
如图7所示,其为本发明实施例提供的一种数据处理***中语法分析过程的流程图。首先对需要执行的SQL语句进行语法分析,即:通过SQL Parser调用回调接口,将算子处理模块中的算子处理操作调用到SQL Parser中实现对输入的SQL语句进行语法分析生成抽象语法树AST的过程中。在本发明所述的生成语法树过程中,能够前置化后面基于AST各个节点存储的算子处理操作的词法分析阶段,来更加紧凑化SQL语句解析和处理的处理流程,减少AST中间对象产生,优化***资源的占用。
步骤S102:在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
上述步骤S101对需要执行的语句进行语法分析,为本步骤在语法分析过程中通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序做了准备工作。在步骤S102中,可以根据SQL Parser中的各个语法分析阶段,为所生成的算子操作设置不同回调接口,从而调用相应的算子处理程序。
具体的,本发明所述的实施例中在数据存储***中的SQL Parser对需要执行的SQL语句进行语法分析过程中的形成执行计划阶段,通过为所生成的所述SQL语句的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的AST抽象语法树。所述算子操作为所述数据存储***中分析所述SQL语句生成的基本操作程序。所述算子处理程序用于在所述数据存储***中对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作。所述预处理操作为生成所述执行计划之后的处理模块所需要执行的处理操作。
需要说明的是,在对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作的步骤执行前,执行下述步骤:对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行合法性检验;所述合法性检验是判断所述SQL语句的算子操作的数据结构是否符合预定的SQL语法规则。
本发明所述的SQL parser会为对应的SQL语句生成AST抽象语法树,然后基于抽象语法树各个节点存储的算子操作进行遍历,遍历到算子操作时,调用与各个算子操作对应的callback API(回调接口)。
如图9所示,其为本发明实施例提供的一种基于SQL语句的语法分析过程中设置回调接口的示意图。
本发明实施例中所述的算子操作和设置回调接口都是通过编程方式实现的,例如:针对SELECT(删除语句)语法分析过程中产生的算子操作定义了对应的callback API,包括:table算子操作的table callback(表回调接口)、hint算子操作的table callback(提示回调接口)、predicate算子操作的predicate callback(操作回调接口)、join算子操作的join callback(连接回调接口)、group by算子操作的group by callback(分组回调接口)、order by算子操作的order by callback(命令回调接口)、having算子操作的having callback(预设条件回调接口)、limit算子操作的limit callback(限定回调接口)和set op算子操作的set op callback(集合回调接口)。
在生成针对SELECT语句的抽象语法树后,抽象语法树上的各个节点中会包含各种算子操作,对该抽象语法树进行遍历,遍历过程中,遇到相关算子操作,就调用该算子操作对应callback API,将后续数据处理模块需要基于AST进行处理的算子处理程序前置化到语法分析中生成算子操作的阶段。所述设置的回调接口具体可以包括:
interface Select Handler{
void process Table(SQL Table table);//针对table callback算子操作的回调接口;
void process Hint(SQL Hint hint);//针对hint算子操作的回调接口;
void process Where(SQL Where where);//针对predicate算子操作的回调接口;
void process Join(SQL Join join);//针对Join算子操作的回调接口;
void process Group By(SQL Group By group By);//针对Group By子句算子操作的回调接口;
void process Order By(SQL Order By order By);//针对Order By子句算子操作的回调接口;
void process Having(SQL Having having);//针对Having子句算子操作的回调接口;
void process Limit(SQL Limit limit);//针对Limit子句算子操作的回调接口;
void process Set Op(SQL Set Op set Op);//针对UNION,INTERSECT,
MINUS等算子操作集合的回调接口}。
如图8所示,其为本发明实施例提供的一种数据处理***中语法分析的方法的完整流程图。本发明所述的实施例,具体实现步骤还可以包括:步骤S103:判断所述语法分析是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果。
在上述步骤S102中,语法分析过程中通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序后,本步骤通过判断所述语法分析过程是否完成以及调用的所述算子处理程序是否执行完毕,可以生成已经带回了算子处理程序处理结果的语法分析结果。其中,所述的算子处理程序用于在数据存储***中对需要执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作。所述预处理操作为生成所述执行计划之后的处理模块所需要执行的处理操作。
所述的语法分析结果中包含已通过回调接口调用相应的算子处理程序执行完毕后产生的算子操作处理结果,以及未调用所述回调接口的算子操作。所述语法分析过程可以是指在数据存储***中基于需要执行的SQL语句进行语法分析,生成AST抽象语法树的过程。
所述在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,包括:
对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行合法性检验;所述合法性检验是判断所述SQL语句的算子操作的数据结构是否符合预定的SQL语法规则。在所述数据存储***中对需要执行的SQL语句进行语法分析过程中的形成执行计划阶段,通过为所生成的所述SQL语句的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树。所述算子操作为所述数据存储***中分析所述SQL语句生成的基本操作程序。
如图10和11所示,其分别为一种现有技术中基于数据处理***内的INSERT语句进行语法分析的流程图以及一种本发明实施例提供的基于数据处理***内的INSERT语句进行语法分析的流程图。
本发明提供一个具体实施例,以SQL语句中的INSERT语句的语法分析过程为例进行说明,通常处理步骤包括结合算子操作进行合法性验证,以及验证完后,更新相应的数据结构等。比如:INSERT INTO TVALUES(1,‘aa’),(2,‘bb’),,(3,‘cc’);处理过程如下:
按照后续数据处理模块需要的INSERT语句进行数据结构初始化,例如:
INSERT column_1_values[…];
column_2_values[…];
……
column_N_values[…];
本实施例中,后续数据处理模块需要以上述方式来进行后续数据处理,所以定义上述模式的数据结构;
SQL parser解析上述INSERT语句,遇到目标表t,则进行算子操作查询,
首先确认t表是存在的目标表,如果不存在,则直接报错结束;
获取t表的列的算子操作信息,例如,本实施例中,t表有两个列COL_1和COL_2,获取列的算子操作信息,包括列名和列的数据类型;
SQL parser继续解析到VALUES语句的子句,后面有三行记录,所以上述
数据结构为:
INSERT column_1_values[?,?,?];
column_2_values[?,?,?];
结合列的位置标号和数据类型,进行VALUES中记录数据的合法性校验,比如:COL_1是integer(整数)类型,COL_2是varchar(可变长字符串)类型,则1,2,3通过校验,都符合integer类型的要求,‘aa’、‘bb’、‘cc’通过校验,都符合varchar类型;
最终处理完的数据结构如下:
INSERT column_1_values[1,2,3];
column_2_values[‘aa’,‘bb’,‘cc’]。
采用本申请所述的数据处理***中的语法分析方法,可以将数据处理***基于抽象语法树进行处理的算子处理程序前置化到抽象语法树生成阶段,避免了大量抽象语法树中间对象的生成,从而优化了数据处理***的语法分析效率,减少了***资源的占用。
与上述提供的数据处理***中的语法分析方法相对应,本发明还提供一种数据处理***中的语法分析装置。由于该装置的实施例相似于上述方法实施例,所以描述的比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述装置实施例仅是示意性的。请参考图2所示,其为本发明实施例提供的一种数据处理***中的语法分析装置的示意图。
本发明实施例所述的数据处理***中的语法分析装置包括如下部分:
第一语法分析单元201,用于对需要执行的语句进行语法分析。
在本发明实施例中,所述的数据处理***可以是指数据存储***。所述的需要执行的语句可以是指数据存储***中用于存储对象查询和管理的SQL语句。例如,所述SQL语句具体可以包括:用于从数据存储***表中检索数据行和列的SELECT语句(选择数据操作语句);用于向数据存储***表添加新数据行的INSERT语句(***数据操作语句);用于从数据存储***表中删除数据行的DELETE语句(删除数据操作语句);用于更新数据存储***表中的数据的UPDATE语句(更新数据操作语句)等。
本发明所述的实施例中对需要执行的语句进行语法分析,即:对上述SQL语句中的SELECT语句、INSERT语句、DELETE语句以及UPDATE语句进行语法分析,生成包含大量算子操作的AST(Abstract Syntax Tree;抽象语法树)的过程。其中,所述算子操作为数据存储***中分析所述SQL语句生成的基本操作程序。
如图6所示,其为一种现有技术中数据处理***内语法分析过程的流程图。在现有技术中,SQL Parser(SQL语法分析模块)是数据库中不可缺少的重要组件。目前,SQLParser通常设置在SQL语句语法分析整个处理流程最前面的处理环节。SQL语句输入数据存储***后进行语法分析,生成AST,然后,数据存储***中的后续处理模块再基于AST进行处理。这一过程通常是瀑布式模型,即SQL Parser都是先生成AST,然后,后续数据处理模块基于AST各个节点中存储的算子操作进行遍历处理。需要说明的是,SQL Parser对需要执行的语句进行语法分析后,数据存储***中的后续数据处理模块可以是指Processing Modules或者Optimizer优化程序处理模块等。
上述传统处理方式通常会产生大量AST中间对象,导致占用较多的数据存储***资源。为此,本发明提供一种数据处理***中的语法分析方法。
如图7所示,其为本发明实施例提供的一种数据处理***中语法分析过程的流程图。首先对需要执行的SQL语句进行语法分析,即:通过SQL Parser调用回调接口,将算子处理模块中的算子处理操作调用到SQL Parser中实现对输入的SQL语句进行语法分析生成抽象语法树AST的过程中。在本发明所述的生成语法树过程中,能够前置化后面基于AST各个节点存储的算子处理操作的词法分析阶段,来更加紧凑化SQL语句解析和处理的处理流程,减少AST中间对象产生,优化***资源的占用。
第一调用单元202,用于在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
具体的,本发明所述的实施例中在数据存储***中的SQL Parser对需要执行的SQL语句进行语法分析过程中的形成执行计划阶段,通过为所生成的所述SQL语句的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的AST抽象语法树。所述算子操作为所述数据存储***中分析所述SQL语句生成的基本操作程序。所述算子处理程序用于在所述数据存储***中对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作。所述预处理操作为生成所述执行计划之后的处理模块所需要执行的处理操作。
需要说明的是,在对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作的步骤执行前,执行下述步骤:对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行合法性检验;所述合法性检验是判断所述SQL语句的算子操作的数据结构是否符合预定的SQL语法规则。
本发明所述的SQL parser会为对应的SQL语句生成AST抽象语法树,然后基于抽象语法树各个节点存储的算子操作进行遍历,遍历到算子操作时,调用与各个算子操作对应的callback API(回调接口)。
如图9所示,其为本发明实施例提供的一种基于SQL语句的语法分析过程中设置回调接口的示意图。
本发明实施例中所述的算子操作和设置回调接口都是通过编程方式实现的,例如:针对SELECT(删除语句)语法分析过程中产生的算子操作定义了对应的callback API,包括:table算子操作的table callback(表回调接口)、hint算子操作的table callback(提示回调接口)、predicate算子操作的predicate callback(操作回调接口)、join算子操作的join callback(连接回调接口)、group by算子操作的group by callback(分组回调接口)、order by算子操作的order by callback(命令回调接口)、having算子操作的having callback(预设条件回调接口)、limit算子操作的limit callback(限定回调接口)和set op算子操作的set op callback(集合回调接口)。
在生成针对SELECT语句的抽象语法树后,抽象语法树上的各个节点中会包含各种算子操作,对该抽象语法树进行遍历,遍历过程中,遇到相关算子操作,就调用该算子操作对应callback API,将后续数据处理模块需要基于AST进行处理的算子处理程序前置化到语法分析中生成算子操作的阶段。所述设置的回调接口具体可以包括:
interface Select Handler{
void process Table(SQL Table table);//针对table callback算子操作的回调接口;
void process Hint(SQL Hint hint);//针对hint算子操作的回调接口;
void process Where(SQL Where where);//针对predicate算子操作的回调接口;
void process Join(SQL Join join);//针对Join算子操作的回调接口;
void process Group By(SQL Group By group By);//针对Group By子句算子操作的回调接口;
void process Order By(SQL Order By order By);//针对Order By子句算子操作的回调接口;
void process Having(SQL Having having);//针对Having子句算子操作的回调接口;
void process Limit(SQL Limit limit);//针对Limit子句算子操作的回调接口;
void process Set Op(SQL Set Op set Op);//针对UNION,INTERSECT,
MINUS等算子操作集合的回调接口}。
本发明所述的实施例还可以包括:第一判断单元203。第一判断单元203用于判断所述语法分析是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果。
所述的语法分析结果中包含已通过回调接口调用相应的算子处理程序执行完毕后产生的算子操作处理结果,以及未调用所述回调接口的算子操作。所述语法分析过程可以是指在数据存储***中基于需要执行的SQL语句进行语法分析,生成AST抽象语法树的过程。
所述在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,包括:
对执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行合法性检验;所述合法性检验是判断所述SQL语句的算子操作的数据结构是否符合预定的SQL语法规则。在所述数据存储***中对需要执行的SQL语句进行语法分析过程中的形成执行计划阶段,通过为所生成的所述SQL语句的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树。所述算子操作为所述数据存储***中分析所述SQL语句生成的基本操作程序。
采用本申请所述的数据处理***中的语法分析装置,可以将数据处理***基于抽象语法树进行处理的算子处理程序前置化到抽象语法树生成阶段,避免了大量抽象语法树中间对象的生成,从而优化了数据处理***的语法分析效率,减少了***资源的占用。
与上述提供的数据处理***中的语法分析方法相对应,本发明还提供一种电子设备。请参见图3所示,其为本发明实施例提供的一种电子设备的示意图。
本发明提供的电子设备具体包括:处理器302和存储器301。其中,存储器301用于存储数据处理***中的语法分析方法的程序,该设备通电并通过所述处理器302运行该数据处理***中的语法分析方法的程序后,执行步骤一:对需要执行的语句进行语法分析;步骤二:在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
与上述提供的数据处理***中的语法分析方法相对应,本发明还提供一种存储设备,该存储设备存储有数据处理***中的语法分析方法的程序,该程序可以被处理器运行,执行步骤一:对需要执行的语句进行语法分析;步骤二:在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
与上述提供的数据处理***中的语法分析方法相对应,本发明还提供一种数据存储***中针对SQL语句的语法分析方法。由于该方法实施例相似于上述方法实施例,所以描述的比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述方法实施例仅是示意性的。请参考图4所示,其为本发明实施例提供的一种数据存储***中针对SQL语句的语法分析方法的流程图。
步骤S401,接收输入的SQL语句。
步骤S402,对所述数据存储***中需要执行的SQL语句进行语法分析。
步骤S403,在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
在本发明实施例中,所述通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,具体实现方式为:在语法分析生成执行计划过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树。
步骤S404,判断所述语法分析是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果。
步骤S405,处理输出的所述语法分析结果的内容。
采用本申请所述的数据存储***中针对SQL语句的语法分析方法,可以将数据存储***基于抽象语法树进行处理的算子处理程序前置化到抽象语法树生成阶段,避免了大量抽象语法树中间对象的生成,从而优化了数据存储***的语法分析效率,减少了***资源的占用。
与上述提供的数据存储***中针对SQL语句的语法分析方法相对应,本发明还提供一种数据存储***中针对SQL语句的语法分析装置。由于该装置的实施例相似于上述方法实施例,所以描述的比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述本装置实施例仅是示意性的。请参考图5所示,其为本发明实施例提供的一种数据存储***中针对SQL语句的语法分析装置的示意图。
本发明实施例所述的数据存储***中针对SQL语句的语法分析装置包括如下部分:
所述接收单元501,用于接收输入的SQL语句。
所述第二语法分析单元502,用于对数据存储***中需要执行的SQL语句进行语法分析。
所述第二调用单元503,用于在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
在本发明实施例中,所述通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,具体实现方式为:在语法分析生成执行计划过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树。
所述第二判断单元504,用于判断所述语法分析是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果。
所述处理单元505,用于处理输出的所述语法分析结果的内容。
采用本申请所述的数据存储***中针对SQL语句的语法分析装置,可以将数据存储***基于抽象语法树进行处理的算子处理程序前置化到抽象语法树生成阶段,避免了大量抽象语法树中间对象的生成,从而优化了数据存储***的语法分析效率,减少了***资源的占用。
本发明虽然以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以做出可能的变动和修改,因此,本发明的保护范围应当以本发明权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本发明的实施例可提供为方法、***或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (15)
1.一种数据处理***中语法分析的方法,其特征在于,包括:
对需要执行的语句进行语法分析;
在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
2.根据权利要求1所述的数据处理***中语法分析的方法,其特征在于,还包括:
判断所述语法分析过程是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果。
3.根据权利要求1所述的数据处理***中语法分析的方法,其特征在于,所述数据处理***包括数据存储***,相应的,所述需要执行的语句包括SQL语句。
4.根据权利要求3所述的数据处理***中语法分析的方法,其特征在于,所述在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,包括:
在所述数据存储***内对需要执行的SQL语句进行语法分析形成执行计划的过程中,通过为所生成的所述SQL语句的算子操作设置回调接口的方式调用相应的算子处理程序;
其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树。
5.根据权利要求1所述的数据处理***中语法分析的方法,其特征在于,所述算子操作为数据存储***中分析所述SQL语句生成的基本操作程序。
6.根据权利要求1所述的数据处理***中语法分析的方法,其特征在于,所述算子处理程序用于对需要执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作;其中,所述预处理操作为生成所述执行计划之后的处理模块所需要执行的处理操作。
7.根据权利要求6所述的数据处理***中语法分析的方法,其特征在于,所述对需要执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行预处理操作的步骤执行前,执行下述步骤:
对需要执行的SQL语句进行语法分析过程中生成的算子操作的数据结构进行合法性检验;所述合法性检验为判断所述SQL语句的算子操作的数据结构是否符合预定的SQL语法规则。
8.根据权利要求3所述的数据处理***中语法分析的方法,其特征在于,所述语法分析结果中包含已通过回调接口调用相应的算子处理程序执行完毕后产生的算子操作处理结果,以及未调用所述回调接口的算子操作。
9.一种数据处理***中语法分析的装置,其特征在于,包括:第一语法分析单元以及第一调用单元;
所述第一语法分析单元,用于对需要执行的语句进行语法分析;
所述第一调用单元,用于在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
10.一种数据存储***中针对SQL语句的语法分析方法,其特征在于,包括:
接收输入的SQL语句;
对所述数据存储***中需要执行的SQL语句进行语法分析;
在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序;
判断所述语法分析是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果;
处理输出的所述语法分析结果的内容。
11.根据权利要求10所述的数据存储***中针对SQL语句的语法分析方法,其特征在于,所述在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序,包括:
在语法分析生成执行计划过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序;其中,所述执行计划是数据存储***中根据所述SQL语句生成的由若干算子操作按照设定的逻辑顺序组成的抽象语法树。
12.一种数据存储***中针对SQL语句的语法分析装置,其特征在于,包括:接收单元、第二语法分析单元、第二调用单元、第二判断单元以及处理单元;
所述接收单元,用于接收输入的SQL语句;
所述第二语法分析单元,用于对数据存储***中需要执行的SQL语句进行语法分析;
所述第二调用单元,用于在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序;
所述第二判断单元,用于判断所述语法分析是否完成以及调用的所述算子处理程序是否执行完毕,若以上判断均为是,则生成已经带回了算子处理程序处理结果的语法分析结果;
所述处理单元,用于处理输出的所述语法分析结果的内容。
13.一种数据处理***中语法分析***,其特征在于,包括:上述权利要求9所述的数据处理***中语法分析的装置,以及权利要求12所述的数据存储***中针对SQL语句的语法分析装置。
14.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储数据处理***中语法分析方法的程序,该设备通电并通过所述处理器运行该数据处理***中语法分析方法的程序后,执行下述步骤:
对需要执行的语句进行语法分析;
在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
15.一种存储设备,其特征在于,存储有数据处理***中语法分析方法的程序,该程序被处理器运行,执行下述步骤:
对需要执行的语句进行语法分析;
在语法分析过程中,通过为所生成的算子操作设置回调接口的方式调用相应的算子处理程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910222559.1A CN111723104A (zh) | 2019-03-22 | 2019-03-22 | 一种数据处理***中语法分析的方法、装置及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910222559.1A CN111723104A (zh) | 2019-03-22 | 2019-03-22 | 一种数据处理***中语法分析的方法、装置及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111723104A true CN111723104A (zh) | 2020-09-29 |
Family
ID=72562763
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910222559.1A Pending CN111723104A (zh) | 2019-03-22 | 2019-03-22 | 一种数据处理***中语法分析的方法、装置及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111723104A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115421701A (zh) * | 2022-11-07 | 2022-12-02 | 北京滴普科技有限公司 | 一种基于模型生成cypher语句的方法和*** |
-
2019
- 2019-03-22 CN CN201910222559.1A patent/CN111723104A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115421701A (zh) * | 2022-11-07 | 2022-12-02 | 北京滴普科技有限公司 | 一种基于模型生成cypher语句的方法和*** |
CN115421701B (zh) * | 2022-11-07 | 2023-01-10 | 北京滴普科技有限公司 | 一种基于模型生成cypher语句的方法和*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9009140B2 (en) | Optimization of database query | |
CN110019218B (zh) | 数据存储与查询方法及设备 | |
US20240045860A1 (en) | Data query method and system, heterogeneous acceleration platform, and storage medium | |
CN112988782B (zh) | Hive支持交互式查询的方法、装置及存储介质 | |
CN110222071B (zh) | 一种数据查询方法、装置、服务器及存储介质 | |
US20210209098A1 (en) | Converting database language statements between dialects | |
CN110688544A (zh) | 一种查询数据库的方法、设备及存储介质 | |
CN113204571B (zh) | 涉及写入操作的sql执行方法、装置及存储介质 | |
CN110737594A (zh) | 自动生成测试用例的数据库标准符合性测试方法及装置 | |
CN112925720A (zh) | 一种软件sql测试方法、装置、存储介质及*** | |
CN116610568A (zh) | 一种识别代码的依赖关系的方法、装置、设备及介质 | |
US6763358B2 (en) | Method and system for activating column triggers in a database management system | |
US9870399B1 (en) | Processing column-partitioned data for row-based operations in a database system | |
CN111723104A (zh) | 一种数据处理***中语法分析的方法、装置及*** | |
CN110580170B (zh) | 软件性能风险的识别方法及装置 | |
US20070088684A1 (en) | Partial updating in a database proxy driver | |
CN115114325B (zh) | 数据查询方法、装置、电子设备以及存储介质 | |
CN116466927A (zh) | 批处理任务的代码生成方法、***、电子设备及存储介质 | |
CN116955393A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN111475167B (zh) | 一种基于HQL语句的Shell脚本依赖关系抽取方法 | |
CN114925142A (zh) | 一种orm框架的多类型数据库兼容方法、装置、设备及介质 | |
CN116561154A (zh) | Sql语句优化方法及装置 | |
CN114090614A (zh) | 一种数据查询方法及装置 | |
CN112416362B (zh) | 一种pdk编译功能的实现方法 | |
CN115809268B (zh) | 一种基于分片索引的自适应查询方法和装置 |
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 |