CN107103007A - 一种sql代码转换方法及装置 - Google Patents
一种sql代码转换方法及装置 Download PDFInfo
- Publication number
- CN107103007A CN107103007A CN201610099219.0A CN201610099219A CN107103007A CN 107103007 A CN107103007 A CN 107103007A CN 201610099219 A CN201610099219 A CN 201610099219A CN 107103007 A CN107103007 A CN 107103007A
- Authority
- CN
- China
- Prior art keywords
- replaced
- name
- replacement
- field
- sql
- 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/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24537—Query rewriting; Transformation of operators
-
- 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/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种SQL代码转换方法及装置。一种SQL代码转换方法,其特征在于,该方法包括:对待转换的SQL原代码段进行解析,在原代码段中存在join操作关键字的情况下,判断待替换表是join操作的直接操作对象还是间接操作对象;根据判断结果,对待替换表名及待替换字段名进行文本替换。本申请方案有效地提升SQL代码转换的处理效率。
Description
技术领域
本申请涉及数据库技术领域,尤其涉及一种SQL代码转换方法及装置。
背景技术
结构化查询语言SQL(Structured Query Language)是一种数据库操作语言,由于其具有语法简单、非过程化、使用方式灵活等特点,因此被广泛应用于各类涉及数据库操作的应用程序开发中。此外,应用于分布式文件系统中的数据处理语言,例如Hive SQL、ODPS SQL等,也都采用了与SQL类似的语法。
出于业务发展的需要,有时可能需要对底层数据库的数据结构进行修改,这就有可能涉及到数据表名称、字段名称的变化。为了保证SQL代码的可用性,需要将原有的SQL代码中涉及的表名、字段名修改为新的表名和字段名。如果实现应用程序中使用的SQL代码比较简单,并且数据结构的变化情况比较简单,可以直接用文本替换的方式对SQL代码进行转换。
然而在实际应用中,应用程序中SQL代码往往比较复杂(例如涉及多表关联查询、多层嵌套查询等),数据结构的变化也并不限于简单的数据表、字段名称变化,而是涉及更为复杂的转换映射关系。这种情况下,直接使用文本替换的方式对SQL代码进行转换可能会导致错误,因此只能使用人工的方式对涉及表名、字段名变化的SQL代码进行手动修改,导致处理效率低下。
发明内容
针对上述技术问题,本申请提供一种SQL代码转换方法及装置,技术方案如下:
根据本申请的第一方面,提供一种SQL代码转换方法,该方法包括:
对待转换的SQL原代码段进行解析,确定原代码段的语法结构以及原代码段中使用到的表名、表中字段名;
根据预设的转换需求信息,确定所述原代码段中的待替换表名及待替换字段名,所述待替换字段为待替换表中的字段;所述转换需求信息中包括:需要替换的表名文本的替换前后对应关系、以及需要替换的字段名文本的替换前后对应关系;
在所述原代码段中存在join操作关键字的情况下,判断待替换表是join操作的直接操作对象还是间接操作对象;
根据判断结果,对待替换表名及待替换字段名进行文本替换。
根据本申请的第二方面,提供一种SQL代码转换装置,该装置包括:
解析模块,用于对待转换的SQL原代码段进行解析,确定原代码段的语法结构以及原代码段中使用到的表名、表中字段名;
待替换文本确定模块,用于根据预设的转换需求信息,确定所述原代码段中的待替换表名及待替换字段名,所述待替换字段为待替换表中的字段;所述转换需求信息中包括:需要替换的表名文本的替换前后对应关系、以及需要替换的字段名文本的替换前后对应关系;
判断模块,用于在所述原代码段中存在join操作关键字的情况下,判断待替换表是join操作的直接操作对象还是间接操作对象;
替换模块,用于根据判断结果对待替换表名及待替换字段名进行文本替换。
本申请实施例所提供的技术方案,在对表名、字段名进行文本替换操作的基础上,进一步增加了对多表关联查询、多层嵌套查询的特殊转换处理,从而令复杂的SQL代码也能够正确地进行自动转换处理,有效地提升SQL代码转换的处理效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本申请的SQL代码转换方法的第一种流程示意图;
图2是本申请的SQL代码转换方法的第二种流程示意图;
图3是本申请的SQL代码转换装置的第一种结构示意图;
图4是本申请的SQL代码转换装置的第二种结构示意图;
图5是本申请的SQL代码转换装置的第三种结构示意图。
具体实施方式
在SQL中,join操作用于根据两个或更多个表中的列之间的关系,从这些表中查询数据,为了得到完整的结果,需要指定多个表之间的关联条件,从而把多个表中数据的关联到一起。
在实际进行join操作时,join操作应具有至少两个操作对象,其中,join操作对象既可以是一个完整的输入表,例如:
select a.col1,b.col2from
tab1a
join
tab2b
on(关联条件)
也可以是一个select子查询语句得到的查询结果,例如:
select a.col1,b.col2from
(select子查询)a
join
(select子查询)b
on(关联条件)
对于前一种情况,将输入表称为join操作的直接操作对象,例如上例中的tab1和tab2都是join操作的直接操作对象;而对于后一种情况,将select子查询语句中的输入表称为join操作的间接操作对象。假设select子查询语句为“select col1from tab1”,则tab1为外层join操作的间接操作对象。
根据现有技术,当输入表作为join操作的直接操作对象时,如果对表名或字段名进行直接替换,可能会导致错误。例如,替换后的tab1和替换后的tab2中如果存在同名字段,则这两个字段是无法直接同时存在于同一查询结果中的。
针对以上问题,本申请提供一种SQL代码转换方法,参见图1所示,该方法可以包括以下步骤:
S101,对待转换的SQL原代码段进行解析,确定原代码段的语法结构以及原代码段中使用到的表名、表中字段名;
S102,根据预设的转换需求信息,确定所述原代码段中的待替换表名及待替换字段名,所述待替换字段为待替换表中的字段;所述转换需求信息中包括:需要替换的表名文本的替换前后对应关系、以及需要替换的字段名文本的替换前后对应关系;
S103,在所述原代码段中存在join操作关键字的情况下,判断待替换表是join操作的直接操作对象还是间接操作对象;
S104,根据判断结果,对待替换表名及待替换字段名进行文本替换。
为了使本领域技术人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请保护的范围。
参见图2所示,本申请所提供SQL代码转换方法具体可以包括以下步骤:
S201,对待转换的SQL原代码段进行解析,确定原代码段的语法结构以及原代码段中使用到的表名、表中字段名;
S202,根据预设的转换需求信息,确定原代码段中的待替换表名及待替换字段名;
其中,所述待替换字段为待替换表中的字段。转换需求信息中至少包括:需要替换的表名文本的替换前后对应关系、以及需要替换的字段名文本的替换前后对应关系;
S203,在原代码段中存在join操作关键字的情况下,判断待替换表是join操作的直接操作对象还是间接操作对象;如果待替换表是join操作的直接操作对象,则执行S204,如果待替换表是join操作的间接操作对象,则执行S205,
S204,join直接操作表替换方式:将原代码段中的待替换表名文本替换为待替换表对应的SQL子查询代码,并针对替换后的子查询添加别名指定代码,所指定的别名与原代码段中为待替换表指定的别名一致;进一步根据转换需求信息,对替换后代码段中的待替换表名及待替换字段名进行文本替换;
S205,join间接操作表替换方式:如果待替换表是join操作的间接操作对象,则直接根据转换需求信息,对原代码段中的待替换表名及待替换字段名进行文本替换。
其中,S204和S205可以分别独立实施,也可以联合实施。
本申请所提供的方案,根据SQL代码中的输入表相对于join操作的关系,对需要进行替换的输入表进行不同的替换操作,以实现对需要修改表名/字段名的SQL代码转换的自动处理。下面将结合具体的应用实例,对本申请方案进行详细说明。
假设根据业务发展需求,需要将源数据平台上的数据迁移到目标数据平台,源数据平台上存在数据表src1,该表包括字段:col1、col2、col3、col4、pt,其中pt为分区字段;目标数据平台上存在与src1对应的数据表src2,该表包括字段:id1、id2、id3、id4、ds,其中ds为分区字段。两张表的字段对应转换关系如表1所示:
src1 | src2 |
col1 | case when id4='Y'then 0.0 else id1 end |
col2 | id2*id1 |
col3 | id3 |
pt | ds |
表1
这里col4并不存在转换需求,因此没有体现在表1中。
表1中所记载的信息,也可以认为是对表src1的转换需求信息,在实际应用中,可能还存在对源数据平台上的其他数据表的转换需求信息,本实施例仅以一个数据表转换作为示意性说明。另外,在实际应用中,转换需求信息中还可以进一步添加其他内容,例如字段类型的转换需求等等,因此表1所示的形式并不应理解为对本申请方案的限定。
根据S201,可以对待转换的SQL原代码进行语法分析,确定代码中使用到的输入表名、表中字段名以及其在代码中的位置。在后续操作中,还需要根据输入表相对于join操作的关系(直接操作对象或间接操作)进行不同处理,该相对关系也在本步骤中确定。其中,SQL语法分析可以利用现有技术实现,本申请中不需要进行详细说明
根据S202,进一步根据在S201中确定的输入表名、字段名中,确定哪些表名、字段名是需要进行替换处理的。其中,待替换的字段应该是待替换表中的字段,例如,在代码中存在字段名col1,则根据表1所示的转换需求信息,仅在col1作为src1的字段出现时,“col1”才是待替换字段名称。字段与表的从属关系可以根据语法分析结果确定,这里不再详细描述。
根据S203,根据语法分析结果,在原代码段中存在join操作关键字的情况下,判断待替换表是join操作的直接操作对象还是间接操作对象;如果待替换表是join操作的直接操作对象,则执行S204所对应的join直接操作表替换方式,如果待替换表是join操作的间接操作对象,则执行S205所对应的join间接操作表替换方式,以下将分别对两种替换方式进行详细说明:
首先对S205对应的join间接操作表替换方式进行说明,假设未替换之前的SQL代码如下:
根据解析结果以及转换需求信息可知:该段代码中包含的待替换表为src1,对应待替换字段为col1、col2、col3、pt,而tab1不属于待替换表;join操作对应两个操作对象,均为SQL子查询表达式,其中第一个子查询中的输入表src1对于外层的join操作而言,属于间接操作对象。
根据join间接操作表替换方式,按照表1所示转换需求信息中的对应关系,对待替换表名和待替换字段名进行文本替换,就本例的代码而言,需要替换的部分实际仅涉及第一个SQL子查询(以string1.1标识),该子查询替换结果如下所示(以string1.2标识):
select
case when id4='Y'then 0.0else id1end as new_col1,//替换前字段名col1
id2*id1,//替换前字段名col2
id3//替换前字段名col3
from src2//替换前表名src1
where ds=20150101//替换前字段名pt
对于非单层查询结构的SQL语句,内层查询内得到的结果字段可能会在外层进一步使用。根据本申请方案,外层出现的字段名如果不是和替换前的表名同时出现,将不会被识别为待替换字段,例如上例替换前代码中的“a.col2”,a作为内层子查询结果的别名,在替换前“a.col2”是没有问题的,但是在内层查询代码经过替换后,内层查询结果已经不存在col2字段,为保证外层的正常使用,在本申请的一种实施方式中,进一步针对替换后的查询结果字段名添加别名指定代码,即为替换后的查询结果字段指定别名,所指定的字段别名应根据所原代码段中对该字段的使用需求确定。具体而言:
如果在原代码段中为待替换字段指定了别名,则对替换后的字段名指定的别名,应与原代码段中为待替换字段指定的别名一致;例如,在替换前的代码中,已经为col1指定了别名new_col1,因此在替换后,为“case when id4='Y'then0.0else id1 end”指定的别名保持new_col1不变。
如果在原代码段中没有为待替换字段指定别名,则对替换后的字段名指定的别名为该字段替换前的原字段名。例如,在替换前的代码中,对于col2和col3均没有指定别名,因此在替换后,为col2的替换结果“id2*id1”指定别名col2、为col3的替换结果“id3”指定别名col3。
这样,经过指定别名处理后,string1.2对应的处理结果如下(以string1.3标识):
select
case when id4='Y'then 0.0else id1end as new_col1,//原别名new col1不变
id2*id1as col2,//指定别名col2
id3as col3//指定别名col3
from src2
where ds=20150101
本领域技术人员可以理解的是,除了利用“as”指定别名之外,其他的别名指定语法,例如利用空格、利用“=”指定别名均不影响本申请方案的实现。另外,对于单层查询结构的SQL语句,或者通过语法分析确定替换后的查询结果字段不会被再次使用,也可以不做替换后进一步指定别名的处理。在实际应用中,可以根据待转换代码段的实际情况进行灵活处理。
另外,根据实际的应用需求,数据结构的修改可能还涉及字段类型的变化。针对该情况,在本申请的一种具体实施方式中,还可以进一步对转换前后的字段类型进行检查,如果判断字段类型发生了变化,则在进行字段名文本替换之后,针对替换后的查询结果字段名添加字段类型转换代码,转换的目标字段类型根据替换前的字段类型确定。其中,字段类型信息可以通过读取表的元信息(meta-information)确定,如果在转换需求信息中记录了字段类型信息,也可以通过读取转换需求信息确定。
例如,在数据从源数据平台迁移到目标数据平台的过程中,除了表src1到表src1涉及的表名及字段名转换之外,还可能涉及字段类型的变化:原表src1的col3字段类型为bigint,而与之对应的新表src2的id3字段类型为string,那么,针对该字段,在字段名文本替换之后,还需要再添加字段类型转换代码,将字段类型转换为与替换前的字段类型一致的bigint,经过字段类型转换处理后,string1.2对应的处理结果如下(以string1.4标识):
select
case when id4='Y'then 0.0else id1end as new_col1,
id2*id1,
cast(id3as bigint)//将id3类型转换为bigint
from src2
where ds=20150101
可以理解的是,上述实施例中的添加字段别名指定代码处理以及添加字段类型转换代码处理可以分别实施,也可以叠加实施,例如,在叠加实施的情况下,string1.2对应的处理结果如下(以string1.5标识):
select
case when id4='Y'then 0.0else id1end as new_col1,//原别名new col1不变
id2*id1as col2,//指定别名col2
cast(id3as bigint)as col3//指定别名col3,并且将id3类型转换为bigint
from src2
where ds=20150101
下面对S204对应的join直接操作表替换方式进行说明,假设未替换之前的SQL代码如下:
select a.col1,b.another_col
from src1 a//src1表的别名为a
join
another_table b//another_table表的别名为b
on a.col2=b.id2and a.pt=20150101and b.dt=1000
根据解析结果以及转换需求信息可知:该段代码中包含的待替换表为src1,another_table不属于待替换表;join操作对应的两个操作对象均为实际的输入表,其中待替换输入表src1对于的join操作而言,属于直接操作对象。
在上述SQL代码中,待替换表src1不宜直接利用S205对应的替换方式进行处理,这是因为可能会出现字段名冲突的问题。例如:another_table也包含名为id3的字段,则替换后的src1将存在和another_table重名的字段;另一种情况是,假设another_table b也属于待替换表,而替换后的another_table与替换后的src1存在同名的字段。可见,一段能够正确运行的涉及src1和another_table的SQL代码,在进行表名和字段名的替换后并不一定是正确的。
针对上述情况,本申请方案的处理方式是:先将原SQL代码段中的待替换表名文本替换为待替换表对应的SQL子查询代码,也即将待替换的输入表以子查询结果的形式表现出来,然后再进行表名及字段名的替换操作,这样即可保证SQL除了待替换表以外的其它代码都不需要变更,且避免了当一段SQL代码中表名替换后时可能出现列名冲突的问题。
对于“待替换表名→SQL子查询代码”的转换处理,一种较为简单的方式是:直接将待替换表中包含的所有字段全部select出来,然而在实际应用中,并不一定待替换表的每个字段都会在代码中被用到,针对这种情况,本申请提供的方案是:首先确定在原代码段中需要用到的待替换表字段;然后针对所确定出的字段,生成对应的SQL子查询代码,这里的“对应”是指:查询代码所得到的查询结果即为这些字段的数据;最后将原代码段中的待替换表名文本替换为所生成的SQL子查询代码。
例如,根据表1所示的转换需求信息可知:待替换表src1中的待替换字段包括col1、col2、col3和pt。进一步通过对前面的代码段进行语法分析,由于a是src1的别名,且代码中存在“a.col1”“a.col2”“a.pt”,可知col1、col2和pt三个字段是代码段中需要用到的字段,因此将scr1替换为子查询代码如下(以string2.1标识):
select col1,col2,pt from src1
将待替换表名转换为SQL子查询后,原代码段变成了如下形式:
select a.col1,b.another_col
from(select col1,col2,pt from src1)a//src1替换为子查询代码,别名仍为a
join another_table b
on a.col2=b.id2and a.pt=20150101and b.dt=1000
然后,对于上述替换结果,进一步采用S205所介绍的方式进行表名和字段名的替换,就本例的代码而言,需要替换的部分实际仅涉及替换得到的子查询,即string2.1,该子查询替换结果如下所示(以string2.2标识):
select
case when id4='Y'then 0.0else id1end as col1,//替换前字段名col1,别名不变
id2*id1as col2,//替换前字段名col2,替换后指定别名col2
ds as pt//替换前字段名pt,替换后指定别名pt
from src2//替换前表名src1
具体的替换过程可以参见前面实施例,这里不再做重复说明。
在本申请的一种优选实施方式中,如果原代码段的join条件中,包含有针对待替换表的单表过滤条件,则可以将该条件改写为转换得到的SQL子查询代码的过滤条件、并移至所述SQL子查询代码中,通过这种过滤条件前置的处理方式,可以有效减少后续执行SQL代码时,SQL子查询代码查询结果的数据量,从而实现性能的优化。
例如,在本例中,原代码段join on后的过滤条件共包括3项,其中“a.pt=20150101”是针对待替换表的单表过滤条件,将该过滤条件前置移到SQL子查询中后,处理结果如下所示(以string2.3标识):
相应地,原代码段的最终转换结果如下:
select a.col1,b.another_col
from(
select
case when id4='Y'then 0.0else id1end as col1,id2*id1as col2,
ds as pt
from src2where ds=20150101//增加过滤条件,过滤字段名称相应替换为ds
)a
join another_table b
on a.col2=b.id2and b.dt=1000//单表过滤条件前置后,过滤条件变为两个
可见,应用本申请所提供的SQL代码转换方法,在对表名、字段名进行文本替换操作的基础上,进一步考虑到了多表关联查询、多层嵌套查询等情况可能产生的错误,并提供了相应的解决处理方案,从而令复杂的SQL代码也能够正确地进行自动转换处理,有效地提升SQL代码转换的处理效率。
本申请方案,可以应用于Hive、ODPS等平台之间的数据迁移,使用时仅需配置源数据平台和目标数据平台之间的表名/字段名映射文件(即转换需求信息)即可自动实现表及字段的映射转换。在多业务线需要迁移SQL代码、业务复杂需多人协同工作的情况下,应用本申请方案可以有效提高工作效率。
相应于上述方法实施例,本申请还提供一种SQL代码转换装置,参见图3所示,该装置可以包括:
解析模块110,用于对待转换的SQL原代码段进行解析,确定原代码段的语法结构以及原代码段中使用到的表名、表中字段名;
待替换文本确定模块120,用于根据预设的转换需求信息,确定原代码段中的待替换表名及待替换字段名,其中,待替换字段为待替换表中的字段;转换需求信息中可以包括:需要替换的表名文本的替换前后对应关系、以及需要替换的字段名文本的替换前后对应关系;
判断模块130,用于在原代码段中存在join操作关键字的情况下,判断待替换表是join操作的直接操作对象还是间接操作对象;
替换模块140,用于根据判断结果对待替换表名及待替换字段名进行文本替换。
参见图4所示,在本申请的一种具体实施方式中,替换模块140可以进一步包括第一替换模块141和/或第二替换模块142:
第一替换模块141,用于在待替换表是join操作的直接操作对象的情况下,将原代码段中的待替换表名文本替换为待替换表对应的SQL子查询代码,进一步根据转换需求信息,对替换后代码段中的待替换表名及待替换字段名进行文本替换;
在本申请的一种具体实施方式中,第一替换模块141可以利用以下方式将原代码段中的待替换表名文本替换为待替换表对应的SQL子查询代码:
确定在原代码段中需要用到的待替换表字段;
针对所确定出的字段,生成对应的SQL子查询代码;
将原代码段中的待替换表名文本替换为所生成的SQL子查询代码。
第二替换模块142,用于在待替换表是join操作的间接操作对象的情况下,直接根据转换需求信息,对原代码段中的待替换表名及待替换字段名进行文本替换。
参见图5所示,在本申请的一种具体实施方式中,上述装置还可以包括:
字段类型转换模块160,用于进行字段名文本替换之后,针对替换后的查询结果字段名添加字段类型转换代码,转换的目标字段类型根据替换前的字段类型确定。
参见图5所示,在本申请的一种具体实施方式中,上述装置还可以包括:
别名指定模块170,用于进行字段名文本替换之后,针对替换后的字段名添加别名指定代码,所指定的字段别名根据原代码段中对该字段的使用需求确定。
参见图5所示,在本申请的一种具体实施方式中,上述装置还可以包括:
过滤条件前置模块180,用于将原代码段join条件中针对待替换表的单表过滤条件,改写为所述SQL子查询代码的过滤条件、并移至所述SQL子查询代码中。
可以理解的是,字段类型转换模块160、别名指定模块170、过滤条件前置模块180作为三种功能独立的模块,既可以如图5所示同时配置在装置中,也可以分别单独配置在装置中,因此图5所示的结构不应理解为对本申请方案的限定。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置或系统实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本申请方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本申请的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种SQL代码转换方法,其特征在于,该方法包括:
对待转换的SQL原代码段进行解析,确定原代码段的语法结构以及原代码段中使用到的表名、表中字段名;
根据预设的转换需求信息,确定所述原代码段中的待替换表名及待替换字段名,所述待替换字段为待替换表中的字段;所述转换需求信息中包括:需要替换的表名文本的替换前后对应关系、以及需要替换的字段名文本的替换前后对应关系;
在所述原代码段中存在join操作关键字的情况下,判断待替换表是join操作的直接操作对象还是间接操作对象;
根据判断结果,对待替换表名及待替换字段名进行文本替换。
2.根据权利要求1所述的方法,其特征在于,所述根据判断结果,对待替换表名及待替换字段名进行文本替换,包括:
如果待替换表是join操作的直接操作对象,则将所述原代码段中的待替换表名文本替换为待替换表对应的SQL子查询代码,进一步根据所述转换需求信息,对替换后代码段中的待替换表名及待替换字段名进行文本替换。
3.根据权利要求1所述的方法,其特征在于,所述根据判断结果,对待替换表名及待替换字段名进行文本替换,包括:
如果待替换表是join操作的间接操作对象,则直接根据所述转换需求信息,对所述原代码段中的待替换表名及待替换字段名进行文本替换。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
进行字段名文本替换之后,针对替换后的查询结果字段名添加字段类型转换代码,转换的目标字段类型根据替换前的字段类型确定。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
进行字段名文本替换之后,针对替换后的字段名添加别名指定代码,所指定的字段别名根据所述原代码段中对该字段的使用需求确定。
6.根据权利要求2所述的方法,其特征在于,所述将所述原代码段中的待替换表名文本替换为待替换表对应的SQL子查询代码,包括:
确定在所述原代码段中需要用到的待替换表字段;
针对所确定出的字段,生成对应的SQL子查询代码;
将所述原代码段中的待替换表名文本替换为所生成的SQL子查询代码。
7.根据权利要求2所述的方法,其特征在于,所述方法还包括:
将所述原代码段join条件中针对待替换表的单表过滤条件,改写为所述SQL子查询代码的过滤条件、并移至所述SQL子查询代码中。
8.一种SQL代码转换装置,其特征在于,该装置包括:
解析模块,用于对待转换的SQL原代码段进行解析,确定原代码段的语法结构以及原代码段中使用到的表名、表中字段名;
待替换文本确定模块,用于根据预设的转换需求信息,确定所述原代码段中的待替换表名及待替换字段名,所述待替换字段为待替换表中的字段;所述转换需求信息中包括:需要替换的表名文本的替换前后对应关系、以及需要替换的字段名文本的替换前后对应关系;
判断模块,用于在所述原代码段中存在join操作关键字的情况下,判断待替换表是join操作的直接操作对象还是间接操作对象;
替换模块,用于根据判断结果对待替换表名及待替换字段名进行文本替换。
9.根据权利要求8所述的装置,其特征在于,所述替换模块包括:
第一替换模块,用于在待替换表是join操作的直接操作对象的情况下,将所述原代码段中的待替换表名文本替换为待替换表对应的SQL子查询代码,进一步根据所述转换需求信息,对替换后代码段中的待替换表名及待替换字段名进行文本替换。
10.根据权利要求8所述的装置,其特征在于,所述替换模块包括:第二替换模块,用于在待替换表是join操作的间接操作对象的情况下,直接根据所述转换需求信息,对所述原代码段中的待替换表名及待替换字段名进行文本替换。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610099219.0A CN107103007B (zh) | 2016-02-23 | 2016-02-23 | 一种sql代码转换方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610099219.0A CN107103007B (zh) | 2016-02-23 | 2016-02-23 | 一种sql代码转换方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107103007A true CN107103007A (zh) | 2017-08-29 |
CN107103007B CN107103007B (zh) | 2020-09-15 |
Family
ID=59658303
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610099219.0A Active CN107103007B (zh) | 2016-02-23 | 2016-02-23 | 一种sql代码转换方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107103007B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107943995A (zh) * | 2017-09-22 | 2018-04-20 | 国网重庆市电力公司电力科学研究院 | 一种sql查询结果列名及编码自动转换方法 |
CN109656947A (zh) * | 2018-11-09 | 2019-04-19 | 金蝶软件(中国)有限公司 | 数据查询方法、装置、计算机设备和存储介质 |
CN109726213A (zh) * | 2018-12-10 | 2019-05-07 | 网易无尾熊(杭州)科技有限公司 | 一种程序代码转换方法、装置、介质和计算设备 |
CN110008448A (zh) * | 2019-04-02 | 2019-07-12 | 中国工商银行股份有限公司 | 将SQL代码自动转换为Java代码的方法和装置 |
CN110096514A (zh) * | 2019-04-01 | 2019-08-06 | 跬云(上海)信息科技有限公司 | 数据查询方法和装置 |
CN113342823A (zh) * | 2021-06-30 | 2021-09-03 | 招商局金融科技有限公司 | 数据变更方法、装置、计算机设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110040794A1 (en) * | 2002-05-10 | 2011-02-17 | International Business Machines Corporation | Querying markup language data sources using a relational query processor |
CN103631601A (zh) * | 2013-12-10 | 2014-03-12 | 北京中电普华信息技术有限公司 | 一种代码生成方法和装置 |
CN104679903A (zh) * | 2015-03-20 | 2015-06-03 | 亚信科技(南京)有限公司 | 一种数据表的操作方法及装置 |
-
2016
- 2016-02-23 CN CN201610099219.0A patent/CN107103007B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110040794A1 (en) * | 2002-05-10 | 2011-02-17 | International Business Machines Corporation | Querying markup language data sources using a relational query processor |
CN103631601A (zh) * | 2013-12-10 | 2014-03-12 | 北京中电普华信息技术有限公司 | 一种代码生成方法和装置 |
CN104679903A (zh) * | 2015-03-20 | 2015-06-03 | 亚信科技(南京)有限公司 | 一种数据表的操作方法及装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107943995A (zh) * | 2017-09-22 | 2018-04-20 | 国网重庆市电力公司电力科学研究院 | 一种sql查询结果列名及编码自动转换方法 |
CN107943995B (zh) * | 2017-09-22 | 2022-03-08 | 国网重庆市电力公司电力科学研究院 | 一种sql查询结果列名及编码自动转换方法 |
CN109656947A (zh) * | 2018-11-09 | 2019-04-19 | 金蝶软件(中国)有限公司 | 数据查询方法、装置、计算机设备和存储介质 |
CN109656947B (zh) * | 2018-11-09 | 2020-12-29 | 金蝶软件(中国)有限公司 | 数据查询方法、装置、计算机设备和存储介质 |
CN109726213A (zh) * | 2018-12-10 | 2019-05-07 | 网易无尾熊(杭州)科技有限公司 | 一种程序代码转换方法、装置、介质和计算设备 |
CN110096514A (zh) * | 2019-04-01 | 2019-08-06 | 跬云(上海)信息科技有限公司 | 数据查询方法和装置 |
CN110008448A (zh) * | 2019-04-02 | 2019-07-12 | 中国工商银行股份有限公司 | 将SQL代码自动转换为Java代码的方法和装置 |
CN110008448B (zh) * | 2019-04-02 | 2023-10-17 | 中国工商银行股份有限公司 | 将SQL代码自动转换为Java代码的方法和装置 |
CN113342823A (zh) * | 2021-06-30 | 2021-09-03 | 招商局金融科技有限公司 | 数据变更方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107103007B (zh) | 2020-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107103007A (zh) | 一种sql代码转换方法及装置 | |
EP2118786B1 (en) | Integrating enterprise search systems with custom access control application programming interfaces | |
CN1112642C (zh) | 配置工具中的设计部件复用方法 | |
US7333981B2 (en) | Transformation of a physical query into an abstract query | |
CA2562281C (en) | Partial query caching | |
US20080228716A1 (en) | System and method for accessing unstructured data using a structured database query environment | |
US7840542B2 (en) | Method and system for controlling access to semantic web statements | |
US20130311483A1 (en) | Method and system for accurate medical-code translation | |
CN105868204A (zh) | 一种转换Oracle脚本语言SQL的方法及装置 | |
US20080016048A1 (en) | Intelligent condition pruning for size minimization of dynamic, just in time tables | |
EP1903752B8 (en) | A data management system and method | |
Būmans et al. | RDB2OWL: a practical approach for transforming RDB data into RDF/OWL | |
CN101719168A (zh) | 一种基于算法可配置的通用数据入库方法 | |
US9053207B2 (en) | Adaptive query expression builder for an on-demand data service | |
Chen et al. | Constructing and maintaining scientific database views in the framework of the object-protocol model | |
CN105786710A (zh) | 一种程序代码复查方法及引擎 | |
CN116610697A (zh) | 数据库查询语句的查询方法、存储介质及设备 | |
Lambrix et al. | Ontology alignment and merging | |
Cabibbo | On keys, foreign keys and nullable attributes in relational mapping systems | |
CN103810256B (zh) | 基于分区技术在大数据网优平台中快速分发数据的方法 | |
US8818987B2 (en) | Converting union commands to union all commands | |
Ben-Gan et al. | T-SQL Querying | |
CN116069669B (zh) | 全自动分布式一致性的分析方法、系统、设备及存储介质 | |
Kensche et al. | Transformation of Models in (to) a Generic Metamodel. | |
Avaylon et al. | Methods for Linking Data to Online Resources and Ontologies with Applications to Neurophysiology |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20180408 Address after: Four story 847 mailbox of the capital mansion of Cayman Islands, Cayman Islands, Cayman Applicant after: CAINIAO SMART LOGISTICS HOLDING Ltd. Address before: Cayman Islands Grand Cayman capital building a four storey No. 847 mailbox Applicant before: ALIBABA GROUP HOLDING Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |