CN113467785B - 一种拟态数据库的sql转译方法和*** - Google Patents
一种拟态数据库的sql转译方法和*** Download PDFInfo
- Publication number
- CN113467785B CN113467785B CN202110815162.0A CN202110815162A CN113467785B CN 113467785 B CN113467785 B CN 113467785B CN 202110815162 A CN202110815162 A CN 202110815162A CN 113467785 B CN113467785 B CN 113467785B
- Authority
- CN
- China
- Prior art keywords
- sql
- data object
- rewriting
- database
- module
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种拟态数据库的SQL转译方法和***,该方法包括:对外部输入的原始SQL指令进行词法分析、语法分析以及错误检测,若有词法或语法错误,则提示异常,若无词法或语法错误,则生成所述原始SQL指令的抽象语法树AST;遍历抽象语法树AST,将抽象语法树AST的节点信息转化为自定义的数据对象;遍历自定义的数据对象,通过访问拟态数据库中元数据库的元数据信息,进行语义分析,根据语义分析结果对自定义的数据对象节点信息进行改写;遍历改写前的数据对象或改写后的数据对象,将其拼接为目标数据库的等效、合法的命令或SQL语句。
Description
技术领域
本发明涉及拟态数据库技术领域,尤其涉及一种拟态数据库的SQL转译方法和***。
背景技术
基于拟态数据库技术,需要选择多个异构数据库作为执行体,并选定其中之一作为对外拟态化展现。然而各数据库SQL指令之间存在差异,并没有统一API访问接口。对于异构执行体池中多个与外部表象数据库不一致的数据库,则需要对输入的相应SQL指令进行转译操作,并保证其执行结果在各异构数据库中保持一致。同时,SQL作为一种体量较大的语法种类,还需考虑其转译的效率和耗时问题。
发明内容
针对目前拟态数据库中各异构数据库之间存在的转译问题,本发明提供一种拟态数据库的SQL转译方法和***。
一方面,本发明提供一种拟态数据库的SQL转译方法,包括:
对外部输入的原始SQL指令进行词法分析、语法分析以及错误检测,若有词法或语法错误,则提示异常,若无词法或语法错误,则生成所述原始SQL指令的抽象语法树AST;
遍历抽象语法树AST,将抽象语法树AST的节点信息转化为自定义的数据对象;
遍历自定义的数据对象,通过访问拟态数据库中元数据库的元数据信息,进行语义分析,根据语义分析结果对自定义的数据对象节点信息进行改写;
遍历改写前的数据对象或改写后的数据对象,将其拼接为目标数据库的等效、合法的命令或SQL语句。
进一步地,所述根据语义分析结果对自定义的数据对象节点信息进行改写,具体包括:
若原始的SQL指令为元信息的相关指令,则直接输出语义分析结果;若原始的SQL指令为非元信息的相关指令,则对相关数据对象节点信息进行改写,以确保异构数据库之间的数据一致性。
进一步地,通过字符串拼接的方式将改写前的数据对象或改写后的数据对象重新组装为目标数据库的等效、合法的命令或SQL语句。
另一方面,本发明提供一种拟态数据库的SQL转译***,包括:SQL解析模块、SQL改写模块和SQL翻译模块;
SQL解析模块,用于对外部输入的原始SQL指令进行词法分析、语法分析以及错误检测,若有词法或语法错误,则提示异常,若无词法或语法错误,则生成所述原始SQL指令的抽象语法树AST;遍历抽象语法树AST,将抽象语法树AST的节点信息转化为自定义的数据对象;
SQL改写模块,用于遍历SQL解析模块提供的数据对象,通过访问拟态数据库中元数据库的元数据信息,进行语义分析,根据语义分析结果对SQL解析模块生成的数据对象节点信息进行改写;
SQL翻译模块,用于遍历SQL解析模块提供的数据对象或SQL改写模块改写后的数据对象,将其拼接为目标数据库的等效、合法的命令或SQL语句。
进一步地,所述SQL改写模块包括元数据访问单元和改写单元;
所述元数据访问单元,用于访问拟态数据库中元数据库的元数据信息进行语义分析,将语义分析结果发送至改写单元;
所述改写单元,用于根据接收到的语义分析结果对SQL解析模块生成的数据对象节点信息进行改写,具体为:若原始的SQL指令为元信息的相关指令,则直接向SQL翻译模块输出语义分析结果;若原始的SQL指令为非元信息的相关指令,则对相关数据对象节点信息进行改写,以确保异构数据库之间的数据一致性,并向SQL翻译模块输出改写后的数据对象。
进一步地,所述SQL翻译模块,具体用于:通过字符串拼接的方式将SQL解析模块或SQL改写模块输出的数据对象重新组装为目标数据库的等效、合法的命令或SQL语句。
本发明的有益效果:
(1)通过多种转译逻辑,本发明可以实现一种SQL到多种SQL的转译,即一个SQL输入、多个等效SQL输出。
(2)设置有元数据访问单元,通过访问拟态数据库中元数据库的元数据信息,进行语义分析,根据语义分析结果对自定义的数据对象节点信息进行改写,可以保证一条SQL指令经过转译后在多个异构执行体之间执行结果的一致性,即转译结果的等效性。
(3)通过词法、语法两步分析策略,可以提高SQL指令解析的效率和速度。
附图说明
图1为本发明实施例提供的一种拟态数据库的SQL转译方法的方法流程示意图;
图2为本发明实施例提供的一种拟态数据库的SQL转译***的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供一种拟态数据库的SQL转译方法,包括以下步骤:
S101:对外部输入的原始SQL指令进行词法分析、语法分析以及错误检测,若有词法或语法错误,则提示异常,若无词法或语法错误,则生成所述原始SQL指令的抽象语法树AST;
S102:遍历抽象语法树AST,将抽象语法树AST的节点信息转化为自定义的数据对象;
S103:遍历自定义的数据对象,通过访问拟态数据库中元数据库的元数据信息,进行语义分析,根据语义分析结果对自定义的数据对象节点信息进行改写;
具体地,若原始的SQL指令为元信息的相关指令(例如SHOW语句),则直接输出语义分析结果,即返回相关元数据信息;若原始的SQL指令为非元信息的相关指令,则对相关数据对象节点信息进行改写,以确保异构数据库之间的数据一致性;例如SELECT语句,根据元信息为其添加或修改ORDERBY子句节点,保证查询结果的一致性。
S104:遍历改写前的数据对象或改写后的数据对象,将其拼接为目标数据库的等效、合法的命令或SQL语句。
例如,对于改写后的非元信息相关数据对象,通过字符串拼接的方式将改写后的数据对象重新组装为目标数据库的等效、合法的命令或SQL语句,包括关键字、数据类型、函数的映射,以及语句结构的转换。
本发明实施例提供的一种拟态数据库的SQL转译方法,通过多种转译逻辑,可以实现一种SQL到多种SQL的转译;并且,通过访问拟态数据库中元数据库的元数据信息,进行语义分析,根据语义分析结果对自定义的数据对象节点信息进行改写,保证了一条SQL指令经过转译后在多个异构执行体之间执行结果的一致性;通过词法、语法的两步分析策略,提高了SQL指令的解析速度。
如图2所示,本发明实施例还提供一种拟态数据库的SQL转译***,包括:SQL解析模块、SQL改写模块和SQL翻译模块;
SQL解析模块,用于对外部输入的原始SQL指令进行词法分析、语法分析以及错误检测,若有词法或语法错误,则提示异常,若无词法或语法错误,则生成所述原始SQL指令的抽象语法树AST;遍历抽象语法树AST,将抽象语法树AST的节点信息转化为自定义的数据对象;
例如,可以使用开源工具ANTLR搭建MySQL的SQL解析模块,通过ANTLR提供的Visitor模式对抽象语法树AST进行遍历。
SQL改写模块,用于遍历SQL解析模块提供的数据对象(例如,通过Visitor模式遍历SQL解析模块提供的数据对象),通过访问拟态数据库中元数据库的元数据信息,进行语义分析,根据语义分析结果对SQL解析模块生成的数据对象节点信息进行改写,例如为表名增加默认数据库名、INSERT补充自增列和值、将增删改查语句中的时间函数转字符串等。
作为一种可实施方式,所述SQL改写模块包括元数据访问单元和改写单元;所述元数据访问单元用于访问拟态数据库中元数据库的元数据信息进行语义分析,将语义分析结果发送至改写单元;所述改写单元用于根据接收到的语义分析结果对SQL解析模块生成的数据对象节点信息进行改写,具体为:若语义分析结果指示原始的SQL指令为元信息相关指令,例如SHOW语句,则直接向SQL翻译模块输出语义分析结果,即返回相关元数据信息。若语义分析结果指示原始的SQL指令为非元信息的相关指令,则根据语义分析结果对相关数据对象节点信息进行改写,异构数据库之间的数据一致性,并向SQL翻译模块输出改写后的数据对象;例如SELECT语句,根据元信息为其添加或修改ORDERBY子句节点,保证查询结果的一致性。
SQL翻译模块,用于遍历SQL解析模块提供的数据对象或SQL改写模块改写后的数据对象,将其拼接为目标数据库的等效、合法的命令或SQL语句。
作为一种可实施方式,所述SQL翻译模块,具体用于:通过字符串拼接的方式将SQL解析模块或SQL改写模块输出的数据对象重新组装为目标数据库的等效、合法的命令或SQL语句。
例如,对于改写后的非元信息相关数据对象,则由翻译模块对其遍历,并通过字符串拼接的方式重新组装为目标数据库(PostgreSQL、DM、MySQL)的SQL语句,包括关键字、数据类型、函数的映射,以及语句结构的转换等,使其成为目标实体可执行的等效、合法SQL。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (4)
1.一种拟态数据库的SQL转译方法,其特征在于,包括:
对外部输入的原始SQL指令进行词法分析、语法分析以及错误检测,若有词法或语法错误,则提示异常,若无词法或语法错误,则生成所述原始SQL指令的抽象语法树AST;
遍历抽象语法树AST,将抽象语法树AST的节点信息转化为自定义的数据对象;
遍历自定义的数据对象,通过访问拟态数据库中元数据库的元数据信息,进行语义分析,根据语义分析结果对自定义的数据对象节点信息进行改写;所述根据语义分析结果对自定义的数据对象节点信息进行改写,具体包括:若原始的SQL指令为元信息的相关指令,则直接输出语义分析结果;若原始的SQL指令为非元信息的相关指令,则对相关数据对象节点信息进行改写,以确保异构数据库之间的数据一致性;
遍历改写前的数据对象或改写后的数据对象,将其拼接为目标数据库的等效、合法的命令或SQL语句。
2.根据权利要求1所述的一种拟态数据库的SQL转译方法,其特征在于,通过字符串拼接的方式将改写前的数据对象或改写后的数据对象重新组装为目标数据库的等效、合法的命令或SQL语句。
3.一种拟态数据库的SQL转译***,其特征在于,包括:SQL解析模块、SQL改写模块和SQL翻译模块;
SQL解析模块,用于对外部输入的原始SQL指令进行词法分析、语法分析以及错误检测,若有词法或语法错误,则提示异常,若无词法或语法错误,则生成所述原始SQL指令的抽象语法树AST;遍历抽象语法树AST,将抽象语法树AST的节点信息转化为自定义的数据对象;
SQL改写模块,用于遍历SQL解析模块提供的数据对象,通过访问拟态数据库中元数据库的元数据信息,进行语义分析,根据语义分析结果对SQL解析模块生成的数据对象节点信息进行改写;所述SQL改写模块包括元数据访问单元和改写单元;
所述元数据访问单元,用于访问拟态数据库中元数据库的元数据信息进行语义分析,将语义分析结果发送至改写单元;
所述改写单元,用于根据接收到的语义分析结果对SQL解析模块生成的数据对象节点信息进行改写,具体为:若原始的SQL指令为元信息的相关指令,则直接向SQL翻译模块输出语义分析结果;若原始的SQL指令为非元信息的相关指令,则对相关数据对象节点信息进行改写,以确保异构数据库之间的数据一致性,并向SQL翻译模块输出改写后的数据对象;
SQL翻译模块,用于遍历SQL解析模块提供的数据对象或SQL改写模块改写后的数据对象,将其拼接为目标数据库的等效、合法的命令或SQL语句。
4.根据权利要求3所述的一种拟态数据库的SQL转译***,其特征在于,所述SQL翻译模块,具体用于:通过字符串拼接的方式将SQL解析模块或SQL改写模块输出的数据对象重新组装为目标数据库的等效、合法的命令或SQL语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110815162.0A CN113467785B (zh) | 2021-07-19 | 2021-07-19 | 一种拟态数据库的sql转译方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110815162.0A CN113467785B (zh) | 2021-07-19 | 2021-07-19 | 一种拟态数据库的sql转译方法和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113467785A CN113467785A (zh) | 2021-10-01 |
CN113467785B true CN113467785B (zh) | 2023-02-28 |
Family
ID=77881058
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110815162.0A Active CN113467785B (zh) | 2021-07-19 | 2021-07-19 | 一种拟态数据库的sql转译方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113467785B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115964028B (zh) * | 2021-10-12 | 2023-11-03 | 讯联数据(无锡)有限公司 | 第三方支付接口的快速接入方法及*** |
CN115269627A (zh) * | 2022-05-27 | 2022-11-01 | 上海迈伺通健康科技有限公司 | 使用中文指令操作数据库的方法、***、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110674229A (zh) * | 2019-09-24 | 2020-01-10 | 山东爱城市网信息技术有限公司 | 一种基于ast的关系型数据库sql表关系分析及展现方法 |
CN111143403A (zh) * | 2019-12-10 | 2020-05-12 | 跬云(上海)信息科技有限公司 | Sql转换方法及装置、存储介质 |
CN111400297A (zh) * | 2020-03-19 | 2020-07-10 | 上海德拓信息技术股份有限公司 | 基于Hadoop的海量数据数据质量校验方法 |
CN112363727A (zh) * | 2020-11-10 | 2021-02-12 | 中国平安人寿保险股份有限公司 | Sql代码的java转换方法、装置、计算机设备及存储介质 |
CN112445867A (zh) * | 2019-08-16 | 2021-03-05 | 成都翰通新能源有限公司 | 一种数据关系智能分析方法和*** |
CN112765209A (zh) * | 2021-02-07 | 2021-05-07 | 浪潮云信息技术股份公司 | 一种数据库间的sql语句语法迁移方法及*** |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104899314B (zh) * | 2015-06-17 | 2018-10-19 | 北京京东尚科信息技术有限公司 | 一种数据仓库的血统分析方法和装置 |
US10346401B2 (en) * | 2016-07-07 | 2019-07-09 | Accenture Global Solutions Limited | Query rewriting in a relational data harmonization framework |
US10579351B2 (en) * | 2017-08-25 | 2020-03-03 | Adp, Llc | Computer speed via metadata-based business rule interpreter |
CN110555032A (zh) * | 2019-09-09 | 2019-12-10 | 北京搜狐新媒体信息技术有限公司 | 一种基于元数据的数据血缘关系分析方法及*** |
CN111444536A (zh) * | 2020-03-24 | 2020-07-24 | 上海红阵信息科技有限公司 | 一种适用于拟态环境的数据库设计方法及*** |
CN111460493A (zh) * | 2020-03-24 | 2020-07-28 | 上海红阵信息科技有限公司 | 一种基于拟态构造的sql数据库构建方法 |
-
2021
- 2021-07-19 CN CN202110815162.0A patent/CN113467785B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112445867A (zh) * | 2019-08-16 | 2021-03-05 | 成都翰通新能源有限公司 | 一种数据关系智能分析方法和*** |
CN110674229A (zh) * | 2019-09-24 | 2020-01-10 | 山东爱城市网信息技术有限公司 | 一种基于ast的关系型数据库sql表关系分析及展现方法 |
CN111143403A (zh) * | 2019-12-10 | 2020-05-12 | 跬云(上海)信息科技有限公司 | Sql转换方法及装置、存储介质 |
CN111400297A (zh) * | 2020-03-19 | 2020-07-10 | 上海德拓信息技术股份有限公司 | 基于Hadoop的海量数据数据质量校验方法 |
CN112363727A (zh) * | 2020-11-10 | 2021-02-12 | 中国平安人寿保险股份有限公司 | Sql代码的java转换方法、装置、计算机设备及存储介质 |
CN112765209A (zh) * | 2021-02-07 | 2021-05-07 | 浪潮云信息技术股份公司 | 一种数据库间的sql语句语法迁移方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN113467785A (zh) | 2021-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108959433B (zh) | 一种从软件项目数据中提取知识图谱并问答的方法与*** | |
CN105260403B (zh) | 通用跨数据库访问方法 | |
CN104657439B (zh) | 用于自然语言精准检索的结构化查询语句生成***及方法 | |
CN107515887B (zh) | 一种适用于多种大数据管理***的交互式查询方法 | |
CN104657440B (zh) | 结构化查询语句生成***及方法 | |
WO2023221408A1 (zh) | 深度学习框架的算子处理方法、装置、设备和存储介质 | |
CN103049251B (zh) | 一种数据库持久层装置及数据库操作方法 | |
CN113467785B (zh) | 一种拟态数据库的sql转译方法和*** | |
US20120011134A1 (en) | Systems and methods for database query translation | |
US20210209098A1 (en) | Converting database language statements between dialects | |
CN109840256A (zh) | 一种基于业务实体的查询实现方法 | |
CN112235311B (zh) | Ovsdb客户端代码自动生成方法、***、设备及介质 | |
CN112765209A (zh) | 一种数据库间的sql语句语法迁移方法及*** | |
CN117033418A (zh) | 语句重写方法、***及装置 | |
CN113779062A (zh) | Sql语句生成方法、装置、存储介质及电子设备 | |
CN111782195B (zh) | 一种基于在请求参数上添加注解拼接成sql的查询方法 | |
CN108008947B (zh) | 一种编程语句的智能提示方法、装置、服务器及存储介质 | |
CN113934786A (zh) | 一种构建统一etl的实施方法 | |
CN110209699B (zh) | 一种基于openEHR Composition模板的数据接口动态生成与执行方法 | |
CN108845793B (zh) | 一种orm设计方法及装置 | |
CN113608748B (zh) | C语言转换Java语言的数据处理方法、装置及设备 | |
CN115794858A (zh) | 查询语句处理方法、装置、设备及存储介质 | |
CN112860233B (zh) | 目标语法树的生成方法以及相关设备 | |
US11100286B2 (en) | Methods and systems for implied graph patterns in property chains | |
CN116450609B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |