CN106484706B - 用于分布式系统的执行过程化sql语句的方法和设备 - Google Patents

用于分布式系统的执行过程化sql语句的方法和设备 Download PDF

Info

Publication number
CN106484706B
CN106484706B CN201510530403.1A CN201510530403A CN106484706B CN 106484706 B CN106484706 B CN 106484706B CN 201510530403 A CN201510530403 A CN 201510530403A CN 106484706 B CN106484706 B CN 106484706B
Authority
CN
China
Prior art keywords
execution
sql statement
block
execution block
procedural
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
Application number
CN201510530403.1A
Other languages
English (en)
Other versions
CN106484706A (zh
Inventor
孙若曦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Transwarp Technology Shanghai Co Ltd
Original Assignee
Transwarp Technology Shanghai Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Transwarp Technology Shanghai Co Ltd filed Critical Transwarp Technology Shanghai Co Ltd
Priority to CN201510530403.1A priority Critical patent/CN106484706B/zh
Publication of CN106484706A publication Critical patent/CN106484706A/zh
Application granted granted Critical
Publication of CN106484706B publication Critical patent/CN106484706B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2452Query translation
    • G06F16/24528Standardisation; Simplification

Abstract

本申请的目的是提供一种用于分布式系统的执行过程化SQL语句的方法,通过对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示;对所述中间表示进行语义分析,以转化为若干执行块;逐块执行所述执行块。本申请所述方法和设备增强了大数据平台上的SQL语言表达能力,使得用户可以在数据库层完成复杂的业务逻辑。通过与现有过程化SQL语言的语法兼容,使得现有应用迁移到大数据平台的成本大幅降低。

Description

用于分布式系统的执行过程化SQL语句的方法和设备
技术领域
本申请涉及计算机领域,尤其涉及一种用于分布式系统的执行过程化SQL语句的技术。
背景技术
传统关系型数据库为数据库使用者提供了SQL(Structured Query Language,结构化查询语言)语言作为数据库操作的接口,几乎所有的数据库应用都是建立在SQL语言接口之上,而SQL语言的支持程度则是一个数据库系统是否健壮的最重要指标。
随着企业业务的快速发展,大数据的处理需求成为了所有行业不可避免的问题。而现有的大数据平台对SQL语言的支持十分有限,同时也缺少很多对SQL语言的优化,更没有对过程化SQL语言的支持。这一局限极大的增加了传统应用向大数据平台的迁移成本,成为了传统应用迁移至大数据平台的最大难题。因此,增强在大数据平台上的SQL语言完整度,降低企业的迁移成本,是一个很有意义和挑战的课题。
发明内容
本申请的目的是提供一种用于分布式系统的执行过程化SQL语句的方法和设备,以解决现有大数据平台对SQL语言支持完整度的问题。
根据本申请的一个方面提供的一种用于分布式系统的执行过程化SQL语句的方法,其中,A对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示;
B对所述中间表示进行语义分析,以转化为若干执行块,并逐块执行所述执行块。
进一步地,所述步骤B还包括:
记录若干所述执行块之间的依赖关系;
基于所述依赖关系,从起始的执行块起,依次执行所述执行块。
进一步地,所述过程化SQL语句包括若干非标准SQL语句。
进一步地,所述过程化SQL语句包括若干非标准SQL语句和若干标准SQL语句。
进一步地,所述步骤B包括:
B1对所述过程化SQL语句进行语义分析,将所述非标准SQL语句的中间表示转化为待解释执行的执行块,将所述标准SQL语句的中间表示转化为标准SQL语句执行块;
B2解释执行所述待解释执行的执行块;
B3将所述标准SQL语句执行块发送给分布式系统的计算引擎进行执行。
进一步地,所述步骤B1包括:
根据所述过程化SQL语句的中间表示,分析并记录所述中间表示的属性,所述属性包括参量、变量和类型;
所述步骤B2包括:
创建基于栈式的函数执行框架;
在所述函数执行框架的栈中分配所述中间表示的属性;
利用所述函数执行框架,逐块执行所述执行块。
进一步地,所述步骤B3还包括:
分析所述标准SQL语句的中间表示是否用到其他中间表示的变量,若用到,则记录所述变量的名称和在标准SQL语句中的位置,并在执行到所述标准SQL语句执行块时,先获取所述变量的值,将所述变量的值替换为常量后存入标准SQL语句执行块。
进一步地,所述B还包括:
将所述分布式系统的计算引擎所执行的结果存储于所述分布式系统的存储装置,以供后续执行块读取使用。
进一步地,所述待解释执行的执行块包括以下至少任一项:
起止执行块、赋值语句执行块、控制语句执行块、读取执行块、调用执行块。
根据本申请另一方面提供的一种用于分布式系统的执行过程化SQL语句的设备,其中,所述设备包括:
第一装置,用于对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示;
第二装置,用于对所述中间表示进行语义分析,以转化为若干执行块,并逐块执行所述执行块。
进一步地,所述第二装置还用于:
记录若干所述执行块之间的依赖关系;
基于所述依赖关系,从起始的执行块起,依次执行所述执行块。
进一步地,所述过程化SQL语句包括若干非标准SQL语句。
进一步地,所述过程化SQL语句包括若干非标准SQL语句和若干标准SQL语句。
进一步地,所述第二装置包括:
第二一单元,用于对所述过程化SQL语句进行语义分析,将所述非标准SQL语句转化为待解释执行的执行块,将所述标准SQL语句转化为标准SQL语句执行块;
第二二单元,用于解释执行所述待解释执行的执行块;
第二三单元,用于将所述标准SQL语句执行块发送给分布式系统的计算引擎进行执行。
进一步地,所述第二一单元用于:
根据所述过程化SQL语句的中间表示,分析并记录所述中间表示的属性,所述属性包括参量、变量和类型;
所述第二二单元用于:
创建基于栈式的函数执行框架;
在所述函数执行框架的栈中分配所述中间表示的属性;
利用所述函数执行框架,逐块执行所述执行块。
进一步地,所述第二三单元还用于:
分析所述标准SQL语句的中间表示是否用到其他中间表示的变量,若用到,则记录所述变量的名称和在标准SQL语句中的位置,并在执行到所述标准SQL语句执行块时,先获取所述变量的值,将所述变量的值替换为常量后存入标准SQL语句执行块。
进一步地,所述第二装置还包括:
第二五单元,用于将所述分布式系统的计算引擎所执行的结果存储于所述分布式系统的存储装置,以供后续执行块读取使用。
进一步地,所述待解释执行的执行块包括以下至少任一项:
起止执行块、赋值语句执行块、控制语句执行块、读取执行块、调用执行块。
与现有技术相比,本申请通过提供了用于分布式系统的执行过程化SQL语句的方法和设备,对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示;对所述中间表示进行语义分析,以转化为若干执行块;逐块执行所述执行块。本申请所述方法和设备增强了大数据平台上的SQL语言表达能力,使得用户可以在数据库层完成复杂的业务逻辑。通过与现有过程化SQL语言的语法兼容,使得现有应用迁移到大数据平台的成本大幅降低。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种用于分布式系统的执行过程化SQL语句的方法流程图;
图2示出根据本申请一具体实施例中的一种用于分布式系统的执行过程化SQL语句的中间表示的语法树示意图;
图3示出根据本申请一具体实施例中的一种用于分布式系统的执行过程化SQL语句的执行块示意图;
图4示出根据本申请一个方面的用于分布式系统的执行过程化SQL语句的设备示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
图1示出根据本申请一个方面的一种用于分布式系统的执行过程化SQL语句的方法流程图,结合图1,所述方法包括:步骤S11和步骤S12。
其中,在所述步骤S11中,对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示;在所述步骤S12中,对所述中间表示进行语义分析,以转化为若干执行块,并逐块执行所述执行块。
在此,所述过程化SQL语句来源可以包括用户设备的输入或通过JDBC(Java DataBase Connectivity,JAVA数据库连接)/ODBC(Open Database Connectivity,ODBC)标准接口来中间设备发送的请求等。所述过程化SQL语句可以包括若干非标准SQL语句,此外,所述过程化SQL语句还可以包括若干非标准SQL语句和若干标准SQL语句。
其中,非标准SQL语句可以例如但不限于:起止语句(BEGIN/END)、控制语句(IF/ELSE)、赋值语句、循环语句、游标(CURSOR)、异常捕获等;所述标准SQL语句可以是DML(DataManipulation Language,数据操纵语言命令)。
首先,在所述步骤S11中,对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示。
在所述步骤S11中,通过在标准SQL的词法分析器和语法分析器的基础上进行了扩展,在词法分析器和语法分析器中增加对过程化SQL语句的词法和语法的定义,使其能够在对过程化SQL语句进行词法分析和语法分析时,识别过程化SQL语句的特有关键词和语法结构,包括:函数和过程的定义;函数参数的定义;函数变量的定义,标量、集合和记录数据类型,赋值语句,条件分支语句,LOOP循环语句,FOR循环语句,FORALL循环语句,WHILE循环语句,CONTINUE语句,EXIT语句,返回语句,DML语句。例如,遇到关键词(Keyword)为select,非标准SQL语句,遇到关键词包括:Begin procedure statement……End,则识别为一个起止执行的中间语句(block statement)。
在具体的实施例中,以下代码示例一中描述的过程化SQL语句包括:
Figure BDA0000789137510000061
上述过程化SQL语句包括,开始:“BEGIN”、结束:“END”、如果:“IF”和否则:“ELS”的非标准SQL语句,以及从表格1中选择:“select*from table1”,从表格2中选择:“select*from table2”这两个标准SQL语句,代码示例一的过程化SQL语句表示:用于根据变量var值是否大于0来决定是从table1还是table2来做查询。
接上例,词法分析器需要扩展为能够识别关键字BEGIN、END、IF、THEN、ELSE。语法分析器需要扩展为能够识别BEGIN、END、IF、THEN、ELSE等语句的语法结构。扩展之后的词法分析器和语法分析器能够将上例中的过程化SQL语句识别,形成图2所示的中间表示的语法树。
接着,在所述步骤S12中,对所述中间表示进行语义分析,以转化为若干执行块,并逐块执行所述执行块。
进一步地,在所述步骤S12中,还包括:记录若干所述执行块之间的依赖关系;基于所述依赖关系,从起始的执行块起,依次执行所述执行块。
当所述过程化SQL只包括非标准SQL语句时,将过程化SQL语句全部转化为待解释执行的执行块,所述待解释执行的执行块可以包括以下至少任一项:赋值语句执行块、控制语句执行块(例如IF/ELSE、GOTO、LOOP、FOR、FORALL、WHILE/CONTINUE/EXIT)、读取执行块及调用执行块。
当所述过程化SQL语句包括非标准SQL语句和标准SQL语句时,对所述过程化SQL语句进行语义分析,将所述非标准SQL语句转化为待解释执行的执行块,将所述标准SQL语句转化为标准SQL语句执行块。
图3示出根据本申请一具体实施例中的一种用于分布式系统的执行过程化SQL语句的执行块示意图;接上例,将图2所示的中间表示转化为图3所示的执行块,其中,包括根执行块、条件判断执行块、表达式执行块、标准SQL语句执行块、变量访问执行块和常量访问执行块,并且所述执行块之间的连线关系即为其依赖关系,在执行时,从起始执行块(Begin)起,依此执行所述执行块。
在执行过程中,所述步骤S12包括:步骤S121、步骤S122和步骤S123。
所述步骤S121:对所述过程化SQL语句进行语义分析,将所述非标准SQL语句的中间表示转化为待解释执行的执行块,将所述标准SQL语句的中间表示转化为标准SQL语句执行块;
所述步骤S122:解释执行所述待解释执行的执行块;
所述步骤S123:将所述标准SQL语句执行块发送给分布式系统的计算引擎进行执行。
进一步地,在所述步骤S121还包括:根据所述过程化SQL语句的中间表示,分析并记录所述中间表示的属性,所述属性包括参量、变量和类型;则在所述步骤S122根据所述中间表示的属性,利用基于栈式的函数执行框架执行所述执行块,包括:创建基于栈式的函数执行框架;在所述函数执行框架的栈中分配所述中间表示的属性;利用所述函数执行框架,逐块执行所述执行块。
进一步地,所述步骤S123还包括:分析所述标准SQL语句的中间表示是否用到其他中间表示的变量,若用到,则记录所述变量的名称和在标准SQL语句中的位置,并在执行到所述标准SQL语句执行块时,先获取所述变量的值,将所述变量的值替换为常量后存入标准SQL语句执行块。随后将变量的值替换为常量的标准SQL语句执行块发送分布式系统的计算引擎进行执行。
具体地,代码示例二如下:
Declare
Var int:=100
Begin
Select*from T where col<var
End
所述代码示例二描述了一个整型(int)的变量var,首先定义变量Var为100,开始执行从表格T中选择小于var的数据。在步骤S123中,首先通过语义分析,分析到标准SQL语句“Select*from T where col<var”用到其他中间表示的变量var,记录变量的名称为var和在标准SQL语句中的位置为小于号后;在执行到所述标准SQL语句执行块时,先获取所述变量var的值为100(执行至此的变量通常都已通过之前执行过程获得值的结果),将所述变量的值替换为常量100后存入标准SQL语句执行块(Select*from T where col<var的执行块),随后将变量的值替换为常量的标准SQL语句执行块发送分布式系统的计算引擎进行执行。
通过交由分布式系统的计算引擎进行执行,能够提高数据处理效率,进而实现数据的实时处理,使得用户可以在数据库层完成复杂的业务逻辑,并且通过与现有过程化SQL语言的语法兼容,使得现有应用迁移到大数据平台的成本大幅降低。
进一步地,所述步骤S12还包括:步骤S124,在所述步骤S124中,将所述分布式系统的计算引擎所执行的结果存储于所述分布式系统的存储装置,以供后续执行块读取使用。例如,游标(CURSOR)语句可以用于过程化SQL语句和标准SQL语句之间的数据调用,可以读取存储于所述分布式系统的存储装置的数据。
具体地,如以下示例代码三所示:
Declare
cursor C is Select name from T//从T表中选name字段的一列数据
Var_name string//定义本地变量
Begin
Open C//打开游标语句
Fetch C into var_name//第一种情况,从游标C中获取一条数据到本地的变量Var_name
……
Putline(var_name)//打印本地的Var_name
示例代码三表示,定义游标C表示从T表中选name字段的一列数据,定义本地变量var_name,开始执行打开游标C,从游标C中获取一条数据到本地变量var_name中,此后本地变量var_name的数据。最后可以通过游标内部的状态确定是否已取完。
此外,如以下示例代码四所示:
Declare
cursor C is Select name from T//从T表中选name字段的一列数据
Var_name string//定义本地变量
Begin
Open C//打开游标语句
Fetch C buck collect into本地数组//从游标C中获取所有数据到本地数组
Limit 100//最大取100条
示例代码四表示,定义游标C表示从T表中选name字段的一列数据,定义本地变量var_name,开始执行打开游标C,从游标C中获取所有数据到本地数组,可以限制最大取100条。最后可以通过游标内部的状态确定是否已取完。
在步骤S124中,通过游标(CURSOR)语句可以将存储于分布式系统的存储装置中的数据读取,并未后续执行块在执行中使用。当然,本领域技术人员应当能够理解,所述步骤S124通过游标读取分布式系统的存储装置中的数据的方式仅为举例,其他能够读取方式适用于本申请的,也包含在本申请的思想范围之内。
图4示出根据本申请一个方面的用于分布式系统的执行过程化SQL语句的设备示意图,结合图4,所述设备1包括:第一装置11和第二装置S12。
其中,在所述第一装置11中,对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示;在所述第二装置12中,对所述中间表示进行语义分析,以转化为若干执行块并逐块执行所述执行块。
在此,所述过程化SQL语句来源可以包括用户设备的输入或通过JDBC(Java DataBase Connectivity,JAVA数据库连接)/ODBC(Open Database Connectivity,ODBC)标准接口来中间设备发送的请求等。所述过程化SQL语句可以包括若干非标准SQL语句,此外,所述过程化SQL语句还可以包括若干非标准SQL语句和若干标准SQL语句。
其中,非标准SQL语句可以例如但不限于:起止语句(BEGIN/END)、控制语句(IF/ELSE)、赋值语句、循环语句、游标、异常捕获等;所述标准SQL语句可以是DML(DataManipulation Language,数据操纵语言命令)。
首先,在所述第一装置11中,对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示。
在所述第一装置11中,通过在标准SQL的词法分析器和语法分析器的基础上进行了扩展,在词法分析器和语法分析器中增加对过程化SQL语句的词法和语法的定义,使其能够在对过程化SQL语句进行词法分析和语法分析时,识别过程化SQL语句的特有关键词和语法结构,包括:函数和过程的定义;函数参数的定义;函数变量的定义,标量、集合和记录数据类型,赋值语句,条件分支语句,LOOP循环语句,FOR循环语句,FORALL循环语句,WHILE循环语句,CONTINUE语句,EXIT语句,返回语句,DML语句。例如,遇到关键词(Keyword)为select,非标准SQL语句,遇到关键词包括:Begin procedure statement……End,则识别为一个起止执行的中间语句(block statement)。
在具体的实施例中,例如一段过程化SQL语句如下:
Figure BDA0000789137510000103
上述过程化SQL语句包括,开始:“BEGIN”、结束:“END”、如果:“IF”和否则:“ELS”的非标准SQL语句,以及从表格1中选择:“select*from table1”,从表格2中选择:“select*from table2”这两个标准SQL语句,代码示例一的过程化SQL语句表示:用于根据变量var值是否大于0来决定是从table1还是table2来做查询。
接上例,词法分析器需要扩展为能够识别关键字BEGIN、END、IF、THEN、ELSE。语法分析器需要扩展为能够识别BEGIN、END、IF、THEN、ELSE等语句的语法结构。扩展之后的词法分析器和语法分析器能够将上例中的过程化SQL语句识别,形成图2所示的中间表示的语法树。
接着,在所述第二装置12中,对所述中间表示进行语义分析,以转化为若干执行块,并逐块执行所述执行块。
进一步地,在第二装置12中,还包括:记录若干所述执行块之间的依赖关系;基于所述依赖关系,从起始的执行块起,依次执行所述执行块。
当所述过程化SQL只包括非标准SQL语句时,将过程化SQL语句全部转化为待解释执行的执行块,所述待解释执行的执行块可以包括以下至少任一项:赋值语句执行块、控制语句执行块(例如IF/ELSE、GOTO、LOOP、FOR、FORALL、WHILE/CONTINUE/EXIT)、读取执行块及调用执行块。
当所述过程化SQL语句包括非标准SQL语句和标准SQL语句时,对所述过程化SQL语句进行语义分析,将所述非标准SQL语句转化为待解释执行的执行块,将所述标准SQL语句转化为标准SQL语句执行块。
图3示出根据本申请一具体实施例中的一种用于分布式系统的执行过程化SQL语句的执行块示意图;接上例,将图2所示的中间表示转化为图3所示的执行块,其中,包括根执行块、条件判断执行块、表达式执行块、标准SQL语句执行块、变量访问执行块和常量访问执行块。
所述第二装置12包括:第二一单元121、第二二单元122和第二三单元123。
所述第二一单元121用于:对所述过程化SQL语句进行语义分析,将所述非标准SQL语句的中间表示转化为待解释执行的执行块,将所述标准SQL语句的中间表示转化为标准SQL语句执行块;
所述第二二单元122用于:解释执行所述待解释执行的执行块;
所述第二三单元123用于:将所述标准SQL语句执行块发送给分布式系统的计算引擎进行执行。
进一步地,在所述第二一单元121还包括:根据所述过程化SQL语句的中间表示,分析并记录所述中间表示的属性,所述属性包括参量、变量和类型;则在所述第二二单元122根据所述中间表示的属性,利用基于栈式的函数执行框架执行所述执行块,包括:创建基于栈式的函数执行框架;在所述函数执行框架的栈中分配所述中间表示的属性;利用所述函数执行框架,逐块执行所述执行块。
进一步地,所述第二三单元123还包括:分析所述标准SQL语句的中间表示是否用到其他中间表示的变量,若用到,则记录所述变量的名称和在标准SQL语句中的位置,并在执行到所述标准SQL语句执行块时,先获取所述变量的值,将所述变量的值替换为常量后存入标准SQL语句执行块。随后将变量的值替换为常量的标准SQL语句执行块发送分布式系统的计算引擎进行执行。
具体地,代码示例二如下:
Declare
Var int:=100
Begin
Select*from T where col<var
End
所述代码示例二描述了一个整型(int)的变量var,首先定义变量Var为100,开始执行从表格T中选择小于var的数据。在第二三单元123中,首先通过语义分析,分析到标准SQL语句“Select*from T where col<var”用到其他中间表示的变量var,记录变量的名称为var和在标准SQL语句中的位置为小于号后;在执行到所述标准SQL语句执行块时,先获取所述变量var的值为100(执行至此的变量通常都已通过之前执行过程获得值的结果),将所述变量的值替换为常量100后存入标准SQL语句执行块(Select*from T where col<var的执行块),随后将变量的值替换为常量的标准SQL语句执行块发送分布式系统的计算引擎进行执行。
通过交由分布式系统的计算引擎进行执行,能够提高数据处理效率,进而实现数据的实时处理,使得用户可以在数据库层完成复杂的业务逻辑,并且通过与现有过程化SQL语言的语法兼容,使得现有应用迁移到大数据平台的成本大幅降低。
进一步地,所述第二装置12还包括:第二四单元124,所述第二四单元124用于,将所述分布式系统的计算引擎所执行的结果存储于所述分布式系统的存储装置,以供后续执行块读取使用。例如,游标(CURSOR)语句可以用于过程化SQL语句和标准SQL语句之间的数据调用,可以读取存储于所述分布式系统的存储装置的数据。
具体地,如以下示例代码三所示:
Declare
cursor C is Select name from T//从T表中选name字段的一列数据
Var_name string//定义本地变量
Begin
Open C//打开游标语句
Fetch C into var_name//第一种情况,从游标C中获取一条数据到本地的变量Var_name
……
Putline(var_name)//打印本地的Var_name
示例代码三表示,定义游标C表示从T表中选name字段的一列数据,定义本地变量var_name,开始执行打开游标C,从游标C中获取一条数据到本地变量var_name中,此后本地变量var_name的数据。最后可以通过游标内部的状态确定是否已取完。
此外,如以下示例代码四所示:
Declare
cursor C is Select name from T//从T表中选name字段的一列数据
Var_name string//定义本地变量
Begin
Open C//打开游标语句
Fetch C buck collect into本地数组//从游标C中获取所有数据到本地数组
Limit 100//最大取100条
示例代码四表示,定义游标C表示从T表中选name字段的一列数据,定义本地变量var_name,开始执行打开游标C,从游标C中获取所有数据到本地数组,可以限制最大取100条。最后可以通过游标内部的状态确定是否已取完。
第二四单元124通过游标(CURSOR)语句可以将存储于分布式系统的存储装置中的数据读取,并为后续执行块在执行中使用。当然,本领域技术人员应当能够理解,所述第二四单元124通过游标读取分布式系统的存储装置中的数据的方式仅为举例,其他能够读取方式适用于本申请的,也包含在本申请的思想范围之内。
与现有技术相比,本申请通过提供了用于分布式系统的执行过程化SQL语句的方法和设备,对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示;对所述中间表示进行语义分析,以转化为若干执行块;逐块执行所述执行块。本申请所述方法和设备增强了大数据平台上的SQL语言表达能力,使得用户可以在数据库层完成复杂的业务逻辑。通过与现有过程化SQL语言的语法兼容,使得现有应用迁移到大数据平台的成本大幅降低。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

Claims (8)

1.一种用于分布式系统的执行过程化SQL语句的方法,其中,所述方法包括:
A对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示,所述过程化SQL语句包括若干非标准SQL语句和若干标准SQL语句;
B对所述中间表示进行语义分析,以转化为若干执行块,并逐块执行所述执行块;
所述步骤B还包括:
记录若干所述执行块之间的依赖关系;
基于所述依赖关系,从起始的执行块起,依次执行所述执行块;
所述步骤B包括:
B1对所述过程化SQL语句进行语义分析,将所述非标准SQL语句的中间表示转化为待解释执行的执行块,将所述标准SQL语句的中间表示转化为标准SQL语句执行块;
B2解释执行所述待解释执行的执行块;
B3将所述标准SQL语句执行块发送给分布式系统的计算引擎进行执行;
所述步骤B3还包括:
分析所述标准SQL语句的中间表示是否用到其他中间表示的变量,若用到,则记录所述变量的名称和在标准SQL语句中的位置,并在执行到所述标准SQL语句执行块时,先获取所述变量的值,将所述变量的值替换为常量后存入标准SQL语句执行块。
2.根据权利要求1所述的方法,其中,所述步骤B1包括:
根据所述过程化SQL语句的中间表示,分析并记录所述中间表示的属性,所述属性包括参量、变量和类型;
所述步骤B2包括:
创建基于栈式的函数执行框架;在所述函数执行框架的栈中分配所述中间表示的属性;利用所述函数执行框架,逐块执行所述执行块。
3.根据权利要求1至2中任一项所述的方法,其中,所述B还包括:
将所述分布式系统的计算引擎所执行的结果存储于所述分布式系统的存储装置,以供后续执行块读取使用。
4.根据权利要求1至2中任一项所述的方法,其中,所述待解释执行的执行块包括以下至少任一项:
起止执行块、赋值语句执行块、控制语句执行块、读取执行块、调用执行块。
5.一种用于分布式系统的执行过程化SQL语句的设备,其中,所述设备包括:
第一装置,用于对过程化SQL语句进行词法分析和语法分析,以建立所述过程化SQL语句的中间表示,所述过程化SQL语句包括若干非标准SQL语句和若干标准SQL语句;
第二装置,用于对所述中间表示进行语义分析,以转化为若干执行块,并逐块执行所述执行块;
所述第二装置还用于:
记录若干所述执行块之间的依赖关系;基于所述依赖关系,从起始的执行块起,依次执行所述执行块;
所述第二装置包括:
第二一单元,用于对所述过程化SQL语句进行语义分析,将所述非标准SQL语句转化为待解释执行的执行块,将所述标准SQL语句转化为标准SQL语句执行块;
第二二单元,用于解释执行所述待解释执行的执行块;
第二三单元,用于将所述标准SQL语句执行块发送给分布式系统的计算引擎进行执行;
所述第二三单元还用于:
分析所述标准SQL语句的中间表示是否用到其他中间表示的变量,若用到,则记录所述变量的名称和在标准SQL语句中的位置,并在执行到所述标准SQL语句执行块时,先获取所述变量的值,将所述变量的值替换为常量后存入标准SQL语句执行块。
6.根据权利要求5所述的设备,其中,所述第二一单元用于:
根据所述过程化SQL语句的中间表示,分析并记录所述中间表示的属性,所述属性包括参量、变量和类型;
所述第二二单元用于:
创建基于栈式的函数执行框架;在所述函数执行框架的栈中分配所述中间表示的属性;利用所述函数执行框架,逐块执行所述执行块。
7.根据权利要求5所述的设备,其中,所述第二装置还包括:
第二五单元,用于将所述分布式系统的计算引擎所执行的结果存储于所述分布式系统的存储装置,以供后续执行块读取使用。
8.根据权利要求5至7中任一项所述的设备,其中,所述待解释执行的执行块包括以下至少任一项:
起止执行块、赋值语句执行块、控制语句执行块、读取执行块、调用执行块。
CN201510530403.1A 2015-08-26 2015-08-26 用于分布式系统的执行过程化sql语句的方法和设备 Active CN106484706B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510530403.1A CN106484706B (zh) 2015-08-26 2015-08-26 用于分布式系统的执行过程化sql语句的方法和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510530403.1A CN106484706B (zh) 2015-08-26 2015-08-26 用于分布式系统的执行过程化sql语句的方法和设备

Publications (2)

Publication Number Publication Date
CN106484706A CN106484706A (zh) 2017-03-08
CN106484706B true CN106484706B (zh) 2020-03-10

Family

ID=58233723

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510530403.1A Active CN106484706B (zh) 2015-08-26 2015-08-26 用于分布式系统的执行过程化sql语句的方法和设备

Country Status (1)

Country Link
CN (1) CN106484706B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117591543B (zh) * 2024-01-19 2024-04-02 成都工业学院 一种中文自然语言的sql语句生成方法和装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7716213B2 (en) * 2007-04-26 2010-05-11 International Business Machines Corporation Apparatus, system, and method for efficiently supporting generic SQL data manipulation statements
CN101499093A (zh) * 2009-03-05 2009-08-05 国电南瑞科技股份有限公司 一种监控系统内存数据库通用交互方法
CN102609451B (zh) * 2012-01-11 2014-12-17 华中科技大学 面向流式数据处理的sql查询计划生成方法

Also Published As

Publication number Publication date
CN106484706A (zh) 2017-03-08

Similar Documents

Publication Publication Date Title
US9767147B2 (en) Method of converting query plans to native code
Armbrust et al. Spark sql: Relational data processing in spark
US7167848B2 (en) Generating a hierarchical plain-text execution plan from a database query
US8601016B2 (en) Pre-generation of structured query language (SQL) from application programming interface (API) defined query systems
US7711704B2 (en) System and method of providing date, arithmetic and other relational functions for OLAP sources
CN106611044B (zh) 一种sql优化方法及设备
US20240028607A1 (en) Facilitating data transformations
Lin et al. Full-text indexing for optimizing selection operations in large-scale data analytics
CN109033410B (zh) 一种基于正则与字符串切割的sql解析方法
US10915535B2 (en) Optimizations for a behavior analysis engine
CN106933869B (zh) 一种操作数据库的方法和装置
CN117093599A (zh) 面向异构数据源的统一sql查询方法
US8108421B2 (en) Query throttling during query translation
CN113297251A (zh) 多源数据检索方法、装置、设备及存储介质
US20210397609A1 (en) Automated information retrieval system and semantic parsing
Schäfer et al. JODA: A vertically scalable, lightweight JSON processor for big data transformations
CN110580170B (zh) 软件性能风险的识别方法及装置
CN106484706B (zh) 用于分布式系统的执行过程化sql语句的方法和设备
CN107818181A (zh) 基于Plcient交互式引擎的索引方法及其系统
Rompf et al. A SQL to C compiler in 500 lines of code
CN115809294A (zh) 一种基于Spark SQL临时视图的快速ETL方法
Fischer et al. Translating SPARQL and SQL to XQuery
EP3816814A1 (en) Crux detection in search definitions
CN113448942B (zh) 数据库访问方法、装置、设备及存储介质
CN113064914A (zh) 数据提取方法及装置

Legal Events

Date Code Title Description
C06 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
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 200233 11-12 / F, building B, 88 Hongcao Road, Xuhui District, Shanghai

Patentee after: Star link information technology (Shanghai) Co.,Ltd.

Address before: Room 1902, 19th floor, block a, 391 Guiping Road, Xuhui District, Shanghai 200233

Patentee before: TRANSWARP TECHNOLOGY (SHANGHAI) Co.,Ltd.