CN111143330B - 一种多模态数据库解析引擎的实现方法及装置 - Google Patents
一种多模态数据库解析引擎的实现方法及装置 Download PDFInfo
- Publication number
- CN111143330B CN111143330B CN201911380397.0A CN201911380397A CN111143330B CN 111143330 B CN111143330 B CN 111143330B CN 201911380397 A CN201911380397 A CN 201911380397A CN 111143330 B CN111143330 B CN 111143330B
- Authority
- CN
- China
- Prior art keywords
- grammar
- target
- sql
- file
- token
- 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
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/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/3332—Query translation
- G06F16/3335—Syntactic pre-processing, e.g. stopword elimination, stemming
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种多模态数据库解析引擎的实现方法,包括:针对SQL语句采用Oracle语法建立第一语法文件和第二语法文件,其中,所述第一语法文件中包含关键字和token;在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句;依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体;对所述结构体进行语义分析得到查询树,依据所述查询树确定目标实现方式;依据所述目标实现方式执行所述SQL语句。上述的实现方法中,通过建立第一语法文件和第二语法文件实现对语法的兼容和动态加载机制,实现了对SQL解析引擎的扩展,实现了各种数据库的兼容和适配。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种多模态数据库解析引擎的实现方法及装置。
背景技术
orafce是PostgreSQL的一个extension,主要是为PostgreSQL提供Oracle的部分语法、函数、字典表等兼容,比如只支持date,varchar2 and nvarchar2等几种数据类型,支持的数据类型和函数都很有限。
orafce的实现都是基于函数、视图来实现的。所以如果要做完整的语法兼容,orafce的做法是无法实现的。因为postgres的语法分析在调用视图和函数之前。必须要在语法分析之前切入hook才能使用extension的实现做语法兼容性。所以orafce并不是一个彻底的兼容解决方案,极大的限制了应用从Oracle迁移到PostgreSQL。
发明内容
有鉴于此,本发明提供了一种多模态数据库解析引擎的实现方法及装置,用以解决orafce并不是一个彻底的兼容解决方案,极大的限制了应用从Oracle迁移到PostgreSQL的问题。具体方案如下:
一种多模态数据库解析引擎的实现方法,包括:
针对SQL语句采用Oracle语法建立第一语法文件和第二语法文件,其中,所述第一语法文件中包含关键字和token;
在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句;
依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体;
对所述结构体进行语义分析得到查询树,依据所述查询树确定目标实现方式;
依据所述目标实现方式执行所述SQL语句。
上述的方法,可选的,还包括:
在接收到对Oracle语法的切换指令时,通过set命令、指定grammar参数或者hint指定的方式切换解析引擎到对应生效级别,其中,所述生效级别包括:服务参数配置级别,Session会话级别和SQL语句级别。
上述的方法,可选的,在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句,包括:
获取所述第一语法文件中的所述关键字和所述token;
对所述关键字和所述token进行区分;
对所述关键字和所述token进行转换得到目标SQL语句。
上述的方法,可选的,依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体,包括:
采用BISON获取所述第二语法文件中已经定义的语法结构;
对所述语法结构进行移进和规约操作,得到结构体。
上述的方法,可选的,依据所述查询树确定目标实现方式,包括:
获取所述查询树中查询结果的多种实现方式的排列组合;
在各个排列组合中依据预设的选取规则选取目标排列组合;
将所述目标排列组合对应的实现方式作为所述目标实现方式。
一种多模态数据库解析引擎的实现装置,包括:
建立模块,用于针对SQL语句采用Oracle语法建立第一语法文件和第二语法文件,其中,所述第一语法文件中包含关键字和token;
转换模块,用于在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句;
解析模块,用于依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体;
查询和确定模块,用于对所述结构体进行语义分析得到查询树,依据所述查询树确定目标实现方式;
执行模块,用于依据所述目标实现方式执行所述SQL语句。
上述的装置,可选的,还包括:
切换模块,用于在接收到对Oracle语法的切换指令时,通过set命令、指定grammar参数或者hint指定的方式切换解析引擎到对应生效级别,其中,所述生效级别包括:服务参数配置级别,Session会话级别和SQL语句级别。
上述的装置,可选的,所述转换模块包括:
第一获取单元,用于获取所述第一语法文件中的所述关键字和所述token;
区分单元,用于对所述关键字和所述token进行区分;
转换单元,用于对所述关键字和所述token进行转换得到目标SQL语句。
上述的装置,可选的,所述解析模块包括:
第二获取单元,用于采用BISON获取所述第二语法文件中已经定义的语法结构;
移动和规约单元,用于对所述语法结构进行移进和规约操作,得到结构体。
上述的装置,可选的,所述查询和确定模块包括:
第三获取单元,用于获取所述查询树中查询结果的多种实现方式的排列组合;
选取单元,用于在各个排列组合中依据预设的选取规则选取目标排列组合;
确定单元,用于将所述目标排列组合对应的实现方式作为所述目标实现方式。
与现有技术相比,本发明包括以下优点:
本发明公开了一种多模态数据库解析引擎的实现方法,包括:针对SQL语句采用Oracle语法建立第一语法文件和第二语法文件,其中,所述第一语法文件中包含关键字和token;在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句;依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体;对所述结构体进行语义分析得到查询树,依据所述查询树确定目标实现方式;依据所述目标实现方式执行所述SQL语句。上述的实现方法中,通过建立第一语法文件和第二语法文件实现对语法的兼容和动态加载机制,实现了对SQL解析引擎的扩展,实现了各种数据库的兼容和适配。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例公开的一种多模态数据库解析引擎的实现方法流程图;
图2为本申请实施例公开的一种多模态数据库解析引擎的实现装置结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
本发明公开了一种多模态数据库解析引擎的实现方法及装置,应用于PostgreSQL,在PostgreSQL数据库基础上提供Oracle语法特性兼容目前主要有两种实现方式:通过扩展插件Orafce提供部分Oracle函数特性的兼容,并不是通过定义语法解析文件实现,故此方法不够灵活。通过yacc和lex方式在SQL语法解析层实现Oracle语法解析,第二种相比第一种实现在灵活性,易操作性方面都有了较大改进。但是各个公司实现方式差异较大,兼容的程度也不一,比如有些实现只能运行在一种语法解析引擎下,若需要切换到另一种SQL解析引擎就必须要重启数据库服务。
orafce是PostgreSQL的一个extension,主要是为PostgreSQL提供Oracle的部分语法、函数、字典表等兼容,比如只支持date,varchar2 and nvarchar2等几种数据类型,支持的数据类型和函数都很有限。
orafce的实现都是基于函数、视图来实现的。所以如果要做完整的语法兼容,orafce的做法是无法实现的。因为postgres的语法分析在调用视图和函数之前。必须要在语法分析之前切入hook才能使用extension的实现做语法兼容性。所以orafce并不是一个彻底的兼容解决方案,极大的限制了应用从Oracle迁移到PostgreSQL。
其中,orafce可以实现date,nvarchar2等字段类型的兼容,本发明实施例中,以orafce插件实现varchar2数据类型的兼容进行举例,代码如下:
#自定义
/*CREATE TYPE*/
CREATE TYPE varchar2(
internallength=VARIABLE,
input=varchar2in,
output=varchar2out,
receive=varchar2recv,
send=varchar2send,
category='S',
typmod_in=varchar2typmodin,
typmod_out=varchar2typmodout,
collatable=true
);
##创建转换函数
/*CREATE CAST*/
CREATE CAST(varchar2 AS text)
WITHOUT FUNCTION
AS IMPLICIT;
CREATE CAST(text AS varchar2)
WITHOUT FUNCTION
AS IMPLICIT;
CREATE CAST(varchar2 AS char)
WITHOUT FUNCTION
AS IMPLICIT;
...
##其他varchar2的操作函数:
##此函数使用pg内核提供的C函数,部分函数会采用orafce动态库自定义的C函数
CREATE OR REPLACE FUNCTION pg_catalog.substrb(varchar2,integer,integer)RETURNS varchar2 AS'bytea_substr'
LANGUAGE internal
STRICT IMMUTABLE;
由上述代码可知,通过创建自定义type类型进行扩展,并不是通过在内核层面原生的支持varchar2数据类型,故执行效率不高。且对于复杂的SQL语法层面的兼容比如oracle的connect by语法的高级特性,orafce就更无能为力了,因为orafce无法干预到SQL解析引擎层面。
另一种实现方式即使在PostgreSQL的SQL解析引擎层支持Oracle等数据库语法的解析,但是只能运行在一种模态下,即要么只能运行在PostgreSQL的SQL解析引擎下,要么只能运行在Oracle或其它数据库的SQL解析引擎下,切换SQL解析引擎需要重新配置参数并重启数据库服务,这会影响数据库服务的连续性保障。
基于上述的问题,本发明实施例中,在融合两种方式的基础上通过extension模式扩展SQL解析引擎,以hook的方式实现对Oracle、DB2等其它数据库SQL语句的词法和语法解析,并解决在不需要重启数据库服务的情况下,可以真正的同时支持多模态SQL解析引擎的多种生效级别(服务参数配置级别,Session会话级别,SQL语句级别),降低客户的学习成本和运维成本,使得客户可以从Oracle、DB2等商业数据库平滑迁移到AntDB。上述的实现方法的执行流程如图1所示,包括步骤:
S101、针对SQL语句采用Oracle语法建立第一语法文件和第二语法文件,其中,所述第一语法文件中包含关键字和token;
本发明实施例中,依据PostgreSQL的语法解析的实现逻辑,针对Oracle语法支持创建相应的语法文件:第一语法文件(ora_kwlist.h)和第二语法文件(ora_gram.y),下本发明实施例中以Oracle语法特有的命令:递归查询(CONNECT BY)举例说明整个过程。其中,所述第一语法文件中包含关键字和token,所述关键字指每一种数据库定义的SQL语句中有特殊作用的保留字。当SQL解析引擎解析SQL语句的时候,遇到该关键字就会执行相应的逻辑。保留字是不能被重新定义和修改的。也不能定义为字段名。是有特殊意义的标识单位。
进一步的,本发明实施例中还可以定义其它数据库语法解析框架,比如定义db2_gramy.y和db2_kwlist.h文件实现对DB2语法的兼容以及动态的加载机制。
S102、在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句;
本发明实施例中,在对所述第一语法文件ora_kwlist.h文件中以FlEX解析器对关键字和token的区分,在语法解析过程中进行对应的转换操作,具体的转换过程如下:
PG_KEYWORD("connect_by_root",CONNECT_BY_ROOT,RESERVED_KEYWORD)
S103、依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体;
本发明实施例中,对词法解析完毕的SQL语句,会使用BISON通过所述第二语法文件ora_gram.y文件中已经定义的语法结构进行移进和规约操作(根据已经识别的关键字找和顺序到符合对应的语法定义),解析成为对应的结构体,等待语义分析。如下代码为Oracle语法中SELECT查询的CONNECT BY子句的定义。
simple_select:
SELECT opt_distinct target_listinto_clause from_clause where_clause
opt_connect_by_clause group_clause having_clause
{
SelectStmt*n=makeNode(SelectStmt);
ResTarget*rt=llast_node(ResTarget,$3);
if(rt->expr_len<=0&&rt->location>=0)
{
if(@4>rt->location)
rt->expr_len=@4-rt->location;
elseif(@5>rt->location)
rt->expr_len=@5-rt->location;
}
n->distinctClause=$2;
n->targetList=$3;
n->intoClause=$4;
n->fromClause=$5;
n->whereClause=$6;
n->groupClause=$8;
n->havingClause=$9;
n->ora_connect_by=$7;
$$=(Node*)n;
}
connect_by_clause:
start_with_clause connect_by_opt_nocycle a_expr
{
OracleConnectBy*n=makeNode(OracleConnectBy);
n->no_cycle=$2;
n->start_with=$1;
n->connect_by=$3;
$$=n;
}
|connect_by_opt_nocycle a_expr opt_start_with_clause
{
OracleConnectBy*n=makeNode(OracleConnectBy);
n->no_cycle=$1;
n->start_with=$3;
n->connect_by=$2;
$$=n;
}
上述代码可以解析为:
START WITH column_name=expr
CONNECT BY[NOCYCLE]PRIOR column1=column2;
S104、对所述结构体进行语义分析得到查询树,依据所述查询树确定目标实现方式;
本发明实施例中,当语法分析完毕生成相应结构体时,需要对结构体的内容进行语义分析,以生成相应的Query Tree(查询树:执行计划的生成前提条件)。例如new_->start_with=transformExpr(pstate,old->start_with,EXPR_KIND_STAR T_WITH)可以看到对connect by子句的start_with表达式进行了解析。
执行计划是根据查询树分析出获取查询结果的多种实现方式的排列组合,在各个排列组合中依据预设的选取规则选取目标排列组合,将所述目标排列组合对应的实现方式作为所述目标实现方式,其中,所述预设的选取规则可以依据经验或者具体情况进行设定,本发明实施例中对所述预设的选取方法的具体形式不进行限定,以所述预设的选取方法为从中选取cost(代价)最优的方案为例,确定目标实现方式。
对于CONNECT BY的支持,Postgres并没有预制的解决方案,例如如下代码针对函数名可以看出实现逻辑给出了不同CONNECT BY的执行方法,另外还有结果集的设置、获取和排序等。
static TupleTableSlot*ExecNestConnectBy(PlanState*pstate);
static TupleTableSlot*ExecHashConnectBy(PlanState*pstate);
static TupleTableSlot*ExecSortConnectBy(PlanState*pstate);
static TupleTableSlot*ExecFirstSortHashConnectBy(PlanState*state);
static TupleTableSlot*ExecSortHashConnectBy(PlanState*pstate);
static TupleTableSlot*ExecNestConnectByStartWith(ConnectByState*ps);
static TuplestoreConnectByLeaf*GetConnectBySortLeaf(ConnectByState*ps);
static HashsortConnectByLeaf*GetConnectByHashSortLeaf(ConnectByState*ps);
static TuplestoreConnectByLeaf*GetNextTuplesortLeaf(ConnectByState*cbstate,TupleTa bleSlot*parent_slot);
static TuplestoreConnectByLeaf*GetNextHashsortLeaf(ConnectByState*cbstate,TupleTabl eSlot*parent_slot);
static TupleTableSlot*InsertRootHashValue(ConnectByState*cbstate,TupleTableSlot*slot);
static TupleTableSlot*InsertRootSortHashValue(ConnectByState*cbstate,TupleTableSlot*slot);
static TupleTableSlot*InsertRootHashSortValue(InsertRootHashSortContext*context,Tupl eTableSlot*slot);
static bool ExecHashNewBatch(HashJoinTable hashtable,HashConnectByState*state,Tupl eTableSlot*slot);
static void ProcessTuplesortRoot(ConnectByState*cbstate,TuplestoreConnectByLeaf*leaf);
static void ProcessHashsortRoot(ConnectByState*cbstate,HashsortConnectByLeaf*leaf);
static void RestartBufFile(BufFile*file);
S105、依据所述目标实现方式执行所述SQL语句。
本发明实施例中,所述目标实现方式用于数据库执行器的执行工作。
本发明公开了一种多模态数据库解析引擎的实现方法,包括:针对SQL语句采用Oracle语法建立第一语法文件和第二语法文件,其中,所述第一语法文件中包含关键字和token;在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句;依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体;对所述结构体进行语义分析得到查询树,依据所述查询树确定目标实现方式;依据所述目标实现方式执行所述SQL语句。上述的实现方法中,通过建立第一语法文件和第二语法文件实现对语法的兼容和动态加载机制,实现了对SQL解析引擎的扩展,实现了各种数据库的兼容和适配。
进一步的,本发明实施例中,通过在SQL解析引擎层增加Oracle、DB2、MySQL等SQL解析的多模态能力,切底的解决对各种数据库的兼容适配的扩展性问题。在一种数据库的运行态中同时可以支持多种数据库的兼容能力。
本发明实施例中,QL解析引擎默认工作在PostgreSQL语法模式下,若需要动态切换SQL解析引擎,可以通过set命令的方式进行切换,比如set grammar to oracle;切换到Oracle语法兼容模式下,set grammar to db2切换到DB2兼容模式下。或者是在访问连接串中进行显式指定grammar参数,比如jdbc:postgresql://10.78.187.107:5432/postgres?binaryTransfer=False&forceBinary=False&grammar=oracle。可以通过SQL语句hint的方式指定执行引擎,比如/*oracle*/select*from student where rownum<5显式指定该SQL语句运行在Oracle语法模式下,/*mysql*/select*fromstudent lim it 4,9显示指定该语句运行在MySQL语法模式下。所述实现方法可以实现多个SQL解析引擎之间的动态切换,同时支持三种服务级别:服务级别、会话级别和语句级别。按此算法实现即避免了数据库服务的重启生效还可以通过SQL解析引擎框架实现除Oracle语法兼容外的其它数据库语法兼容比如DB2、MySQL等,实现更灵活,更易用。
基于上述的一种多模态数据库解析引擎的实现方法,本发明实施例中还提供了一种多模态数据库解析引擎的实现装置,所述实现装置的结构框图如图2所示,包括:
建立模块201、转换模块202、解析模块203、查询和确定模块204和执行模块205。
其中,
所述建立模块201,用于针对SQL语句采用Oracle语法建立第一语法文件和第二语法文件,其中,所述第一语法文件中包含关键字和token;
所述转换模块202,用于在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句;
所述解析模块203,用于依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体;
所述查询和确定模块204,用于对所述结构体进行语义分析得到查询树,依据所述查询树确定目标实现方式;
所述执行模块205,用于依据所述目标实现方式执行所述SQL语句。
本发明公开了一种多模态数据库解析引擎的实现装置,包括:针对SQL语句采用Oracle语法建立第一语法文件和第二语法文件,其中,所述第一语法文件中包含关键字和token;在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句;依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体;对所述结构体进行语义分析得到查询树,依据所述查询树确定目标实现方式;依据所述目标实现方式执行所述SQL语句。上述的实现装置中,通过建立第一语法文件和第二语法文件实现对语法的兼容和动态加载机制,实现了对SQL解析引擎的扩展,实现了各种数据库的兼容和适配。
本发明实施例中,还包括:切换模块。
其中,
所述切换模块,用于在接收到对Oracle语法的切换指令时,通过set命令、指定grammar参数或者hint指定的方式切换解析引擎到对应生效级别,其中,所述生效级别包括:服务参数配置级别,Session会话级别和SQL语句级别。
本发明实施例中,所述转换模块202包括:
第一获取单元、区分单元和转换单元。
其中,
所述第一获取单元,用于获取所述第一语法文件中的所述关键字和所述token;
所述区分单元,用于对所述关键字和所述token进行区分;
所述转换单元,用于对所述关键字和所述token进行转换得到目标SQL语句。
本发明实施例中,所述解析模块203包括:
第二获取单元和移动和规约单元。
其中,
所述第二获取单元,用于采用BISON获取所述第二语法文件中已经定义的语法结构;
所述移动和规约单元,用于对所述语法结构进行移进和规约操作,得到结构体。
本发明实施例中,所述查询和确定模块204包括:
第三获取单元、选取单元和确定单元。
其中,
所述第三获取单元,用于获取所述查询树中查询结果的多种实现方式的排列组合;
所述选取单元,用于在各个排列组合中依据预设的选取规则选取目标排列组合;
所述确定单元,用于将所述目标排列组合对应的实现方式作为所述目标实现方式。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上对本发明所提供的一种多模态数据库解析引擎的实现方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种多模态数据库解析引擎的实现方法,其特征在于,包括:
针对SQL语句采用Oracle语法建立第一语法文件和第二语法文件,其中,所述第一语法文件中包含关键字和token;
在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句;
依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体;
对所述结构体进行语义分析得到查询树,依据所述查询树确定目标实现方式;
依据所述目标实现方式执行所述SQL语句;
其中,还包括:
在接收到对Oracle语法的切换指令时,通过set命令、指定grammar参数或者hint指定的方式切换解析引擎到对应生效级别,以实现多个SQL解析引擎之间的动态切换,其中,所述生效级别包括:服务参数配置级别,Session会话级别和SQL语句级别。
2.根据权利要求1所述的方法,其特征在于,在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句,包括:
获取所述第一语法文件中的所述关键字和所述token;
对所述关键字和所述token进行区分;
对所述关键字和所述token进行转换得到目标SQL语句。
3.根据权利要求1所述的方法,其特征在于,依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体,包括:
采用BISON获取所述第二语法文件中已经定义的语法结构;
对所述语法结构进行移进和规约操作,得到结构体。
4.根据权利要求1所述的方法,其特征在于,依据所述查询树确定目标实现方式,包括:
获取所述查询树中查询结果的多种实现方式的排列组合;
在各个排列组合中依据预设的选取规则选取目标排列组合;
将所述目标排列组合对应的实现方式作为所述目标实现方式。
5.一种多模态数据库解析引擎的实现装置,其特征在于,包括:
建立模块,用于针对SQL语句采用Oracle语法建立第一语法文件和第二语法文件,其中,所述第一语法文件中包含关键字和token;
转换模块,用于在对所述SQL语句进行语法解析过程中,对所述第一语法文件的关键字和token进行转换,得到目标SQL语句;
解析模块,用于依据所述第二语法文件将所述目标SQL语句进行语法解析,得到结构体;
查询和确定模块,用于对所述结构体进行语义分析得到查询树,依据所述查询树确定目标实现方式;
执行模块,用于依据所述目标实现方式执行所述SQL语句;
其中,还包括:
切换模块,用于在接收到对Oracle语法的切换指令时,通过set命令、指定grammar参数或者hint指定的方式切换解析引擎到对应生效级别,以实现多个SQL解析引擎之间的动态切换,其中,所述生效级别包括:服务参数配置级别,Session会话级别和SQL语句级别。
6.根据权利要求5所述的装置,其特征在于,所述转换模块包括:
第一获取单元,用于获取所述第一语法文件中的所述关键字和所述token;
区分单元,用于对所述关键字和所述token进行区分;
转换单元,用于对所述关键字和所述token进行转换得到目标SQL语句。
7.根据权利要求5所述的装置,其特征在于,所述解析模块包括:
第二获取单元,用于采用BISON获取所述第二语法文件中已经定义的语法结构;
移动和规约单元,用于对所述语法结构进行移进和规约操作,得到结构体。
8.根据权利要求5所述的装置,其特征在于,所述查询和确定模块包括:
第三获取单元,用于获取所述查询树中查询结果的多种实现方式的排列组合;
选取单元,用于在各个排列组合中依据预设的选取规则选取目标排列组合;
确定单元,用于将所述目标排列组合对应的实现方式作为所述目标实现方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911380397.0A CN111143330B (zh) | 2019-12-27 | 2019-12-27 | 一种多模态数据库解析引擎的实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911380397.0A CN111143330B (zh) | 2019-12-27 | 2019-12-27 | 一种多模态数据库解析引擎的实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111143330A CN111143330A (zh) | 2020-05-12 |
CN111143330B true CN111143330B (zh) | 2023-10-03 |
Family
ID=70521117
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911380397.0A Active CN111143330B (zh) | 2019-12-27 | 2019-12-27 | 一种多模态数据库解析引擎的实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111143330B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111708753A (zh) * | 2020-05-18 | 2020-09-25 | 北京金山云网络技术有限公司 | 数据库迁移的评估方法、装置、设备及计算机存储介质 |
CN112487019B (zh) * | 2020-12-14 | 2024-02-20 | 广州海量数据库技术有限公司 | 用于OpenGauss数据库的解析动态SQL的方法及系统 |
CN112965995B (zh) * | 2021-04-19 | 2023-03-31 | 瀚高基础软件股份有限公司 | 基于postgreSQL客户端PSQL的数据交互方法及交互装置 |
CN113342605B (zh) * | 2021-06-07 | 2024-02-02 | 北京许继电气有限公司 | 一种PostgreSQL数据库监控和溯源分析的方法和系统 |
CN115659994B (zh) * | 2022-12-09 | 2023-03-03 | 深圳市人马互动科技有限公司 | 人机交互系统中的数据处理方法及相关装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6470349B1 (en) * | 1999-03-11 | 2002-10-22 | Browz, Inc. | Server-side scripting language and programming tool |
CN103310011A (zh) * | 2013-07-02 | 2013-09-18 | 曙光信息产业(北京)有限公司 | 集群数据库系统环境下的数据查询解析方法 |
CN105260403A (zh) * | 2015-09-22 | 2016-01-20 | 广东同望科技股份有限公司 | 通用跨数据库访问方法 |
CN105868204A (zh) * | 2015-01-21 | 2016-08-17 | 中国移动(深圳)有限公司 | 一种转换Oracle脚本语言SQL的方法及装置 |
WO2017016286A1 (zh) * | 2015-07-24 | 2017-02-02 | 中兴通讯股份有限公司 | 一种多语言语义解析的方法和装置 |
CN110177113A (zh) * | 2019-06-06 | 2019-08-27 | 北京奇艺世纪科技有限公司 | 互联网防护系统及访问请求处理方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101051600B1 (ko) * | 2010-03-29 | 2011-07-22 | 주식회사 소프트 포 소프트 | 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템 |
US10649987B2 (en) * | 2017-01-31 | 2020-05-12 | Salesforce.Com, Inc. | Systems, methods, and apparatuses for implementing conditional statement execution within a multi-tenant aware structured query language |
-
2019
- 2019-12-27 CN CN201911380397.0A patent/CN111143330B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6470349B1 (en) * | 1999-03-11 | 2002-10-22 | Browz, Inc. | Server-side scripting language and programming tool |
CN103310011A (zh) * | 2013-07-02 | 2013-09-18 | 曙光信息产业(北京)有限公司 | 集群数据库系统环境下的数据查询解析方法 |
CN105868204A (zh) * | 2015-01-21 | 2016-08-17 | 中国移动(深圳)有限公司 | 一种转换Oracle脚本语言SQL的方法及装置 |
WO2017016286A1 (zh) * | 2015-07-24 | 2017-02-02 | 中兴通讯股份有限公司 | 一种多语言语义解析的方法和装置 |
CN105260403A (zh) * | 2015-09-22 | 2016-01-20 | 广东同望科技股份有限公司 | 通用跨数据库访问方法 |
CN110177113A (zh) * | 2019-06-06 | 2019-08-27 | 北京奇艺世纪科技有限公司 | 互联网防护系统及访问请求处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111143330A (zh) | 2020-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111143330B (zh) | 一种多模态数据库解析引擎的实现方法及装置 | |
US9448995B2 (en) | Method and device for performing natural language searches | |
KR100269258B1 (ko) | 프로세스 방법론을 위한 통합 case 정보저장소 메타 모델시스템 및 그 통합 지원 방법 | |
CN106934062A (zh) | 一种查询elasticsearch的实现方法及系统 | |
US7720674B2 (en) | Systems and methods for processing natural language queries | |
CN111813798B (zh) | 基于r2rml标准的映射方法、装置、设备及存储介质 | |
CN109947433A (zh) | 一种小程序的生成方法、更新方法及装置 | |
CN110688397B (zh) | 一种基于sql的分布式数据统一访问系统及方法 | |
US20230129994A1 (en) | System and Method for Transpilation of Machine Interpretable Languages | |
CN114090613A (zh) | 程序语句转换方法、装置、设备及存储介质 | |
CN113779062A (zh) | Sql语句生成方法、装置、存储介质及电子设备 | |
JP2012128858A (ja) | クエリシステム及びコンピュータプログラム | |
CN115269629A (zh) | 一种支持多种数据源的数据查询方法及系统 | |
CN113467785B (zh) | 一种拟态数据库的sql转译方法和系统 | |
US10055450B1 (en) | Efficient management of temporal knowledge | |
CN113297251A (zh) | 多源数据检索方法、装置、设备及存储介质 | |
CN114764558A (zh) | 一种sql方言转换方法、装置、系统及存储介质 | |
CN111914028A (zh) | 一种基于图增量同步异构数据源数据关系的方法及装置 | |
CN114064601B (zh) | 存储过程转换方法、装置、设备和存储介质 | |
WO2022098253A1 (ru) | Система и способ создания и исполнения высоко масштабируемых облачных приложений | |
JP2000181697A (ja) | メインフレームcobol資産のオープン系システムへのコンバージョン方法及び装置並びに記録媒体 | |
KR102597181B1 (ko) | 메타정보를 관리하는 데이터 관리 서버 및 그 제어방법 | |
EP3944127A1 (en) | Dependency graph based natural language processing | |
Glenis et al. | NLonSpark: NL to SQL translation on top of Apache Spark | |
Sandborg-Petersen | MQL programmer’s guide |
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 |