CN103617273A - Sql脚本对象化的方法及系统 - Google Patents
Sql脚本对象化的方法及系统 Download PDFInfo
- Publication number
- CN103617273A CN103617273A CN201310654794.9A CN201310654794A CN103617273A CN 103617273 A CN103617273 A CN 103617273A CN 201310654794 A CN201310654794 A CN 201310654794A CN 103617273 A CN103617273 A CN 103617273A
- Authority
- CN
- China
- Prior art keywords
- sql
- key word
- script
- sql script
- array
- 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
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/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
Abstract
本发明涉及一种快速执行SQL脚本的方法及采用该方法的系统。更具体地,本发明涉及一种SQL脚本对象化的方法及采用该方法的系统。其中,所述方法至少包括:获取SQL脚本的原始SQL语句;根据原始SQL语句中的关键字生成对象;将创建的所有对象合并入总对象中;优化总对象,并将所述总对象与所述SQL脚本对应,以实现在执行SQL脚本就是对所述总对象进行操作。本发明还提供了采用将SQL脚本对象化的方法的系统。这样,本发明能够最终实现针对对象进行操作来代替SQL脚本进行操作,使得SQL脚本执行起来简单方便,不易出错,同时也方便调试。
Description
技术领域
本发明涉及一种快速执行SQL脚本的方法及采用该方法的系统。更具体地,本发明涉及一种SQL脚本对象化的方法及采用该方法的系统。
背景技术
在数据库操作中,SQL是常用的数据库工具,而SQL脚本则是利用SQL数据库工具所必须掌握的。随着现今任务中的业务逻辑越来越复杂,SQL脚本也变得越来越复杂,以查询语句为例,可能涉及成百的字段以及大量的表,更多的是不同表之间的各种连接条件、排序以及过滤等条件。这样复杂的逻辑关系导致同样复杂的SQL语句,对于方便准确地利用SQL工具进行处理带来了巨大的困难。同时如果基于现有已经完成的SQL脚本,进行修改,也将变得很困难。
本发明就是要将复杂的SQL脚本,使用创建对象并且管理、执行对象的方式来简化SQL脚本的复杂程度,以实现针对对象进行操作,来代替对SQL脚本进行操作。
发明内容
基于上述现有技术的缺点,本发明的发明目的在于提供一种将SQL脚本对象化的方法及系统,其能够针对SQL脚本中的原始语句进行处理,以实现将该原始语句对象化,即最终实现针对对象进行操作来代替SQL脚本进行操作,这样使得SQL脚本执行起来简单方便,不易出错,同时也方便对SQL脚本的调试。而本发明重点要解决如何将SQL脚本转换成对象,以及如何对对象进行操作。
为了实现上述的发明目的,本发明采用如下的技术方案:
一种SQL脚本对象化的方法,所述方法包括如下步骤:
1)获取所述SQL脚本的原始SQL语句;
2)根据所述原始SQL语句中的关键字生成对象,所述对象至少包括所述关键字中的字段信息;
3)在已创建的所述对象中或者通过新建对象存入所述关键字之间关系的字段信息;
4)将根据以上步骤创建的所有对象合并入总对象中;
5)优化所述总对象,并将所述总对象与所述SQL脚本对应,以实现在执行SQL脚本就是对所述总对象进行操作。
其中,所述SQL脚本中的原始SQL语句包括查询语句,所述查询语句至少包括如下关键字:select、from、join、where、OrderBy,针对所述查询语句至少创建与所述关键字及它们之间关系对应的对象。
进一步地,将所述select关键字和所述from关键字之间的字段信息,存入第一数组或第一列表里,将所述第一数组或第一列表存入第一对象中。
更进一步地,遍历所述from关键字后的表,存入到第二对象,形成第二数组或第二列表。
其次,遍历所述where关键字,将所述where关键字存入第三对象,在所述第三对象里形成第三数组或第三列表,每个所述第三数组或第三列表里存入过滤条件的左操作数、右操作数和操作符的信息。
再次,将OrderBy关键字存入第四对象,在所述第四对象里形成第四数组或第四列表。
最后,根据所述步骤4)将所述第一对象至所述第四对象整合入总对象,并确定所述第一对象至所述第四对象之间的执行操作关系以及所述第一对象至所述第四对象与所述总对象之间的执行操作关系。
如果所述查询语句中含有连接条件,则存入第五对象里并在所述第五对象中形成第五数组或第五列表,在所述第五数组或所述第五列表中至少包含所述连接条件中的连接类型以及连接的开启条件,将所述第五对象整合入所述总对象。
需要说明的是,在所述查询语句中包括嵌套子查询,根据所述嵌套子查询创建第六对象,并将所述第六对象整合入所述总对象中。
另外,本发明还提供了一种采用上述方法的系统,所述系统至少包括:
SQL脚本加载器,其用于加载SQL脚本中的原始SQL语句;
SQL脚本解析器,其用于根据关键字生成对应的对象;
对象优化器,将所述SQL脚本解析器生成的所述对象进行优化展平处理;
所述SQL脚本加载、所述SQL脚本解析器、所述SQL对象优化器顺次数据联通。
通过采用上述的技术方案,本发明提供了一种将SQL脚本对象化的方法及系统,其能够最终实现针对对象进行操作来代替SQL脚本进行操作,这样使得SQL脚本执行起来简单方便,不易出错,同时也方便对SQL脚本的调试。
附图说明
图1中示出的是本发明的SQL脚本对象化的方法的实施例的流程图;
图2中示出的是采用本发明的SQL脚本对象化的方法的系统的连接结构图;
图3中示出的是SQL解析器根据关键字创建的对象结构图。
具体实施方式
本发明在于提供一种将SQL脚本对象化的方法及系统,其能够最终实现针对对象进行操作来代替SQL脚本进行操作,这样使得SQL脚本执行起来简单方便,不易出错,同时也方便对SQL脚本的调试。
下面结合说明书附图详细地说明本发明的技术方案:
图1示出的是本发明的SQL脚本对象化的方法的实施例的流程图;
第一步:获取原始的SQL脚本,将其作为输入而不需要做出任何修改,保持SQL脚本原始的字符信息以及逻辑关系。
第二步~第五步:解析SQL脚本,根据SQL语法中的关键字,在本实施例中例如是select、from、join、where、OrderBy等关键字;将SQL脚本中的关键字生成对应的对象,在本实施例中例如是SelectItem、FromItem、JoinItem、FilterDescriptor、SortDescriptor等对象;
其中具体地说,在SQL脚本中,将select和from关键字之间的字段信息放入到一个Field数组或Field列表里,存入SelectItem对象中,而如果SQL脚本中带有表名和别名,Field也会包含表名和别名等信息;然后遍历from后的表,存入到FromItem对象中,并形成一个Table数组或列表;随后可以在此阶段就检查在SQL脚本中是否含有连接条件,如果是(在本实施例中存在连接条件),则会把连接的信息存入JoinItem对象里,将其存成一个Joins的数组或列表,每个Joins的数组或列表包含连接类型,比如全连接、内连接、外连接等,以及连接的开启(ON)条件;然后遍历where部分,将此部分生成一个FilterDescriptor对象,里面存成FilterItem数组或列表,每个FilterItem数组或列表里存入过滤条件的左操作数、右操作数和操作符的信息。
进一步地,如果有OrderBy关键字(在本实施例中存在该关键字),将其生成一个SortDescriptor对象,里面存成SortItem数组或列表,每个SortItem数组或列表里存入字段信息以及升序或者降序的Boolean类型。而类似having以及groupBy等关键字,也可以采用类似的方式处理。
更进一步地,如果SQL脚本中存在嵌套子查询(在本实施例中存在嵌套子查询),会将整个嵌套子查询生成一个SubSelect对象,对于该对象中的各个部分,还是以上面步骤以及执行方式生成,循环执行直到将所有存在的嵌套子查询全部行程对象为止。
第六步:将以上创建的所有对象整合成一个总得Select对象,如果要对SQL脚本进行操作,就直接操作该Select对象就可以了。对每个子部分的操作,可以调用各子对象进行操作。
通过采用上述的方法可以非常有效率地将SQL脚本进行对象化,并且实现了对实现的对象的操作就是对SQL脚本的操作,操作简单,易于实现。
图2示出的是采用本发明的SQL脚本对象化的方法的系统的连接结构图。下面结合图2对各模块详细说明如下:
SQL脚本加载器:该模块主要使用SQL语句加载器加载原始SQL语句。加载器实现简单,基本功能是读取SQL语句,以供SQL脚本解析器解析使用。而且在读取SQL语句时不用做任何处理,以实现快速的读取速度。
SQL脚本解析器:根据关键字,例如针对图1的说明中所列举的select、from、join、where、OrderBy等关键字,将SQL脚本生成对应的对象,同样例如针对图1的说明中所列举的SelectItem、FromItem、JoinItem、FilterDescriptor、SortDescriptor等对象。如果SQL脚本中含有嵌套子查询,则会将整个嵌套子查询生成一个SubSelect对象,里面各个组成部分也是以图1中示出的方式生成。通过SQL脚本解析器解析后生成后的SQL对象结构如图3所示。
对象优化器:将SQL对象进行优化展平处理,即去掉嵌套子查询,合并成一个完整的Select对象。
通过采用上述的方法和系统,本发明将复杂SQL脚本解析成对应的容易操作的对象,简化了SQL脚本的复杂程度,便于操作,也降低了维护SQL脚本的人工成本。同时,SQL脚本在转化成对象的过程中,还会进行优化,比如将含有嵌套子查询的SQL语句展平成一条,优化了SQL语句的执行效率。而最后对总对象也会执行优化,以再次提高执行效率。
因此,过采用上述的技术方案,本发明提供了一种将SQL脚本对象化的方法及系统,其能够最终实现针对对象进行操作来代替SQL脚本进行操作,这样使得SQL脚本执行起来简单方便,不易出错,同时也方便对SQL脚本的调试。
本发明的保护范围并不限定在上述具体实施方式中所说明的具体实施例,而是只要满足本发明的权利要求书的技术特征的组合就落入了本发明的保护范围之中。
Claims (10)
1.一种SQL脚本对象化的方法,其特征在于,所述方法包括如下步骤:
1)获取所述SQL脚本的原始SQL语句;
2)根据所述原始SQL语句中的关键字生成对象,所述对象至少包括所述关键字中的字段信息;
3)在已创建的所述对象中或者通过新建对象存入所述关键字之间关系的字段信息;
4)将根据以上步骤创建的所有对象合并入总对象中;
5)优化所述总对象,并将所述总对象与所述SQL脚本对应,以实现在执行SQL脚本就是对所述总对象进行操作。
2.根据权利要求1所述的方法,其特征在于,所述SQL脚本中的原始SQL语句包括查询语句,所述查询语句至少包括如下关键字:select、from、join、where、OrderBy,针对所述查询语句至少创建与所述关键字及它们之间关系对应的对象。
3.根据权利要求2所述的方法,其特征在于,将所述select关键字和所述from关键字之间的字段信息,存入第一数组或第一列表里,将所述第一数组或第一列表存入第一对象中。
4.根据权利要求3所述的方法,其特征在于,遍历所述from关键字后的表,存入到第二对象,形成第二数组或第二列表。
5.根据权利要求4所述的方法,其特征在于,遍历所述where关键字,将所述where关键字存入第三对象,在所述第三对象里形成第三数组或第三列表,每个所述第三数组或第三列表里存入过滤条件的左操作数、右操作数和操作符的信息。
6.根据权利要求5所述的方法,其特征在于,将OrderBy关键字存入第四对象,在所述第四对象里形成第四数组或第四列表。
7.根据权利要求6所述的方法,其特征在于,根据所述步骤4)将所述第一对象至所述第四对象整合入总对象,并确定所述第一对象至所述第四对象之间的执行操作关系以及所述第一对象至所述第四对象与所述总对象之间的执行操作关系。
8.根据权利要求7所述的方法,其特征在于,如果所述查询语句中含有连接条件,则存入第五对象里并在所述第五对象中形成第五数组或第五列表,在所述第五数组或所述第五列表中至少包含所述连接条件中的连接类型以及连接的开启条件,将所述第五对象整合入所述总对象。
9.根据权利要求8中所述的方法,其特征在于,在所述查询语句中包括嵌套子查询,根据所述嵌套子查询创建第六对象,并将所述第六对象整合入所述总对象中。
10.一种采用如权利要求1-9中任意一项所述的方法的系统,其特征在于,所述系统至少包括:
SQL脚本加载器,其用于加载SQL脚本中的原始SQL语句;
SQL脚本解析器,其用于根据关键字生成对应的对象;
对象优化器,将所述SQL脚本解析器生成的所述对象进行优化展平处理;
所述SQL脚本加载、所述SQL脚本解析器、所述SQL对象优化器顺次数据联通。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310654794.9A CN103617273B (zh) | 2013-12-05 | 2013-12-05 | Sql脚本对象化的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310654794.9A CN103617273B (zh) | 2013-12-05 | 2013-12-05 | Sql脚本对象化的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103617273A true CN103617273A (zh) | 2014-03-05 |
CN103617273B CN103617273B (zh) | 2016-09-14 |
Family
ID=50167976
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310654794.9A Active CN103617273B (zh) | 2013-12-05 | 2013-12-05 | Sql脚本对象化的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103617273B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105740344A (zh) * | 2016-01-25 | 2016-07-06 | 中国科学院计算技术研究所 | 一种独立于数据库的sql语句合并方法及系统 |
CN106844369A (zh) * | 2015-12-03 | 2017-06-13 | 北京国双科技有限公司 | 对象化sql语句构造方法及装置 |
CN107957942A (zh) * | 2017-11-07 | 2018-04-24 | 中国平安人寿保险股份有限公司 | 一种sql脚本的故障修复方法及其终端 |
WO2018120171A1 (zh) * | 2016-12-30 | 2018-07-05 | 华为技术有限公司 | 一种用于存储过程的执行方法、设备以及系统 |
CN108255710A (zh) * | 2017-12-28 | 2018-07-06 | 中国平安人寿保险股份有限公司 | 一种脚本的异常检测方法及其终端 |
CN110019314A (zh) * | 2017-12-29 | 2019-07-16 | 中国移动通信集团湖南有限公司 | 基于数据项分析的动态数据封装方法、客户端和服务端 |
CN110287114A (zh) * | 2019-06-26 | 2019-09-27 | 深圳前海微众银行股份有限公司 | 一种数据库脚本性能测试的方法及装置 |
-
2013
- 2013-12-05 CN CN201310654794.9A patent/CN103617273B/zh active Active
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844369A (zh) * | 2015-12-03 | 2017-06-13 | 北京国双科技有限公司 | 对象化sql语句构造方法及装置 |
CN106844369B (zh) * | 2015-12-03 | 2020-12-29 | 北京国双科技有限公司 | 对象化sql语句构造方法及装置 |
CN105740344A (zh) * | 2016-01-25 | 2016-07-06 | 中国科学院计算技术研究所 | 一种独立于数据库的sql语句合并方法及系统 |
WO2018120171A1 (zh) * | 2016-12-30 | 2018-07-05 | 华为技术有限公司 | 一种用于存储过程的执行方法、设备以及系统 |
US11182353B2 (en) | 2016-12-30 | 2021-11-23 | Huawei Technologies Co., Ltd. | Stored-procedure execution method and device, and system |
CN107957942A (zh) * | 2017-11-07 | 2018-04-24 | 中国平安人寿保险股份有限公司 | 一种sql脚本的故障修复方法及其终端 |
CN107957942B (zh) * | 2017-11-07 | 2020-01-14 | 中国平安人寿保险股份有限公司 | 一种sql脚本的故障修复方法及其终端 |
CN108255710A (zh) * | 2017-12-28 | 2018-07-06 | 中国平安人寿保险股份有限公司 | 一种脚本的异常检测方法及其终端 |
CN108255710B (zh) * | 2017-12-28 | 2020-01-10 | 中国平安人寿保险股份有限公司 | 一种脚本的异常检测方法及其终端 |
CN110019314A (zh) * | 2017-12-29 | 2019-07-16 | 中国移动通信集团湖南有限公司 | 基于数据项分析的动态数据封装方法、客户端和服务端 |
CN110287114A (zh) * | 2019-06-26 | 2019-09-27 | 深圳前海微众银行股份有限公司 | 一种数据库脚本性能测试的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103617273B (zh) | 2016-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103617273A (zh) | Sql脚本对象化的方法及系统 | |
US11055287B2 (en) | Eigenvalue-based data query | |
CN103761080B (zh) | 一种基于SQL的MapReduce作业生成方法及系统 | |
US10515118B2 (en) | Processing a data flow graph of a hybrid flow | |
US10102039B2 (en) | Converting a hybrid flow | |
US9619514B2 (en) | Integration of optimization and execution of relational calculation models into SQL layer | |
US10572478B2 (en) | Multiple query optimization in SQL-on-Hadoop systems | |
CN105205105A (zh) | 一种基于storm的数据ETL系统及处理方法 | |
CN105718593A (zh) | 一种数据库查询优化方法及系统 | |
US10242056B2 (en) | Database hierarchy-independent data drilling | |
CN102541631B (zh) | 以多线程不同驱动源执行计划处理查询的方法和系统 | |
CN104765731A (zh) | 数据库查询优化方法和设备 | |
US20160283610A1 (en) | Hybrid flows containing a continous flow | |
CN103136364A (zh) | 集群数据库系统及其数据查询处理方法 | |
CN102902778A (zh) | 查询语句优化装置和查询语句优化方法 | |
CN102323772A (zh) | 用数据库运算符的状态机表达 | |
CN103440246A (zh) | 用于MapReduce的中间结果数据排序方法及系统 | |
KR20170109119A (ko) | 분산 질의 엔진에서의 질의 최적화 방법 및 장치 | |
CN104391923A (zh) | 一种查询数据集的方法及装置 | |
CN112732752A (zh) | 一种查询语句优化方法、装置、设备和存储介质 | |
WO2018090557A1 (zh) | 查询数据表的方法和装置 | |
US20160154634A1 (en) | Modifying an analytic flow | |
CN100346308C (zh) | 一种基于数据库操作的自动化测试方法 | |
CN104462705A (zh) | 一种基于微粒群算法的夹具装配序列规划方法 | |
CN109918074A (zh) | 编译链接优化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 100094 Beijing city Haidian District North Road No. 68, UFIDA Software Park Applicant after: Yonyou Network Technology Co., Ltd. Address before: 100094 Beijing city Haidian District North Road No. 68, UFIDA Software Park Applicant before: UFIDA Software Co., Ltd. |
|
COR | Change of bibliographic data | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |