数据库访问方法、装置及存储介质与流程

文档序号:32435878发布日期:2022-12-06 18:52阅读:80来源:国知局
数据库访问方法、装置及存储介质与流程

1.本技术涉及数据库技术领域,尤其涉及一种数据库访问方法、装置及存储介质。


背景技术:

2.目前,在spark框架下可以使用jdbc(java data base connectivity,java数据库连接)方式访问mysql、postgresql、db2、sqlserver、derby、oracle、teradata等数据库,而对于一些其他类型的数据库,比如hive数据库,在spark框架下并无法直接使用jdbc方式访问。
3.以hive数据库为例,目前实现在spark框架下兼容hive数据库的方式为:将包含hive数据库的metastore元数据存储信息的配置文件hive-site.xml存放于spark的配置文件中,基于此,spark可通过访问hive数据库的metastore元数据存储信息实现访问hive数据库。
4.然而,在上述方式中,由于将包含hive数据库的metastore元数据存储信息的配置文件hive-site.xml存放于spark的配置文件中是在spark框架下兼容hive数据库的必要条件,因此,仅能够访问已加载有其metastore元数据存储信息的hive数据库,这就导致当需要访问新的hive数据库时,需要更新spark的配置文件并重新启动spark,代价较高,同时,spark的配置文件中仅允许存在一个上述配置文件hive-site.xml,因此,在上述方式中无法同时访问多个hive数据库。


技术实现要素:

5.为了解决上述技术问题或者至少部分地解决上述技术问题,本技术提供了一种数据库访问方法、装置及存储介质。
6.第一方面,本技术提供了一种数据库访问方法,所述方法包括:
7.接收对目标数据库的访问请求,建立与所述目标数据库的连接;
8.确定与所述目标数据库相匹配的目标数据库方言,所述目标数据库方言为定制化数据库方言;
9.基于所述目标数据库方言对所述访问请求中的标准查询语句进行处理,得到符合所述目标数据库方言的定制化查询语句;
10.对所述目标数据库执行所述定制化查询语句。
11.可选地,所述建立与所述目标数据库的连接,包括:
12.从所述访问请求中提取出所述目标数据库的连接信息,所述连接信息至少包括:所述目标数据库的java数据库连接统一资源定位符jdbc url、用户名以及密码;
13.根据所述连接信息与已加载的所述目标数据库的,java数据库连接jdbc驱动建立与所述目标数据库的jdbc连接。
14.可选地,所述确定与所述目标数据库相匹配的目标数据库方言,包括:
15.从所述访问请求中提取出所述目标数据库的jdbc url;
16.对所述目标数据库的jdbc url进行解析,得到所述目标数据库所支持的目标数据库协议;
17.从预设的数据库方言列表中查找与所述目标数据库协议对应的数据库方言,所述数据库方言列表包括数据库协议与数据库方言的对应关系;
18.将查找到的与所述目标数据库协议对应的数据库方言确定为与所述目标数据库相匹配的目标数据库方言。
19.可选地,所述方法还包括:
20.若从所述数据库方言列表中未查找到与所述目标数据库协议对应的数据库方言,则基于设定数据库方言对所述访问请求中的标准查询语句进行处理,得到符合所述设定数据库方言的查询语句;
21.对所述目标数据库执行所述符合所述设定数据库方言的查询语句,其中,执行结果为执行失败。
22.可选地,所述目标数据库为hive数据库;所述基于所述目标数据库方言对所述访问请求中的标准数据库查询语句进行处理,得到符合所述目标数据库方言的目标数据库查询语句,包括:
23.从所述标准数据库查询语句中确定待查询的目标字段名;
24.将所述目标字段名中的库名删除,以及为所述目标字段名添加转义符。
25.可选地,所述方法应用于spark程序;所述方法还包括:
26.对所述定制化查询语句的执行结果进行格式转换,以将所述执行结果转换为dataframe数据格式。
27.第二方面,本技术提供了一种数据库访问装置,所述装置包括:
28.连接建立模块,用于接收对目标数据库的访问请求,建立与所述目标数据库的连接;
29.方言确定模块,用于确定与所述目标数据库相匹配的目标数据库方言,所述目标数据库方言为定制化数据库方言;
30.第一语句处理模块,用于基于所述目标数据库方言对所述访问请求中的标准查询语句进行处理,得到符合所述目标数据库方言的定制化查询语句;
31.第一语句执行模块,用于对所述目标数据库执行所述定制化查询语句。
32.可选地,所述连接建立模块包括:
33.信息提取子模块,用于从所述访问请求中提取出所述目标数据库的连接信息,所述连接信息至少包括:所述目标数据库的java数据库连接统一资源定位符jdbc url、用户名以及密码;
34.建立子模块,用于根据所述连接信息与已加载的所述目标数据库的,java数据库连接jdbc驱动建立与所述目标数据库的jdbc连接。
35.可选地,所述方言确定模块包括:
36.url提取子模块,用于从所述访问请求中提取出所述目标数据库的url;
37.url解析子模块,用于对所述目标数据库的url进行解析,得到所述目标数据库所属的目标数据库类型;
38.查找子模块,用于从预设的数据库方言列表中查找与所述目标数据库类型对应的
数据库方言,所述数据库方言列表包括数据库类型与数据库方言的对应关系;将查找到的与所述目标数据库类型对应的数据库方言确定为与所述目标数据库相匹配的目标数据库方言。
39.可选地,所述装置还包括:
40.第二语句处理模块,用于若从所述数据库方言列表中未查找到与所述目标数据库协议对应的数据库方言,则基于设定数据库方言对所述访问请求中的标准查询语句进行处理,得到符合所述设定数据库方言的查询语句;
41.第二语句执行模块,用于对所述目标数据库执行所述符合所述设定数据库方言的查询语句,其中,执行结果为执行失败。
42.可选地,所述目标数据库为hive类型的数据库;所述第一语句处理模块具体用于:
43.将所述访问请求中的标准数据库查询语句中的库名删除。
44.第三方面,提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
45.存储器,用于存放计算机程序;
46.处理器,用于执行存储器上所存放的程序时,实现第一方面任一项所述的数据库访问方法的步骤。
47.第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如第一方面任一项所述的数据库访问方法的步骤。
48.本技术实施例提供的上述技术方案与现有技术相比具有如下优点:
49.本发明实施例提供的技术方案,通过定制化数据库方言,实现了在访问数据库时,可基于数据库相匹配的定制化数据库方言,通过jdbc的方式访问数据库。以hive数据库为例,通过jdbc方式访问hive数据库相较于现有技术而言,无需依赖于配置文件,进一步地,对于同一类型的多个数据库而言,相匹配的定制化数据库方言相同,因此,通过jdbc的方式访问hive数据库并无数量的限制,也即可以通过jdbc的方式同时访问多个hive数据库。
附图说明
50.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
51.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
52.图1为本技术实施例提供的一种数据库访问方法的流程示意图;
53.图2为本技术实施例提供的一种数据库访问装置的示意图;
54.图3为本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
55.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是
本技术的一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
56.图1为本技术实施例提供的一种数据库访问方法的流程示意图。如图1所示,包括以下步骤:
57.步骤101、接收对目标数据库的访问请求,建立与目标数据库的连接。
58.上述目标数据库是指待访问的数据库。
59.在应用中,建立与数据库的连接是访问该数据库的前提。基于此,当接收到对目标数据库的访问请求时,建立与目标数据库的连接。
60.目前,对于不同类型的数据库,存在多种不同的连接方式,其中jdbc可以为多种数据库提供统一的访问。基于此,作为一个实施例,在本步骤101中,建立与目标数据库的jdbc连接。
61.通常情况下,建立与数据库的jdbc连接需要以下四个参数:用户名、密码、jdbc url,以及jdbc驱动,其中,jdbc url提供了一种标识数据库的方法,可以使相应的驱动程序能够识别该数据库并与之建立连接,其定义了连接数据库时的协议、子协议、数据源标识,因此,在本步骤101中,建立与目标数据库的jdbc连接包括:从接收到的访问请求中提取出目标数据库的连接信息,该连接信息至少包括:目标数据库的jdbc url、用户名以及密码,根据目标数据库的连接信息与已加载的目标数据库的jdbc驱动建立与目标数据库的jdbc连接。
62.需要说明的是,由于不同的数据库特性不同,因此,在建立与数据库的jdbc连接时除获取以上四个参数以外,还可根据数据库的特性添加相关的配置参数。举例来说,在通过jdbc方式查询hive数据库时,配置参数中需要增加fetchsize,并将fetchsize设置为大于0的数字,以避免查询结果为空。
63.作为一个可选的实现方式,上述访问请求中可携带fetchsize,如此可实现灵活地配置查询数据库时采用的fetchsize值。
64.作为另一个可选的实现方式,还可采用静态配置的方式配置fetchsize,本发明对此不做限制。
65.步骤102、确定与目标数据库相匹配的目标数据库方言,目标数据库方言为定制化数据库方言。
66.不同协议的数据库在sql语句的设计上是存在差异的,因此,不同协议的数据库有着各自相匹配的数据库方言,比如mysql协议的数据库匹配mysql方言,oracle协议的数据库匹配oracle方言。基于此,在本步骤102中,为了实现访问目标数据库,确定与目标数据库相匹配的数据库方言(为描述方便,以下称目标数据库方言)。
67.在应用中,同一框架下可注册有多种数据库方言。作为一个可选的实现方式,框架下可预先存储有数据库方言列表,该列表包括数据库协议与数据库方言的对应关系。基于此,在本步骤102中,确定与目标数据库相匹配的目标数据库方言包括:确定目标数据库所支持的数据库协议(为描述方便,以下称为目标数据库协议),从数据库方言列表中查找与目标数据库协议对应的数据库方言,若查找到与目标数据库协议对应的数据库方言,则将查找到的数据库方言确定为与目标数据库相匹配的目标数据库方言。
68.其中,jdbc url的标准语法如下:jdbc url由三部分组成,各部分间用冒号分隔:
jdbc:《协议:子协议:子名称》。基于此,在本步骤102中,可从访问请求中提取出目标数据库的jdbc url,进一步对目标数据库的jdbc url进行解析,得到目标数据库所支持的目标数据库协议。
69.需要说明的是,在本发明实施例中,上述目标数据库方言特指定制化数据库方言,也即不同于现有的mysql方言、oracle方言等,专为访问目标数据库而定制的一种数据库方言,比如为访问hive类型的目标数据库而定制的hive方言。
70.步骤103、基于目标数据库方言对访问请求中的标准查询语句进行处理,得到符合目标数据库方言的定制化查询语句。
71.在一个例子中,目标数据库为hive数据库,基于hive数据库的特性,本步骤103中基于目标数据库方言对访问请求中的标准数据库查询语句进行处理包括:从标准数据库查询语句中确定待查询的目标字段名,将目标字段名中的库名删除,以及为目标字段名添加转义符。可选地,上述转义符为单引号。
72.需要说明的是,对于不同类型的数据库,也即不同的目标数据库方言,基于目标数据库方言对访问请求中的标准数据库查询语句进行处理的过程可以有所不同,比如,无需将上述目标字段名中的库名删除,为目标字段名添加转义符即可。当然,对于不同类型的数据库,转义符也可以有所不同,本发明对此不做限制。
73.步骤104、对目标数据库执行定制化查询语句。
74.在一个例子中,若访问目标数据库的主体为spark应用程序,那么,在对目标数据库执行定制化查询语句,得的执行结果之后,还可进一步对执行结果进行格式转换,以将执行结果转换为spark所支持的数据格式,比如dataframe数据格式。
75.本发明实施例提供的技术方案,通过定制化数据库方言,实现了在访问数据库时,可基于数据库相匹配的定制化数据库方言,通过jdbc的方式访问数据库。以hive数据库为例,通过jdbc方式访问hive数据库相较于现有技术而言,无需依赖于配置文件,进一步地,对于同一类型的多个数据库而言,相匹配的定制化数据库方言相同,因此,通过jdbc的方式访问hive数据库并无数量的限制,也即可以通过jdbc的方式同时访问多个hive数据库。
76.此外,作为一个实施例,在上述描述中,若未查找到与目标数据库相匹配的目标数据库方言,则可基于设定数据库方言(也即默认数据库方言)对访问请求中的标准查询语句进行处理,得到符合设定数据库方言的查询语句,对目标数据库执行符合设定数据库方言的查询语句。可以理解的是,该种情况下的执行结果将表示查询失败。
77.作为另一个实施例,在上述描述中,若未查找到与目标数据库相匹配的目标数据库方言,还可直接生成用于指示查询失败的提示消息并输出该提示消息。
78.图2为本技术实施例提供的一种数据库访问装置的示意图。如图2所示,包括:连接建立模块21、方言确定模块22、第一语句处理模块23,以及第一语句执行模块24。
79.其中,连接建立模块21,用于接收对目标数据库的访问请求,建立与所述目标数据库的连接;
80.方言确定模块22,用于确定与所述目标数据库相匹配的目标数据库方言,所述目标数据库方言为定制化数据库方言;
81.第一语句处理模块23,用于基于所述目标数据库方言对所述访问请求中的标准查询语句进行处理,得到符合所述目标数据库方言的定制化查询语句;
82.第一语句执行模块24,用于对所述目标数据库执行所述定制化查询语句。
83.可选地,所述连接建立模块21包括(图2未示出):
84.信息提取子模块,用于从所述访问请求中提取出所述目标数据库的连接信息,所述连接信息至少包括:所述目标数据库的java数据库连接统一资源定位符jdbc url、用户名以及密码;
85.建立子模块,用于根据所述连接信息与已加载的所述目标数据库的,java数据库连接jdbc驱动建立与所述目标数据库的jdbc连接。
86.可选地,所述方言确定模块22包括(图2未示出):
87.url提取子模块,用于从所述访问请求中提取出所述目标数据库的url;
88.url解析子模块,用于对所述目标数据库的url进行解析,得到所述目标数据库所属的目标数据库类型;
89.查找子模块,用于从预设的数据库方言列表中查找与所述目标数据库类型对应的数据库方言,所述数据库方言列表包括数据库类型与数据库方言的对应关系;将查找到的与所述目标数据库类型对应的数据库方言确定为与所述目标数据库相匹配的目标数据库方言。
90.可选地,所述装置还包括(图2未示出):
91.第二语句处理模块,用于若从所述数据库方言列表中未查找到与所述目标数据库协议对应的数据库方言,则基于设定数据库方言对所述访问请求中的标准查询语句进行处理,得到符合所述设定数据库方言的查询语句;
92.第二语句执行模块,用于对所述目标数据库执行所述符合所述设定数据库方言的查询语句,其中,执行结果为执行失败。
93.可选地,所述目标数据库为hive类型的数据库;所述第一语句处理模块23具体用于:
94.从所述标准数据库查询语句中确定待查询的目标字段名;
95.将所述目标字段名中的库名删除,以及为所述目标字段名添加转义符。
96.可选地,所述方法应用于spark程序;所述装置还包括(图2未示出):
97.对所述定制化查询语句的执行结果进行格式转换,以将所述执行结果转换为dataframe数据格式。
98.如图3所示,本技术实施例提供提供了一种电子设备,包括处理器311、通信接口312、存储器313和通信总线314,其中,处理器311,通信接口312,存储器313通过通信总线314完成相互间的通信,
99.存储器313,用于存放计算机程序;
100.在本技术一个实施例中,处理器311,用于执行存储器313上所存放的程序时,实现前述任意一个方法实施例提供的数据库访问方法,包括:
101.接收对目标数据库的访问请求,建立与所述目标数据库的连接;
102.确定与所述目标数据库相匹配的目标数据库方言,所述目标数据库方言为定制化数据库方言;
103.基于所述目标数据库方言对所述访问请求中的标准查询语句进行处理,得到符合所述目标数据库方言的定制化查询语句;
104.对所述目标数据库执行所述定制化查询语句。
105.可选地,所述建立与所述目标数据库的连接,包括:
106.从所述访问请求中提取出所述目标数据库的连接信息,所述连接信息至少包括:所述目标数据库的java数据库连接统一资源定位符jdbc url、用户名以及密码;
107.根据所述连接信息与已加载的所述目标数据库的,java数据库连接jdbc驱动建立与所述目标数据库的jdbc连接。
108.可选地,所述确定与所述目标数据库相匹配的目标数据库方言,包括:
109.从所述访问请求中提取出所述目标数据库的jdbc url;
110.对所述目标数据库的jdbc url进行解析,得到所述目标数据库所支持的目标数据库协议;
111.从预设的数据库方言列表中查找与所述目标数据库协议对应的数据库方言,所述数据库方言列表包括数据库协议与数据库方言的对应关系;
112.将查找到的与所述目标数据库协议对应的数据库方言确定为与所述目标数据库相匹配的目标数据库方言。
113.可选地,所述目标数据库为hive数据库;所述基于所述目标数据库方言对所述访问请求中的标准数据库查询语句进行处理,得到符合所述目标数据库方言的目标数据库查询语句,包括:
114.从所述标准数据库查询语句中确定待查询的目标字段名;
115.将所述目标字段名中的库名删除,以及为所述目标字段名添加转义符。
116.可选地,所述方法应用于spark程序;所述方法还包括:
117.对所述定制化查询语句的执行结果进行格式转换,以将所述执行结果转换为dataframe数据格式。
118.本技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述任意一个方法实施例提供的数据库访问方法的步骤。
119.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
120.以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1