CN104199831A - 信息处理方法及装置 - Google Patents
信息处理方法及装置 Download PDFInfo
- Publication number
- CN104199831A CN104199831A CN201410373530.0A CN201410373530A CN104199831A CN 104199831 A CN104199831 A CN 104199831A CN 201410373530 A CN201410373530 A CN 201410373530A CN 104199831 A CN104199831 A CN 104199831A
- Authority
- CN
- China
- Prior art keywords
- type
- node
- sql
- strategy
- fundamental element
- 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
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种信息处理方法及装置;所述方法包括:基于第一策略识别出SQL代码中的基本元素;对从所述SQL代码中解析出的基本元素进行组合操作,得到SQL语句,构建语法树;遍历所述语法树中的SQL语句,基于所遍历的SQL语句中的基本元素的类型,以及所述基本元素的类型与节点的对应关系,为所遍历的SQL语句中的基本元素对应构建节点,得到所述语法树的中间语言描述;基于所述语法树的中间语言描述,构建对应所述SQL代码的数据流图。采用本发明实施例的技术方案,能够基于SQL代码快速准确地得到对应的数据流图,便于开发人员基于数据流图对系统二次开发或升级,降低实施成本。
Description
技术领域
本发明涉及数据库技术,尤其涉及一种信息处理方法及装置。
背景技术
SQL是一种访问和处理数据库的标准的计算机语言,SQL支持访问和处理数据库系统中的数据,这类数据库包括:Oracle、Sybase、SQL Server、DB2和Access;实际应用中,利用SQL进行的开发设计工作往往会借助于数据流图这一工具,数据流图(DFD,Data Flow Diagram)是数据流的图形化表示,数据流是专门进行数据操作的工作流(也称为流水线),数据流包含了顺序执行的多个节点(每个节点都是对数据的一种转换),数据流通常以源转换开始,以目标转换结束,借助于数据流图,开发人员可以方便直观地对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语句中的基本元素对应构建节点,包括:
在所述基本元素的类型与节点的对应关系中,依次查询所述SQL语句中的基本元素,以确定所述SQL语句中的基本元素对应的节点类型;
基于所确定的节点类型对应构建节点。
优选地,所述构建节点,包括:
为待构建节点分配指针;
为所述待构建节点构建数据结构;其中,
所述数据结构中包括所述待构建节点的名称、所述待构建节点的特定属性、以及所述待构建节点输出的目标列的列名。
优选地,当所述基本元素不包括合并union指令、以及连接join指令时,所述为待构建节点分配指针,包括:
为待构建的节点分配两个指针;其中,所述两个指针对应指向所述待构建节点的前驱节点、所述待构建节点在数据流上所连接的下一个节点;
当所述基本元素包括union指令、或连接join指令时,所述为待构建节点分配指针,包括:
为所述为待构建节点分配三个指针;其中,所述三个指针对应指向所述待构建节点的前驱节点、所述待构建节点所操作的两个目标节点。
本发明实施例还提供一种信息处理装置,所述装置包括:
识别单元,用于基于第一策略识别出SQL代码中的基本元素,所述基本元素为所述SQL代码在SQL语法上的最小语义单元;
组合单元,用于对从所述SQL代码中解析出的基本元素进行组合操作,得到SQL语句,基于所述SQL语句之间的连接关系构建语法树,所述语法树表征所述SQL代码在SQL语法上的拓扑结构;
第一构建单元,用于遍历所述语法树中的SQL语句,基于所遍历的SQL语句中的基本元素的类型,以及所述基本元素的类型与节点的对应关系,为所遍历的SQL语句中的基本元素对应构建节点;
第二构建单元,用于基于所构建的节点得到所述语法树的中间语言描述,并基于所述语法树的中间语言描述,构建对应所述SQL代码的数据流图。
优选地,所述识别单元包括:
第一识别模块,用于识别所述SQL代码中的分隔标识,基于所识别出的分隔标识,将所述SQL代码进行分割,得到字符串;
第二识别模块,用于基于第二策略对所述字符串的类型进行匹配,所述第二策略的类型为多个且与不同的基本元素的类型一一对应;
标识模块,用于根据所述字符串所匹配到的第二策略,标识所述字符串为基本元素,且所述字符串的类型为所述字符串所匹配到的第二策略对应的基本元素的类型。
优选地,所述基本元素的类型包括以下至少一种:
SQL指令类型、SQL运算符类型、列名类型、表名类型、整数类型、浮点数类型、注释类型和空白类型;
相应地,所述第二识别模块,还用于按照以下顺序读取所述第二策略,对所述字符串的类型进行匹配:
注释类型匹配策略、SQL指令类型匹配策略、SQL运算符类型匹配策略、列名类型匹配策略、表名类型匹配策略、数据格式类型匹配策略;
其中,所述数据格式类型匹配策略包括以下至少之一:
整数类型匹配策略、浮点数类型匹配策略和空白类型匹配策略。
优选地,所述组合单元包括:
匹配模块,用于基于第三策略,对所述SQL代码中解析出的基本元素进行匹配操作,所述第三策略的类型为多个且与不同的SQL语句类型一一对应;
组合模块,用于将与所述第三策略匹配的基本元素组合为SQL语句,并将所组合成的SQL语句的类型标识为所述匹配模块匹配到的第三策略对应的类型。
优选地,所述第一构建单元包括:
查询模块,用于在所述基本元素的类型与节点的对应关系中依次查询所述SQL语句中的基本元素,以确定所述SQL语句中的基本元素对应的节点类型;
构建模块,用于基于所确定的节点类型对应构建节点。
优选地,所述构建模块还用于为待构建的节点分配指针;为所述待构建的节点构建数据结构;
其中,所述数据结构中包括所述待构建节点的名称、所述待构建节点的特定属性、以及所述待构建节点输出的目标列的列名。
优选地,所述第一构建单元,还用于当所述基本元素不包括合并union指令、以及连接join指令时,为所述待构建节点分配两个指针;其中,所述两个指针对应指向所述待构建节点的前驱节点、所述待构建节点在数据流上所连接的下一个节点;
所述第一构建单元,还用于当所述基本元素包括union指令、或连接join指令时,为所述待构建节点分配三个指针;其中,所述三个指针对应指向所述待构建节点的前驱节点、所述节点所操作的两个目标节点。
本发明实施例中,通过对SQL代码的解析,可以得到SQL代码在SQL语法上的拓扑结构即语法树,根据基本元素的类型与节点的对应关系,遍历语法树可以构建节点,得到语法树的中间语言描述,以利用中间语言描述输出对应的数据流图,整个处理过程无需人工介入,这就可以节省人工对SQL进行分析的时间,便于开发人员根据数据流图对系统进行二次开发,提升了开发效率。
附图说明
图1是本发明实施例中信息处理方法的实现流程图一;
图2a是本发明实施例中信息处理装置的结构示意图;
图2b是本发明实施例中识别单元的结构示意图;
图2c是本发明实施例中组合单元的结构示意图;
图2d是本发明实施例中第一构建单元的结构示意图;
图3是本发明实施例中信息处理方法的实现流程图二;
图4是本发明实施例中SQL解析的实现流程图;
图5是本发明实施例中语法树的一个示意图;
图6是本发明实施例中构建节点的示意图;
图7是本发明实施例中信息处理方法的实现流程图三;
图8是本发明实施例中case0对应的构建节点的实现流程图;
图9是本发明实施例中case1对应的构建节点的实现流程图;
图10是本发明实施例中case2对应的构建节点的实现流程图;
图11是本发明实施例中case3对应的构建节点的实现流程图;
图12是本发明实施例中case4对应的构建节点的实现流程图;
图13是本发明实施例中case5对应的构建节点的实现流程图;
图14是本发明实施例中case6对应的构建节点的实现流程图;
图15是本发明实施例中信息处理方法的实现流程图四;
图16是本发明实施例中输出的DIL的示意图;
图17是本发明实施例中数据流图的一个示意图。
具体实施方式
发明人在实施本发明的过程中发现,实际应用中,已有的系统总是会有实现的SQL代码(或称为SQL文本),但不一定会有对应的数据流图,如果需要通过数据流图的方式进行系统的二次开发或升级,就需要对SQL进行人工分析,以得到数据流图,对于大型的复杂的系统,获取数据流图会耗费相当长的时间,增加了开发人员二次开发或升级的成本;发明人在实施本发明的过程中还发现,SQL代码可以划分为若干基本要素(由字符串构成)包括:SQL指令、SQL运算符、列名(数据表中的某一列的数据的名称,例如区域、人名等)、表名(即数据表的名称)、数据(例如整数、浮点数等);如果能够基于SQL代码中的字符串识别出SQL代码的基本元素,并进一步解析出上述基本元素之间的SQL语法关系,则可得到上述基本元素所构成的SQL语句,进而基于SQL语句之间的连接关系可以得到整个SQL代码在SQL语法上的拓扑结构即语法树,通过遍历语法树中的SQL语句,可以顺序解析出SQL代码中对数据的处理(对应节点),通过对应的节点可以得到语法树的中间语言描述,继而可以输出数据流图,整个处理过程无需人工介入,能够节省系统二次开发的难度门槛,节省开发时间。
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例记载一种信息处理方法,如图1所示,本发明实施例记载的信息处理方法包括以下步骤:
步骤101,基于第一策略识别出SQL代码中的基本元素,所述基本元素为所述SQL代码在SQL语法上的最小语义单元。
所述基本元素的类型包括以下至少一种:SQL指令类型、SQL运算符类型、列名类型、表名类型、整数类型、浮点数类型、注释类型和空白类型;这里,所述的空白类型是指空白字符构成的基本元素;由于上述基本元素在SQL代码是基本的语义单元,且总是以分隔标识(例如空格)分隔;因此通过第一策略(实际应用中,所述第二策略可以采用正则表达式或函数的形式)识别所述SQL代码中的分隔标识,基于所识别出的分隔标识,可以将所述SQL代码进行分割,得到字符串,所述字符串可能是上述任意一种类型的基本元素,因此,可以基于第二策略对所述字符串的类型进行匹配,所述第二策略(实际应用中,所述第二策略可以采用正则表达式或函数的形式)的类型为多个且与不同的基本元素的类型一一对应,根据所述字符串所匹配到的第二策略,标识所述字符串为基本元素,且所述字符串的类型为所述字符串所匹配到的第二策略对应的基本元素的类型,这样就实现了对SQL代码进行分词的处理。
需要指出的是,对所述字符串的类型进行匹配时,为了避免基本元素的类型识别错误的情况,例如,由于SQL指令和列名均由字母构成,如果首先对列名进行匹配,则可能将SQL指令误识别为列名;本发明实施例中,可以首先按照以下顺序读取所述第二策略,对所述字符串进行匹配:注释类型匹配策略、SQL指令类型匹配策略、SQL运算符类型匹配策略、列名类型匹配策略、表名类型匹配策略、数据格式类型匹配策略;其中,所述数据格式类型匹配策略包括以下至少之一:整数类型匹配策略、浮点数类型匹配策略、空白类型匹配策略对字符串进行匹配;
其中,整数类型匹配策略、浮点数类型匹配策略和空白类型匹配策略这三种第二策略的读取顺序总是位于其他第二策略(如注释类型匹配策略、SQL指令类型匹配策略)之后,并且,发明人在实施本发明的过程中还发现,由于整数类型、浮点数类型和空白类型的字符串在形式上完全不同,因此,利用整数类型匹配策略对字符串进行匹配时,不会出现将浮点型字符串、空白类型字符串误匹配为整数类型字符串的情况;同理,对于利用浮点数类型匹配策略对字符串进行匹配、或利用空白类型匹配策略对字符串进行字符串,均不会出现误匹配的情况;因此在读取数据格式类型匹配策略中的匹配策略时,整数类型匹配策略、浮点数类型匹配策略和空白类型匹配策略的读取顺序可以采用对整数类型匹配策略、浮点数类型匹配策略和空白类型匹配策略的任意一种排序,本发明实施例中不做限定。
步骤102,对从所述SQL代码中解析出的基本元素进行组合操作,得到SQL语句,基于所述SQL语句之间的连接关系构建语法树,所述语法树表征所述SQL代码在SQL语法上的拓扑结构。
在SQL语法中,在SQL的起始的基本元素不同时,所对应的SQL语句的结束字符串也不同;例如,以“where”起始基本元素(也可称为起始词或起始字符串)的SQL语句中,可以order、group、limit、union、except中的任意一个作为SQL语句结束时所使用的结束基本元素(也可称为结束词或结束字符串);也就是说,SQL语法描述了不同类型的SQL语句起始所使用的基本元素、以及SQL语句结束所使用的基本元素;每一类型的SQL语句的起始基本元素和结束基本元素可以采用正则表达式或函数描述,本发明实施例中成为第三策略;
相应地,可以通过以下方式得到SQL语句:基于第三策略对所述SQL代码中解析出的基本元素进行匹配操作,所述第三策略的类型为多个且与不同SQL语句的类型一一对应;将与所述第三策略匹配的基本元素组合为SQL语句,并将所组合成的SQL语句的类型标识为所匹配到的第三策略对应的类型;
作为一个示例,SQL语句可以划分为以下类型:(table),用于对数据表进行join操作;select from,用于从数据表中过滤数据;select from where,用于从数据表中有条件地过滤数据;select from group,用于从数据表中过滤数据并分组;select from where group,用于从数据表中有条件地过滤数据并分组;(left/right/inner)join,用于从两个数据表中查询数据;union(all),用于合并从数据表中过滤的数据;这里,所述的SQL语句之间的连接关系可以理解为数据传递关系,即存在连接关系的SQL语句之间会传递数据。
还需要指出的是,对于步骤101中所使用的列名类型匹配策、表名类型匹配策略基本一致,都是对名称的识别(往往由字母构成),因此,在步骤101中识别出列名类型和表名类型的基本元素之后,步骤102中还可以根据得到的SQL语句的语法对列名和表名类型的基本元素进行进一步识别;例如,对于select from类型的SQL语句,在步骤101中,根据列名匹配策略,可能会将SQL指令类型的基本元素“select”、“from”之间的字符串、以及“from”之后的字符串识别为列名,而在步骤101中识别出该语句类型为select from类型之后,根据对应的SQL语法,确定“from”之后的字符串应当为表名,也就是说,步骤102中基于与所得到的SQL语句的SQL语法,可以对基本元素的类型识别作进一步校正。
步骤103,遍历所述语法树中的SQL语句,基于所遍历的SQL语句中的基本元素的类型,以及所述基本元素的类型与节点的对应关系,为所遍历的SQL语句中的基本元素对应构建节点。
这里所述的构建节点包括可以以下处理:为待构建的节点分配指针,并为待构建的节点构建数据结构;其中,所述数据结构包括待构建节点的名称、待构建节点的特定属性、以及待构建节点输出的目标列的列名。
作为一个实施方式,当所述基本元素不包括union指令、以及join指令时,可以通过以下方式为待构建节点分配指针:为所述待构建节点分配两个指针;其中,所述两个指针对应指向所述待构建节点的前驱节点、所述待构建节点在数据流上所连接的下一个节点;
当所述基本元素包括union指令、或join指令时,由于union指令和join指令为对两个数据源对应的节点(也即目标节点)进行数据操作,分配两个指针不足以描述为union指令、或join指令所构建的节点与其他节点之间的连接关系,因此可以为所述待构建节点分配三个指针;其中,所述三个指针对应指向所述待构建节点的前驱节点、所述待构建节点所操作的两个目标节点。
当节点构建完毕时,可以利用中间语言描述所构建的所有节点之间的连接关系、以及节点的数据结构,也即得到了语法树的中间语言描述。
作为一个示例,所述基于所遍历的SQL语句中的基本元素的类型,以及所述基本元素的类型与节点的对应关系,为所遍历的SQL语句中的基本元素对应构建节点时,可以依次在所述基本元素的类型与节点的对应关系中进行查询将所述SQL语句中的基本元素,确定所述SQL语句中的基本元素对应的节点类型;基于所确定的节点类型对应构建节点;发明人在实施本发明的过程中发现,不同类型的基本元素与数据流图中的节点之间存在一一对应的关系,例如,过滤节点与基本元素select from(SQL指令)和基本元素where(SQL指令)指令通知出现时的SQL语句存在对应关系,基本元素select from(SQL指令)与可以与分组聚合节点对应,基本元素limit(SQL指令)与限制条数节点对应。
步骤104,基于所构建的节点得到所述语法树的中间语言描述,并基于所述语法树的中间语言描述,构建对应所述SQL代码的数据流图。
这里,基于所构建的节点得到所述语法树的中间语言描述是指,利用中间语言来描述所述语法树中的节点,包括为节点所分配的指针以及节点的数据结构(包括节点的特定属性、节点输出的目标列的列名等),由于节点的指针描述了节点之间的连接关系,因此基于语法树的中间语言描述,可以图像化呈现节点之间的连接关系,以及节点的数据结构,也即呈现数据流图。
本发明实施例中,通过对SQL代码的解析,可以得到SQL代码在SQL语法上的拓扑结构即语法树,根据基本元素的类型与节点的对应关系,遍历语法树可以构建节点,得到语法树的中间语言描述,以利用中间语言描述输出对应的数据流图,整个处理过程无需人工介入,这就可以节省人工对SQL进行分析的时间,便于开发人员根据数据流图对系统进行二次开发,提升了开发效率。
本发明实施例还记载一种计算机存储介质,所述计算机存储介质中存储有计算机可执行指令,所述计算机可执行指令用于执行图1所示的信息处理方法。
本发明实施例记载一种信息处理装置,如图2a所示,所述装置包括:
识别单元21,用于基于第一策略识别出SQL代码中的基本元素,所述基本元素为所述SQL代码在SQL语法上的最小语义单元;
组合单元22,用于对从所述SQL代码中解析出的基本元素进行组合操作,得到SQL语句,基于所述SQL语句之间的连接关系构建语法树,所述语法树表征所述SQL代码在SQL语法上的拓扑结构;
第一构建单元23,用于遍历所述语法树中的SQL语句,基于所遍历的SQL语句中的基本元素的类型,以及所述基本元素的类型与节点的对应关系,为所遍历的SQL语句中的基本元素对应构建节点;
第二构建单元24,用于基于所述构建的节点得到所述语法树的中间语言描述,并基于所述语法树的中间语言描述,构建对应所述SQL代码的数据流图。
作为一个实施方式,如图2b所示,所述识别单元21包括:
第一识别模块211,用于识别所述SQL代码中的分隔标识,基于所识别出的分隔标识将所述SQL代码进行分割,得到字符串;
第二识别模块212,用于基于第二策略,对所述字符串的类型进行匹配,所述第二策略的类型为多个且与不同的基本元素的类型一一对应;
标识模块213,用于根据所述字符串所匹配到的第二策略,标识所述字符串为基本元素,且所述字符串的类型为所述字符串所匹配到的第二策略对应的基本元素的类型。
作为一个实施方式,所述基本元素的类型包括以下至少一种:
SQL指令类型、SQL运算符类型、列名类型、表名类型、整数类型、浮点数类型、注释类型和空白类型;
相应地,所述第二识别模块212,还用于按照以下顺序读取所述第二策略,对所述字符串的类型进行匹配:注释类型匹配策略、SQL指令类型匹配策略、SQL运算符类型匹配策略、列名类型匹配策略、表名类型匹配策略、数据格式类型匹配策略;其中,所述数据格式类型匹配策略包括以下至少之一:整数类型匹配策略、浮点数类型匹配策略进而空白类型匹配策略;需要指出的是,读取数据格式类型匹配策略中的策略时,所述整数类型匹配策略、浮点数类型匹配策略和空白类型匹配策略的读取顺序可以采用对整数类型匹配策略、浮点数类型匹配策略和空白类型匹配策略的任意一种排序。
作为一个实施方式,如图2c所示,所述组合单元22包括:
匹配模块221,用于基于第三策略,对所述SQL代码中解析出的基本元素进行匹配操作,所述第三策略的类型为多个,且与不同的SQL语句类型一一对应;
组合模块222,用于将与所述第三策略匹配的基本元素组合为SQL语句,并将所组合成的SQL语句的类型标识为所述匹配模块221匹配到的第三策略对应的类型。
作为一个实施方式,如图2d所示,所述第一构建单元23包括:
查询模块231,用于在所述基本元素的类型与节点的对应关系中依次查询所述SQL语句中的基本元素,以确定所述SQL语句中的基本元素对应的节点类型;
构建模块232,用于基于所确定的节点类型对应构建节点。
作为一个实施方式,所述构建模块232还用于为待构建节点分配指针;为所述待构建节点构建数据结构;其中,所述数据结构包括所述待构建节点的名称、所述待构建节点的特定属性、以及所述待构建节点输出的目标列的列名;
所述第一构建单元23,还用于当所述基本元素不包括union指令、以及join指令时,为所述待构建节点分配两个指针;其中,所述指针对应指向所述待构建节点的前驱节点、所述待构建节点在数据流上所连接的下一个节点;
所述第一构建单元23,还用于当所述基本元素包括union指令、或join指令时,为所述待构建节点分配三个指针;其中,所述三个指针对应指向所述待构建节点的前驱节点、所述待构建节点所操作的两个目标节点。
实际应用中,信息处理装置的各模块可由中央处理器(CPU)或逻辑可编程门阵列(FPGA)实现。
需要说明的是,上述信息处理装置进行信息处理的技术特征,与上述方法实施例记载的技术特征是对应的,对于在装置实施例中未披露的细节,请参见上述方法实施例的记载。
下面再结合实际处理场景对本发明实施例的技术方案进行说明。
场景说明:某计费平台系统的需要进行升级,目前开发人员只掌握有计费平台的SQL代码,为降低升级难度,节省升级开发时间,需要借助于系统对应的数据流图进行系统开发。
如图3所示,作为一个示例,对SQL代码进行处理以获取数据流图的过程,可以通过步骤301至步骤307实现:
步骤301,输入SQL。
也即信息处理装置获取SQL代码,实际应用中,如果计费平台系统对信息处理装置开放特定接口,则信息处理装置可以通过特定接口从计费平台系统获取对应的SQL代码。
步骤302,对SQL代码进行语法检查。
步骤303,当语法检查正确时执行步骤304;否则,返回步骤302继续进行语法检查,以纠正语法错误。
实际应用中,SQL代码不可避免地存在语法错误,为保证后续输出数据流图的精度,信息处理装置可以调用第三方接口如HIVE的语法检查接口等对SQL代码进行检查,并对检查到的语法错误进行上报,以便开发人员对语法错误进行纠正;当然,信息处理装置也可以根据预设的语法规则对语法错误进行自动纠正。
作为一个示例,可以对全部SQL代码进行语法检查完毕并纠正语法错误之后才进行后续处理,以避免频繁调用第三方接口。
还需要说明的是,输入的SQL代码可能没有按照标准的格式来书写,因此还可以对SQL代码进行预处理,例如进行别名补齐,列名的前缀修饰补齐等操作,即将SQL代码在语法上标准化,以提高输出的数据流图的准确度。
步骤304,SQL解析。
即对纠正语法错误之后的SOL代码进行解析,得到对应的语法树。
作为一个示例,如图4所示,步骤304可以通过以下步骤实现:
步骤3041,词法解析。
即将SQL代码进行分词,也即将SQL代码分割为字符串,识别并标识字符串的类型。
由于SQL代码中基本是英文字符,因此可以利用空格(也即分割标识)对SQL代码进行分割,得到字符串的集合,利用预设策略对字符串的类型进行识别;字符串是SQL代码的基本元素,发明人在实施本发明的过程中发现,SQL代码的基本元素主要可以划分为以下几个类型:
a)SQL指令类型,对应SQL指令,例如可以包括以下指令:from、group、limit、where、order by、join、union;
b)SQL运算符类型,例如可以包括:and、or、in;
c)列名类型,用来标识数据表中的某一类型的数据,例如区域、人名等;
d)表名类型,标识数据表的名称;
e)整数类型;
f)浮点数类型;
g)空白类型,利用空格分割代码时,由于SQL代码中可能存在多个连续空格的情况,因此可能将多个空格划分为字符串,该类型不涉及对数据的操作;
i)注释类型,以“/”起始标识,用于对SQL代码进行调试。
这里,对字符串进行识别的预设策略可以采用正则表达式或函数的形式;下面对识别不同类型字符串的正则表达式举例说明:
识别空白类型:′\s+′;
识别整数类型:[-]?[0-9]+;
识别列名:(?<=\.)[^\W\d_]\w*′
识别运算符<>=~!:[<>=~!]+
发明人在实施本发明的过程中发现,对字符串的类型进行识别时,存在如下情况,对于包括SQL运算符like的字符串,如果首先利用识别列名的正则表达式对该字符串进行类型识别(由于列名通常是由字符构成,列名对应的正则表达式将不包括特殊字符的字符串识别为列名),则可能会将like识别为列名,这就导致对字符串的类型识别错误;为提高对字符串类型的识别精度,作为一个示例,可以将正则表达式按照以下类型进行排序,并依次选取正则表达式对字符串进行匹配:
注释类型、指令类型(对应SQL指令如select)、运算符(如if、and、or)类型、列名类型、表名类型、整数类型、浮点数类型、空白类型;其中,正整数类型、浮点数类型、空白类型的顺序可以任意调换,可以看出,根据上述顺序进行字符串类型的识别时,首先对字符串是否为SQL指令和SQL运算符进行识别,这就避免了将SQL指令和SQL运算符误识别为列名的情况;实际应用中,可以按照上述顺序将正则表达式存储于数组中,并从数组中依次读取正则表达式对字符串的类型进行识别和标识。
需要指出的是,对于利用函数对字符串进行识别时,可以将与上述正则表达式等同的实现代码封装在函数中实现,这里不再赘述
步骤3042,语法解析。
即基于步骤3041所识别出的字符串(对应SQL代码的基本元素)及类型,以及SQL语法,将字符串组合为SQL语句,基于连接所述SQL语句之间的连接关系,构建语法树。
发明人在实施本发明的过程中发现,SQL代码中的基本元素在SQL语句中存在连接关系,本发明是实例中成为SQL语法,即对于任意类型的基本元素起始的SQL语句,在SQL语句中总是存在对应的结束基本元素(也可以成为结束词)以标识SQL语句的结束;通过不同类型的SQL语句的起始基本元素以及对应结束基本元素,可以识别出SQL代码中不同类型的SQL语句;进而基于SQL语句之间的连接关系可以得到对应SQL代码的语法树。
下面结合不同的起始字符串对应的结束字符串,对字符串进一步进行识别,组合为SQL语句进行举例说明:
a)对于SQL指令类型的基本元素“where”起始的SQL语句中,会存在where对应条件值,在SQL语法中,可以以基本元素order、group、limit、union、except中的任意一个作为结束词,则where与对应的结束词之间的字符串为where对应的条件值,where、where对应的结束词、以及二者之间的字符串构成了SQL语句;
b)当SQL指令order by作为起始基本元素时,可以以limit或order by为结束词,则order by与对应的结束词之间的字符串构成了SQL语句;
c)当SQL指令select作为起始基本元素时,可以from作为结束词,根据SQL语法,select之后会存在select操作的列名,from之后会存在select操作的表名(即数据表的名称),则select、表名以及二者之间的字符串构成了SQL语句。
下面再结合具体SQL代码对获取语法树的处理进行说明。
对于以下SQL代码:
select a,b,c from(
select a,b,c from m
)where a>0
在调用第三方接口进行语法检查之后,利用SQL代码中的空格进行分词,得到SQL代码的基本元素,根据上述的正则表达式,可以识别出指令类型字符串select、where,而基于SQL的语法关系,将select与from之间的a、b、c识别为列名,将from之后的t识别为表名,将a>0识别为where条件值;需要指出的是,由于首先进行指令类型和运算符类型的字符串识别,因此,不会将字符串where以及select误识别为列名。
基于上述识别结果,上述SQL代码可以用图5所示的语法树表示,如图5所示,在语法树的第一层的基本元素与上述代码中括号之外的“select a,b,cfrom”对应,identifierlist1对应“select a,b,c from()”中的“a,b,c”;子查询(parenthesis)1对应(select a,b,c from m);在语法树的第二层,parenthesis2对应(select a,b,c from m)中的表名“m”,identifierlist2对应(select a,b,c fromm)中的“a,b,c”
步骤305,节点构建。
即基于步骤304中得到的语法树、以及SQL语句的类型,为语法树中基本元素对应构建节点。
本发明实施例中构建节点时,如图6所示,节点的数据结构可以采用链表的形式,每个节点的数据结构包括:名称、特定属性、节点输出的目标列的列名;每个节点还可以分配三个指针:left、prex和right,三个指针依次对应左节点(也可以理解为节点连接的下一个节点)、前驱节点(prex,即节点所连接的前一个节点)、右节点(节点表征对数据进行join或union操作时,所连接的节点);其中,对于SQL语句中的join和union指令之外的指令所对应构建的节点(未分配right指针),节点的left指针指向所连接的下一个节点;对于SQL语句中的join和union指令所对应构建的节点(分配right指针),由于join和union指令是对两个数据源节点执行数据处理,因此left指针、right针对对应指向上述两个数据源节点。
上述的SQL语句的类型的可以根据SQL代码的实际应用场景进行分类,作为一个示例,当SQL代码为被设计用来进行数据查询时,对应的SQL语句的可以根据表1进行分类:
类型 | 说明 | |
(table) | 0 | 例如直接join一个数据表 |
select from | 1 | 从数据表中过滤数据 |
select from where | 2 | 从数据表中有条件地过滤数据 |
select from group | 3 | 从数据表中过滤数据并分组 |
select from where group | 4 | 从数据表中有条件地过滤数据并分组 |
(left/right/inner)join | 5 | 从两个数据表中查询数据 |
union(all) | 6 | 合并从数据表中过滤的数据 |
表1
如表1所示,将SQL中查询类型的SQL语句分类为0至6,当然,表1所示的分类仅仅是示意性的,实际应用中可以根据需要对上述分类进行深度细化或者对上述分类进行简化处理。
下面对根据不同的SQL语句类型组件节点的处理进行说明,首先,需要根据步骤304获得的语法树,判断语法树中的SQL语句的类型,如图7所示,判断SQL语句类型的处理可以通过步骤701和步骤702实现:
步骤701,输入语法树。
步骤702,判断语法树中的SQL语句的类型。
由于步骤304中已经识别出了SQL代码中的基本元素,包括指令、运算符、列名、表名等,因此可以根据上述结果、以及表1,对SQL语句的基本要素进行匹配,得到语法树中的SQL语句的类型;构建的节点与SQL语句中指令类型的字符串所对应的指令有关,对于不同的指令对应构建不同的节点;下面对指令与节点类型的对应关系进行说明,指令与节点类型的对应关系的一个示例如表2所示:
表2
如表2所示,对于语法树的SQL语句中的不同指令,对应构建如表2所示的类型的节点;需要指出的是,语法树的SQL语句中如果存在派生新列的操作,如SQL语句:select(a*10/100)as t from er;其中列t为列a经过派生得到的列,对于具有派生操作的SQL语句,还可以构建派生节点;数据源节点对于任意SQL语句首先构建的节点,对于其他类型的节点,根据SQL语句中的指令,可以根据表2构建对应类型的节点,在节点所分配的指针中记录该节点的左节点、前驱节点,在节点为连接节点或合并节点时,还为节点分配指针记录该节点的右节点,通过为节点分配指针,相当于将所构建的节点连接为节点树。
下面对步骤702中判断得到不同类型SQL语句时构建节点的处理进行说明,以下case0至case6为步骤702的不同判断结果所对应的处理;
case0)参考表1,当判断出SQL语句类型为0时,如图8所示,构建节点的处理包括以下步骤:
步骤801,获取待操作的数据表的所有字段,并重新拼装完整的select fromtable类型的SQL语句;返回步骤701。
当语法树中存在对数据表进行join操作的SQL语句时,需要获取待操作的数据表的所有字段,并重新拼装完整的select from table类型的SQL语句,以便于后续进行节点构建。
步骤801的一个示例中,对于SQL代码:
select column_name(s)
from table_name1
right join table_name2
on table_name1.column_name=table_name2.column_name
可以看出,上述SQL代码中对table_name1和table_name2进行了join操作,对应case0),此时需要将right之后的SQL语句拼装完整的select from table类型的SQL语句,拼装后的SOL语句为:
select column_name(s)
from table_name1
right join(select*ftom table_name2)table_name2
on table_name1.column_name=table_name2.column_name
case1)参考表1,当判断出SQL语句类型为类型1时,如图9所示,构建节点的处理包括以下步骤:
步骤901,构建DataSourcesNode。
步骤902,判断SQL语句中是否存在派生列的操作,如果存在,则执行步骤903;否则,执行步骤904。
步骤903,构建FieldExtNode,并执行步骤904。
步骤904,判断SQL语句中是否包含limit、order中的一个或两个,如果包含,则执行步骤905;否则,执行步骤906。
在SQL语法中,limit和order的位置不会位于SQL语句的起始部分,且可以位于select from语句之后,因此可以在步骤904中判断select from语句之后是否存在limit、order中的一个或两个,以构建对应的节点。
步骤905,对应构建LimitNode和/或OrderNode。
例如,如果SQL语句中是否包含limit、order中的一个,则对应生成LimitNode或OrderNode;如果SQL语句中包含limit和order,则根据limit和order的在SQL语句中出现的顺序对应生成LimitNode和OrderNode。
步骤906,判断SQL语句中是否还有子查询,如果有,则执行步骤702,以判断SQL代码中后续字符串的类型;否则,结束处理,节点构建完成。
case2)参考表1,当判断出SQL语句类型为类型2时,如图10所示,构建节点的处理包括以下步骤:
步骤1001,构建DataSourcesNode。
步骤1002,构建FilterNode。
参考表1,当SQL语句为类型2时,表示该SQL语句进行了对数据表过滤的操作,对应构建过滤节点。
在为FilterNode分配的指针中,DataSourcesNode作为DataSourcesNode的前驱节点。
步骤1003,判断SQL语句中是否存在派生列的操作,如果存在,执行步骤1004;否则,执行步骤1005。
步骤1004,构建FieldExtNode。
在为FieldExtNode分配的指针中,FilterNode作为DataSourcesNode的前驱节点。
步骤1005,判断SQL语句中是否包含limit、order中的一个或两个,如果包含,则执行步骤1006;否则,执行步骤1007。
在SQL语法中,limit和order的位置不会位于SQL语句的起始部分,且可以位于select from语句之后,因此可以在步骤1004中判断select from语句之后是否存在limit、order中的一个或两个,以构建对应的节点。
步骤1006,对应构建LimitNode和/或OrderNode。
例如,如果SQL语句中是否包含limit、order中的一个,则对应构建LimitNode或OrderNode;如果SQL语句中包含limit和order,则根据limit和order的在SQL语句中出现的顺序对应构建LimitNode和OrderNode。
步骤1007,判断SQL语句中是否还有子查询,如果有,则返回步骤702以判断SQL代码中后续字符串的类型;否则,结束处理,节点构建完成。
case3)参考表1,当判断出SQL语句类型为类型3时,如图11所示,构建节点的处理包括以下步骤:
步骤1101,判断是否需要变换SQL代码,如果需要,则执行步骤1102;否则,执行步骤1203。
步骤1102,变换SQL代码。
对于case4),由于该类型的SQL语句中包括group指令,发明人在实施本发明的过程中发现,包含group指令的SQL语句中的列名往往会以对列名进行运算的方式出现,此时需要将对列的运算转换为标准的SQL语句以构建节点。
一个示例如下:
select c,sum(a)/sum(b)from t group by c,其中列sum(a)/sum(b)是对列a和列b进行运算得到,此时需要将对列的运算转换为标准的SQL语句;上述SQL语句转换后的标准的SQL语句为:
select c,c_1/c_2 from(
select c,sum(a)as c_1,sum(b)as c_2 from t group by c)
步骤1103,构建DataSourcesNode。
在为FilterNode分配的指针中,DataSourcesNode作为DataSourcesNode的前驱节点。
步骤1104,判断SQL语句中是否存在派生列的操作,如果存在,则执行步骤1105;否则,执行步骤1106。
步骤1105,构建FieldExtNode。
在为FieldExtNode分配的指针中,DataSourcesNode作为DataSourcesNode的前驱节点。
步骤1106,构建GroupNode。
参考表1,当SQL语句为类型3时,表示该SQL语句进行了对数据表中的数据分组聚合的操作,对应构建分组聚合节点。
在为GroupNode分配的指针中,FieldExtNode作为DataSourcesNode的前驱节点。
步骤1107,判断SQL语句中是否包含limit、order中的一个或两个,如果包含,则执行步骤1108;否则,执行步骤1109。
在SQL语法中,limit和order的位置不会位于SQL语句的起始部分,且可以位于select from语句之后,因此可以在步骤1104中判断select from语句之后是否存在limit、order中的一个或两个,以构建对应的节点。
步骤1108,对应生成LimitNode和/或OrderNode。
例如,如果SQL语句中是否包含limit、order中的一个,则对应生成LimitNode或OrderNode;如果SQL语句中包含limit和order,则根据limit和order在SQL语句中出现的顺序对应生成LimitNode和OrderNode。
步骤1109,判断SQL语句中是否还有子查询,如果有,则返回步骤702判断子查询对应SQL语句的类型;否则,结束处理,节点构建完成。
case4)参考表1,当判断出SQL语句类型为类型4时,如图12所示,构建节点的处理包括以下步骤:
步骤1201,判断是否需要变换SQL代码,如果需要,执行步骤1202;否则,执行步骤1203。
步骤1202,变换SQL代码。
对于case4),由于该类型的SQL语句中包括group指令,发明人在实施本发明的过程中发现,包含group指令的SQL语句中的列名往往会以对列名进行运算的方式出现,此时需要将对列的运算转换为标准的SQL语句以构建节点。
一个示例如下:
select c,sum(a)/sum(b)from t group by c,其中列sum(a)/sum(b)是对列a和列b进行运算得到,此时需要将对列的运算转换为标准的SQL语句;上述SQL语句转换后的标准的SQL语句为:
select c,c_1/c_2 from(
Select c,sum(a)as c_1,sum(b)as c_2 from t group by c)
步骤1203,构建DataSourcesNode。
步骤1204,构建FilterNode。
参考表1,当SQL语句为类型4即SQL语句中包含了表示该SQL语句进行了对数据表中的数据分组聚合的操作,对应构建分组聚合节点。
在为FilterNode分配的指针中,DataSourcesNode作为DataSourcesNode的前驱节点。
步骤1205,判断SQL语句中是否存在派生列的操作,如果存在,则执行步骤1206;否则,执行步骤1207。
步骤1206,构建FieldExtNode。
参考表1,当SQL语句为类型4时,表示该SQL语句进行了对数据表中的数据分组聚合的操作(对应group指令),对应构建分组聚合节点。
在为FieldExtNode分配的指针中,FilterNode作为FieldExtNode的前驱节点。
步骤1207,构建GroupNode。
在为GroupNode分配的指针中,FieldExtNode作为DataSourcesNode的前驱节点。
步骤1208,判断SQL语句中是否包含limit、order中的一个或两个,如果包含,则执行步骤1209;否则,执行步骤1210。
在SQL语法中,limit和order的位置不会位于SQL语句的起始部分,且可以位于select from语句之后,因此可以在步骤1204中判断select from语句之后是否存在limit、order中的一个或两个,以构建对应的节点。
步骤1209,对应生成LimitNode和/或OrderNode。
例如,如果SQL语句中是否包含limit、order中的一个,则对应构建LimitNode或OrderNode;如果SQL语句中包含limit和order,则根据limit和order在SQL语句中出现的顺序对应构建LimitNode和OrderNode。
步骤1210,判断SQL语句中是否还有子查询,如果有,则返回步骤702判断子查询对应SQL语句的类型;否则,结束处理,节点构建完成。
case5)参考表1,当判断出SQL语句类型为类型5时,如图13所示,构建节点的处理包括以下步骤:
步骤1301a,获取SQL语句中join指令的左节点的信息。
步骤1301b,获取SQL语句中join指令的右节点的信息。
步骤1301a和步骤1301b可以并行执行,也可以顺序执行;由于join指令是对数据源节点(即左节点和右节点)进行的操作,因此需要获取左节点和右节点的信息,以构建对应join指令的节点。
步骤1302,根据左节点和右节点的信息构建JOINNode。
所构建的JOINNode的指针中,left指针执行左节点,right指针指向右节点。
包括join指令的SQL语句的一个示例如下:
select column_name(s)
from table_name1
left join table_name2
on table_name1.column_name=table_name2.column_name
上述示例中,对应left join所构建的节点JOINNode的指针中,left指针指向table_name1对应的数据源节点,right指针指向table_name2对应的数据源节点。
case6)参考表1,当判断出SQL语句类型为类型6时,如图14所示,构建节点的处理包括以下步骤:
步骤1401a,获取SQL语句中union指令的左节点的信息。
步骤1401b,获取SQL语句中union指令的右节点的信息。
步骤1401a和步骤1401b可以并行执行,也可以顺序执行。
步骤1402,根据左节点和右节点的信息构建UNIONNode节点;返回步骤702,以继续判断后续SQL代码的类型并构建节点。
union指令用于合并两个select指令操作的结果,一个示例如下:
select column_name(s)from table_name1
union
select column_name(s)from table_name2
相应地,在为构建的UNIONNode节点所分配的指针中,left指针指向table_name1对应的数据源节点,right指针指向table_name2对应的数据源节点。
步骤306,DIL输出。
遍历步骤305中所构建的节点,直至所构建的节点中的根(root)节点也即最终的输出节点,采用节点Dish中间语言(DIL,Dish Intermediate Language)来描述所遍历的节点,包括节点的名称、特定属性、以及节点所输出的目标列的列名;得到所语法树的DIL描述,用于输出数据流图。
结合图7至图14,本发明实施例中信息处理方法的具体实施流程的一个示例如图15所示,首先通过执行步骤1501、步骤1502判断SQL语句的类型,与图7所示的步骤701和步骤702对应;其次,根据不同的SQL语句的类型进行对应处理:参考表1,对于匹配到的不同类型进行对应处理:
对于case0,对应执行步骤1503a,与图8所示的步骤801对应;
对于case1,对应执行步骤1503b至步骤1505b、以及步骤1510至步骤1512,与图9所示的步骤901至步骤906对应;
对于case2,对应执行步骤1503c至步骤1506c、以及步骤1510至步骤1512,与图10所示的步骤1001至步骤1007对应;
对于case3,对应执行步骤1503d至步骤1508d、以及步骤1510至步骤1512,与图11所示的步骤1101至步骤1109对应;
对于case4,对应执行步骤1503e至步骤1509e、以及步骤1510至步骤1512,与图12所示的步骤1201至步骤1210对应;
对于case5,对应执行步骤15031f、15032f、以及步骤1504f,与图13所示的步骤1301a、1301b、1302对应;
对于case6,对应执行步骤15031g、15032g、以及步骤1504g,与图14所示的步骤1401a、1401b、1402对应。
本发明实施例中采用Dish中间语言作为输出数据流图的中间语言,实际应用中采用DIL输出描述节点的一个示例如图16所示,在图16中,节点采用:{“name”:node,“attribute”:attr,“outpins”:outpins}的形式描述,其中“name”表示节点的名称,“attribute”表示节点的特定属性,“outpins”表示节点所输出的目标列的列名。
步骤306,数据流图显示。
信息处理装置利用语法树的DIL描述,可以呈现出数据流图;作为一个示例,对于以下SQL代码:
select a,b,c from(
select a,b,c from m
)where a>0
通过上述步骤可以构建出DataSourcesNode和FilterNode,对应的数据流图如图17所示;实际应用中,数据流图中还可以呈现出节点所输出的目标列的列名(outpins)、节点的特定属性(attribute)等信息;这样,信息处理装置可以接收开发人员可以对呈现的数据流图进行的编辑操作,并可将数据流图还原SQL语句,以实现对系统的二次开发或升级。
本发明实施例中,通过对SQL代码的解析,可以得到SQL代码在SQL语法上的拓扑结构即语法树,根据基本元素的类型与节点的对应关系,遍历语法树可以构建节点,得到语法树的中间语言描述,以利用中间语言描述输出对应的数据流图,整个处理过程无需人工介入,这就可以节省人工对SQL进行分析的时间,便于开发人员根据数据流图对系统进行二次开发,提升了开发效率。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、随机存取存储器(RAM,Random Access Memory)、只读存储器(ROM,Read-Only Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、RAM、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (14)
1.一种信息处理方法,其特征在于,所述方法包括:
基于第一策略识别出结构化描述语言SQL代码中的基本元素,所述基本元素为所述SQL代码在SQL语法上的最小语义单元;
对从所述SQL代码中解析出的基本元素进行组合操作,得到SQL语句,基于所述SQL语句之间的连接关系构建语法树,所述语法树表征所述SQL代码在SQL语法上的拓扑结构;
遍历所述语法树中的SQL语句,基于所遍历的SQL语句中的基本元素的类型,以及所述基本元素的类型与节点的对应关系,为所遍历的SQL语句中的基本元素对应构建节点;
基于所构建的节点得到所述语法树的中间语言描述,并基于所述语法树的中间语言描述,构建对应所述SQL代码的数据流图。
2.如权利要求1所述的方法,其特征在于,所述基于第一策略识别出SQL代码中的基本元素,包括:
识别所述SQL代码中的分隔标识,基于所识别出的分隔标识,将所述SQL代码进行分割,得到字符串;
基于第二策略对所述字符串的类型进行匹配,所述第二策略的类型为多个且与不同的基本元素的类型一一对应;
根据所述字符串所匹配到的第二策略,标识所述字符串为基本元素,且所述字符串的类型为所述字符串所匹配到的第二策略对应的基本元素的类型。
3.如权利要求1所述的方法,其特征在于,所述基本元素的类型包括以下至少一种:
SQL指令类型、SQL运算符类型、列名类型、表名类型、整数类型、浮点数类型、注释类型和空白类型;
相应地,所述基于第二策略,对所述字符串的类型进行匹配,包括:
按照以下顺序读取所述第二策略对所述字符串进行匹配:注释类型匹配策略、SQL指令类型匹配策略、SQL运算符类型匹配策略、列名类型匹配策略、表名类型匹配策略、数据格式类型匹配策略;
其中,所述数据格式类型匹配策略包括以下至少之一:
整数类型匹配策略、浮点数类型匹配策略和空白类型匹配策略。
4.如权利要求1所述的方法,其特征在于,所述基于SQL语法,对从所述SQL代码中解析出的基本元素进行组合操作得到SQL语句,包括:
基于第三策略对所述SQL代码中解析出的基本元素进行匹配操作,所述第三策略的类型为多个且与不同SQL语句的类型一一对应;
将与所述第三策略匹配的基本元素组合为SQL语句,并将所组合成的SQL语句的类型标识为所匹配到的第三策略对应的类型。
5.如权利要求1至4任一项所述的方法,其特征在于,所述基于所遍历的SQL语句中的基本元素的类型,以及所述基本元素的类型与节点的对应关系,为所遍历的SQL语句中的基本元素对应构建节点,包括:
在所述基本元素的类型与节点的对应关系中,依次查询所述SQL语句中的基本元素,以确定所述SQL语句中的基本元素对应的节点类型;
基于所确定的节点类型对应构建节点。
6.如权利要求5所述的方法,其特征在于,所述构建节点,包括:
为待构建节点分配指针;
为所述待构建节点构建数据结构;其中,
所述数据结构中包括所述待构建节点的名称、所述待构建节点的特定属性、以及所述待构建节点输出的目标列的列名。
7.如权利要求6所述的方法,其特征在于,当所述基本元素不包括合并union指令、以及连接join指令时,所述为待构建节点分配指针,包括:
为待构建的节点分配两个指针;其中,所述两个指针对应指向所述待构建节点的前驱节点、所述待构建节点在数据流上所连接的下一个节点;
当所述基本元素包括union指令、或连接join指令时,所述为待构建节点分配指针,包括:
为所述为待构建节点分配三个指针;其中,所述三个指针对应指向所述待构建节点的前驱节点、所述待构建节点所操作的两个目标节点。
8.一种信息处理装置,其特征在于,所述装置包括:
识别单元,用于基于第一策略识别出结构化描述语言SQL代码中的基本元素,所述基本元素为所述SQL代码在SQL语法上的最小语义单元;
组合单元,用于对从所述SQL代码中解析出的基本元素进行组合操作,得到SQL语句,基于所述SQL语句之间的连接关系构建语法树,所述语法树表征所述SQL代码在SQL语法上的拓扑结构;
第一构建单元,用于遍历所述语法树中的SQL语句,基于所遍历的SQL语句中的基本元素的类型,以及所述基本元素的类型与节点的对应关系,为所遍历的SQL语句中的基本元素对应构建节点;
第二构建单元,用于基于所构建的节点得到所述语法树的中间语言描述,并基于所述语法树的中间语言描述,构建对应所述SQL代码的数据流图。
9.如权利要求8所述的装置,其特征在于,所述识别单元包括:
第一识别模块,用于识别所述SQL代码中的分隔标识,基于所识别出的分隔标识,将所述SQL代码进行分割,得到字符串;
第二识别模块,用于基于第二策略对所述字符串的类型进行匹配,所述第二策略的类型为多个且与不同的基本元素的类型一一对应;
标识模块,用于根据所述字符串所匹配到的第二策略,标识所述字符串为基本元素,且所述字符串的类型为所述字符串所匹配到的第二策略对应的基本元素的类型。
10.如权利要求9所述的装置,其特征在于,所述基本元素的类型包括以下至少一种:
SQL指令类型、SQL运算符类型、列名类型、表名类型、整数类型、浮点数类型、注释类型和空白类型;
相应地,所述第二识别模块,还用于按照以下顺序读取所述第二策略,对所述字符串的类型进行匹配:
注释类型匹配策略、SQL指令类型匹配策略、SQL运算符类型匹配策略、列名类型匹配策略、表名类型匹配策略、数据格式类型匹配策略;
其中,所述数据格式类型匹配策略包括以下至少之一:
整数类型匹配策略、浮点数类型匹配策略和空白类型匹配策略。
11.如权利要求8所述的装置,其特征在于,所述组合单元包括:
匹配模块,用于基于第三策略,对所述SQL代码中解析出的基本元素进行匹配操作,所述第三策略的类型为多个且与不同的SQL语句类型一一对应;
组合模块,用于将与所述第三策略匹配的基本元素组合为SQL语句,并将所组合成的SQL语句的类型标识为所述匹配模块匹配到的第三策略对应的类型。
12.如权利要求8至11任一项所述的装置,其特征在于,所述第一构建单元包括:
查询模块,用于在所述基本元素的类型与节点的对应关系中依次查询所述SQL语句中的基本元素,以确定所述SQL语句中的基本元素对应的节点类型;
构建模块,用于基于所确定的节点类型对应构建节点。
13.如权利要求12所述的装置,其特征在于,
所述构建模块还用于为待构建的节点分配指针;为所述待构建的节点构建数据结构;
其中,所述数据结构中包括所述待构建节点的名称、所述待构建节点的特定属性、以及所述待构建节点输出的目标列的列名。
14.如权利要求13所述的装置,其特征在于,
所述第一构建单元,还用于当所述基本元素不包括合并union指令、以及连接join指令时,为所述待构建节点分配两个指针;其中,所述两个指针对应指向所述待构建节点的前驱节点、所述待构建节点在数据流上所连接的下一个节点;
所述第一构建单元,还用于当所述基本元素包括union指令、或连接join指令时,为所述待构建节点分配三个指针;其中,所述三个指针对应指向所述待构建节点的前驱节点、所述节点所操作的两个目标节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410373530.0A CN104199831B (zh) | 2014-07-31 | 2014-07-31 | 信息处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410373530.0A CN104199831B (zh) | 2014-07-31 | 2014-07-31 | 信息处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104199831A true CN104199831A (zh) | 2014-12-10 |
CN104199831B CN104199831B (zh) | 2017-10-24 |
Family
ID=52085124
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410373530.0A Active CN104199831B (zh) | 2014-07-31 | 2014-07-31 | 信息处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104199831B (zh) |
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104484621A (zh) * | 2014-12-31 | 2015-04-01 | 中博信息技术研究院有限公司 | 基于sql的数据权限控制方法 |
CN105930506A (zh) * | 2016-05-10 | 2016-09-07 | 乐视控股(北京)有限公司 | 对象检索方法和对象存储系统 |
CN106033338A (zh) * | 2015-03-13 | 2016-10-19 | 上海爱韦讯信息技术有限公司 | 基于fog数据的源代码导入及解析的方法和装置 |
CN106293653A (zh) * | 2015-05-19 | 2017-01-04 | 深圳市腾讯计算机系统有限公司 | 代码处理方法及装置 |
CN107391384A (zh) * | 2017-08-14 | 2017-11-24 | 中国银行股份有限公司 | 一种sql语句检测方法及系统 |
CN107644073A (zh) * | 2017-09-18 | 2018-01-30 | 广东中标数据科技股份有限公司 | 一种基于深度优先遍历的字段血缘分析方法、系统及装置 |
CN107678790A (zh) * | 2016-07-29 | 2018-02-09 | 华为技术有限公司 | 流计算方法、装置及系统 |
CN108920676A (zh) * | 2018-07-09 | 2018-11-30 | 清华大学 | 一种处理图数据的方法及系统 |
CN109460412A (zh) * | 2018-11-14 | 2019-03-12 | 北京锐安科技有限公司 | 数据聚合方法、装置、设备及存储介质 |
CN109542926A (zh) * | 2018-11-06 | 2019-03-29 | 北京新唐思创教育科技有限公司 | 区块处理方法及计算机存储介质 |
CN109559808A (zh) * | 2018-11-07 | 2019-04-02 | 平安医疗健康管理股份有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN109947791A (zh) * | 2019-03-27 | 2019-06-28 | 上海达梦数据库有限公司 | 一种数据库语句优化方法、装置、设备及存储介质 |
CN110019207A (zh) * | 2017-11-02 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 数据处理方法和装置以及脚本显示方法和装置 |
CN110209766A (zh) * | 2019-05-23 | 2019-09-06 | 招商局金融科技有限公司 | 数据展示方法、电子装置及存储介质 |
WO2019184577A1 (zh) * | 2018-03-29 | 2019-10-03 | 中国银联股份有限公司 | 一种事务处理方法、服务器及事务处理系统 |
CN110347573A (zh) * | 2018-04-03 | 2019-10-18 | 北京京东尚科信息技术有限公司 | 应用程序分析方法、装置、电子设备及计算机可读介质 |
CN110532280A (zh) * | 2019-07-18 | 2019-12-03 | 阿里巴巴集团控股有限公司 | Sql语句可视化方法以及装置 |
CN110727659A (zh) * | 2019-10-24 | 2020-01-24 | 深圳前海微众银行股份有限公司 | 基于sql语句的决策树模型生成方法、装置、设备及介质 |
CN111190886A (zh) * | 2019-12-25 | 2020-05-22 | 中科驭数(北京)科技有限公司 | 面向数据库访问的计算流图构建方法、访问方法及装置 |
CN111190918A (zh) * | 2019-12-25 | 2020-05-22 | 中科驭数(北京)科技有限公司 | 基于计算流图的数据库访问方法及装置 |
CN111209309A (zh) * | 2020-01-13 | 2020-05-29 | 腾讯科技(深圳)有限公司 | 数据流图处理结果确定方法、装置、设备及存储介质 |
CN111240772A (zh) * | 2020-01-22 | 2020-06-05 | 腾讯科技(深圳)有限公司 | 一种基于区块链的数据处理方法、装置及存储介质 |
CN111651460A (zh) * | 2020-06-11 | 2020-09-11 | 上海德易车信息科技有限公司 | 一种数据治理方法、装置、电子设备及可读存储介质 |
CN113326048A (zh) * | 2021-06-24 | 2021-08-31 | 上海万向区块链股份公司 | 浮点数计算精度处理方法、系统、介质及设备 |
WO2021174823A1 (zh) * | 2020-07-30 | 2021-09-10 | 平安科技(深圳)有限公司 | 语法纠错方法、装置、计算机系统及可读存储介质 |
CN113448982A (zh) * | 2021-06-30 | 2021-09-28 | 未鲲(上海)科技服务有限公司 | Ddl语句的解析方法、装置、计算机设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030229625A1 (en) * | 2002-06-06 | 2003-12-11 | Melchior Timothy Allan | Structured query language processing integrated circuit and distributed database processor |
US20080126291A1 (en) * | 2006-08-11 | 2008-05-29 | Adaptive Intelligence Llc | System and method for data abstraction using formatted system variables |
US20130191370A1 (en) * | 2010-10-11 | 2013-07-25 | Qiming Chen | System and Method for Querying a Data Stream |
CN103226488A (zh) * | 2013-05-06 | 2013-07-31 | 中国农业银行股份有限公司 | 一种形式化代码生成中的效率控制方法及装置 |
-
2014
- 2014-07-31 CN CN201410373530.0A patent/CN104199831B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030229625A1 (en) * | 2002-06-06 | 2003-12-11 | Melchior Timothy Allan | Structured query language processing integrated circuit and distributed database processor |
US20080126291A1 (en) * | 2006-08-11 | 2008-05-29 | Adaptive Intelligence Llc | System and method for data abstraction using formatted system variables |
US20130191370A1 (en) * | 2010-10-11 | 2013-07-25 | Qiming Chen | System and Method for Querying a Data Stream |
CN103226488A (zh) * | 2013-05-06 | 2013-07-31 | 中国农业银行股份有限公司 | 一种形式化代码生成中的效率控制方法及装置 |
Non-Patent Citations (1)
Title |
---|
闫旭: "浅谈SQL Server 数据库的特点和基本功能", 《价值工程》 * |
Cited By (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104484621B (zh) * | 2014-12-31 | 2017-09-29 | 中博信息技术研究院有限公司 | 基于sql的数据权限控制方法 |
CN104484621A (zh) * | 2014-12-31 | 2015-04-01 | 中博信息技术研究院有限公司 | 基于sql的数据权限控制方法 |
CN106033338A (zh) * | 2015-03-13 | 2016-10-19 | 上海爱韦讯信息技术有限公司 | 基于fog数据的源代码导入及解析的方法和装置 |
CN106293653A (zh) * | 2015-05-19 | 2017-01-04 | 深圳市腾讯计算机系统有限公司 | 代码处理方法及装置 |
CN106293653B (zh) * | 2015-05-19 | 2020-11-06 | 深圳市腾讯计算机系统有限公司 | 代码处理方法及装置、计算机可读介质 |
CN105930506A (zh) * | 2016-05-10 | 2016-09-07 | 乐视控股(北京)有限公司 | 对象检索方法和对象存储系统 |
CN107678790A (zh) * | 2016-07-29 | 2018-02-09 | 华为技术有限公司 | 流计算方法、装置及系统 |
CN107678790B (zh) * | 2016-07-29 | 2020-05-08 | 华为技术有限公司 | 流计算方法、装置及系统 |
US11132402B2 (en) | 2016-07-29 | 2021-09-28 | Huawei Technologies Co., Ltd. | Stream computing method, apparatus, and system |
CN107391384A (zh) * | 2017-08-14 | 2017-11-24 | 中国银行股份有限公司 | 一种sql语句检测方法及系统 |
CN107644073A (zh) * | 2017-09-18 | 2018-01-30 | 广东中标数据科技股份有限公司 | 一种基于深度优先遍历的字段血缘分析方法、系统及装置 |
CN110019207A (zh) * | 2017-11-02 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 数据处理方法和装置以及脚本显示方法和装置 |
WO2019184577A1 (zh) * | 2018-03-29 | 2019-10-03 | 中国银联股份有限公司 | 一种事务处理方法、服务器及事务处理系统 |
US11544260B2 (en) | 2018-03-29 | 2023-01-03 | China Unionpay Co., Ltd. | Transaction processing method and system, and server |
JP7109572B2 (ja) | 2018-03-29 | 2022-07-29 | 中国▲銀▼▲聯▼股▲ふん▼有限公司 | トランザクション処理の方法およびサーバー、ならびにトランザクション処理のシステム |
JP2021517322A (ja) * | 2018-03-29 | 2021-07-15 | 中国▲銀▼▲聯▼股▲ふん▼有限公司 | トランザクション処理の方法およびサーバー、ならびにトランザクション処理のシステム |
CN110347573B (zh) * | 2018-04-03 | 2024-05-17 | 北京京东尚科信息技术有限公司 | 应用程序分析方法、装置、电子设备及计算机可读介质 |
CN110347573A (zh) * | 2018-04-03 | 2019-10-18 | 北京京东尚科信息技术有限公司 | 应用程序分析方法、装置、电子设备及计算机可读介质 |
CN108920676A (zh) * | 2018-07-09 | 2018-11-30 | 清华大学 | 一种处理图数据的方法及系统 |
CN109542926A (zh) * | 2018-11-06 | 2019-03-29 | 北京新唐思创教育科技有限公司 | 区块处理方法及计算机存储介质 |
CN109542926B (zh) * | 2018-11-06 | 2021-04-09 | 北京新唐思创教育科技有限公司 | 区块处理方法及计算机存储介质 |
CN109559808A (zh) * | 2018-11-07 | 2019-04-02 | 平安医疗健康管理股份有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN109460412A (zh) * | 2018-11-14 | 2019-03-12 | 北京锐安科技有限公司 | 数据聚合方法、装置、设备及存储介质 |
CN109947791B (zh) * | 2019-03-27 | 2021-01-26 | 上海达梦数据库有限公司 | 一种数据库语句优化方法、装置、设备及存储介质 |
CN109947791A (zh) * | 2019-03-27 | 2019-06-28 | 上海达梦数据库有限公司 | 一种数据库语句优化方法、装置、设备及存储介质 |
CN110209766A (zh) * | 2019-05-23 | 2019-09-06 | 招商局金融科技有限公司 | 数据展示方法、电子装置及存储介质 |
CN110532280A (zh) * | 2019-07-18 | 2019-12-03 | 阿里巴巴集团控股有限公司 | Sql语句可视化方法以及装置 |
CN110727659A (zh) * | 2019-10-24 | 2020-01-24 | 深圳前海微众银行股份有限公司 | 基于sql语句的决策树模型生成方法、装置、设备及介质 |
CN110727659B (zh) * | 2019-10-24 | 2023-08-18 | 深圳前海微众银行股份有限公司 | 基于sql语句的决策树模型生成方法、装置、设备及介质 |
CN111190918B (zh) * | 2019-12-25 | 2020-12-08 | 中科驭数(北京)科技有限公司 | 基于计算流图的数据库访问方法及装置 |
CN111190918A (zh) * | 2019-12-25 | 2020-05-22 | 中科驭数(北京)科技有限公司 | 基于计算流图的数据库访问方法及装置 |
CN111190886A (zh) * | 2019-12-25 | 2020-05-22 | 中科驭数(北京)科技有限公司 | 面向数据库访问的计算流图构建方法、访问方法及装置 |
CN111209309A (zh) * | 2020-01-13 | 2020-05-29 | 腾讯科技(深圳)有限公司 | 数据流图处理结果确定方法、装置、设备及存储介质 |
CN111209309B (zh) * | 2020-01-13 | 2023-03-10 | 腾讯科技(深圳)有限公司 | 数据流图处理结果确定方法、装置、设备及存储介质 |
CN111240772A (zh) * | 2020-01-22 | 2020-06-05 | 腾讯科技(深圳)有限公司 | 一种基于区块链的数据处理方法、装置及存储介质 |
CN111651460A (zh) * | 2020-06-11 | 2020-09-11 | 上海德易车信息科技有限公司 | 一种数据治理方法、装置、电子设备及可读存储介质 |
WO2021174823A1 (zh) * | 2020-07-30 | 2021-09-10 | 平安科技(深圳)有限公司 | 语法纠错方法、装置、计算机系统及可读存储介质 |
CN113326048A (zh) * | 2021-06-24 | 2021-08-31 | 上海万向区块链股份公司 | 浮点数计算精度处理方法、系统、介质及设备 |
CN113448982A (zh) * | 2021-06-30 | 2021-09-28 | 未鲲(上海)科技服务有限公司 | Ddl语句的解析方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104199831B (zh) | 2017-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104199831A (zh) | 信息处理方法及装置 | |
Liu et al. | MMKG: multi-modal knowledge graphs | |
CN104636478B (zh) | 信息查询方法和设备 | |
Ganti et al. | Data cleaning: A practical perspective | |
US20230334080A1 (en) | Putative ontology generating method and apparatus | |
CN107203468B (zh) | 一种基于ast的软件版本演化对比分析方法 | |
CN104657440B (zh) | 结构化查询语句生成系统及方法 | |
CN106843840B (zh) | 一种基于相似度分析的源代码版本演化注释复用方法 | |
WO2015161338A1 (en) | Ontology aligner method, semantic matching method and apparatus | |
CN109033410B (zh) | 一种基于正则与字符串切割的sql解析方法 | |
CA2952549A1 (en) | Ontology mapping method and apparatus | |
CN104657439A (zh) | 用于自然语言精准检索的结构化查询语句生成系统及方法 | |
CN107562919B (zh) | 一种基于信息检索的多索引集成软件构件检索方法及系统 | |
AU2015258752A1 (en) | Putative ontology generating method and apparatus | |
CN102402561B (zh) | 一种搜索方法和装置 | |
US20170061001A1 (en) | Ontology browser and grouping method and apparatus | |
CN107103007B (zh) | 一种sql代码转换方法及装置 | |
CN111444220A (zh) | 规则驱动和数据驱动相结合的跨平台sql查询优化方法 | |
CN114625748A (zh) | Sql查询语句的生成方法、装置、电子设备及可读存储介质 | |
CN107818181A (zh) | 基于Plcient交互式引擎的索引方法及其系统 | |
Singh et al. | Bi-directional joint inference for entity resolution and segmentation using imperatively-defined factor graphs | |
Wang | A cross-domain natural language interface to databases using adversarial text method | |
CN104424399A (zh) | 一种基于病毒蛋白质本体的知识导航的方法、装置和系统 | |
CN106547877B (zh) | 基于6w业务逻辑模型的数据元智能标识解析方法 | |
Preidel et al. | Integrating relational algebra into a visual code checking language for information retrieval from building information models |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |