基于多个数据库的数据查询方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,尤其涉及一种基于多个数据库的数据查询方法及装置。
【背景技术】
[0002]大数据(Big Data)是指无法用现有的软件工具提取、存储、搜索、共享、分析和处理的海量的、复杂的数据集合,可以包括多个数据库,例如Hadoop、内存数据库、关系数据库等等。目前,一般采用数据共享平台或者数据开放平台对外开放超文本传送协议(Hypertext transfer protocol,HTTP)应用程序编程接口(Applicat1n ProgrammingInterface, API),从而实现用户查询多个数据库中的数据。
[0003]通常,每个API接口都对应特定参数,API接口接收到用户的请求后,根据该请求中携带的特定参数进行数据查询,将查询到的数据返回给用户,由于一个API只能提供一部分特定需求,若用户需要的数据存在于多个数据库中,就需要组合众多API接口联合实现数据查询。例如,公司的人力资源主管要查询某个员工的个人信息,个人信息包括工作简历、发表论文等等,若工作简历、发表论文等等信息保存在不同的数据库中,那么该人力资源主管只能分别通过这些数据库对应的API接口才能获取到该员工的个人信息。可见,若用户需要的数据存在于多个数据库中,用户需要多次请求才能够获取到需要的数据,用户的操作步骤非常繁琐,查询数据的效率也非常低。
【发明内容】
[0004]本发明实施例提供一种基于多个数据库的数据查询,用以解决现有技术中存在的用户的操作步骤非常繁琐,查询数据的效率也非常低的问题。
[0005]根据本发明实施例例,提供一种基于多个数据库的数据查询方法,包括:
[0006]解析用户发送的结构化查询语言SQL语句,得到所述SQL语句中包括的关键表,所述SQL语句用于请求从所述多个数据库中查询所述用户需要的数据;
[0007]对所述用户进行鉴权;
[0008]若所述用户通过鉴权,确定每个所述关键表所在的数据库;
[0009]分别从每个所述关键表所在的数据库中获取所述SQL语句请求的数据;
[0010]合并获取的数据后发送给所述用户。
[0011]具体的,解析用户发送的SQL语句,得到所述SQL语句中包括的关键表,具体包括:
[0012]提取所述SQL语句中包括的关键字;
[0013]判断所述关键字的拼写以及所述关键字之间的逻辑关系是否正确;
[0014]若所述关键字的拼写以及所述关键字之间的逻辑关系正确,则根据所述关键字和对应的关键元素建立所述SQL语句对应的语法树,获取所述语法树中的关键表。
[0015]可选的,所述方法还包括:
[0016]按照SQL语句的标准格式调整所述SQL语句;
[0017]将调整后的所述SQL语句发送给所述用户。
[0018]具体的,对所述用户进行鉴权,具体包括:
[0019]获取用户与关键表的对应关系,若所述对应关系中对应保存有所述用户和每个所述关键表,则确定所述用户通过鉴权;或者,
[0020]获取预先设置的白名单,若所述白名单中保存有所述用户,则确定所述用户通过鉴权。
[0021]具体的,确定每个所述关键表所在的数据库,具体包括:
[0022]获取预先保存的关键表描述信息;
[0023]从所述关键表描述信息中获取每个所述关键表所在的数据库;
[0024]分别从每个所述关键表所在的数据库中获取所述SQL语句请求的数据,具体包括:
[0025]确定每个所述关键表所在的数据库的类型;
[0026]将所述SQL语句翻译成每个所述关键表所在的数据库的类型对应的标准语句;
[0027]使用翻译后的标准语句分别从对应的数据库中获取所述SQL语句请求的数据。
[0028]具体的,合并获取的数据后发送给所述用户,具体包括:
[0029]缓存获取的所述SQL语句请求的数据;
[0030]采用流计算方式合并缓存的数据;
[0031]将合并后的数据发送给所述用户。
[0032]根据本发明实施例,还提供一种基于多个数据库的数据查询装置,包括:
[0033]解析单元,用于解析用户发送的结构化查询语言SQL语句,得到所述SQL语句中包括的关键表,所述SQL语句用于请求从所述多个数据库中查询所述用户需要的数据;
[0034]鉴权单元,用于对所述用户进行鉴权;
[0035]确定单元,用于若所述用户通过鉴权,确定每个所述关键表所在的数据库;
[0036]获取单元,用于分别从每个所述关键表所在的数据库中获取所述SQL语句请求的数据;
[0037]发送单元,用于合并获取的数据后发送给所述用户。
[0038]具体的,所述解析单元,具体用于:
[0039]提取所述SQL语句中包括的关键字;
[0040]判断所述关键字的拼写以及所述关键字之间的逻辑关系是否正确;
[0041]若所述关键字的拼写以及所述关键字之间的逻辑关系正确,则根据所述关键字和对应的关键元素建立所述SQL语句对应的语法树,获取所述语法树中的关键表。
[0042]具体的,所述鉴权单元,具体用于:
[0043]获取用户与关键表的对应关系,若所述对应关系中对应保存有所述用户和每个所述关键表,则确定所述用户通过鉴权;或者,
[0044]获取预先设置的白名单,若所述白名单中保存有所述用户,则确定所述用户通过鉴权。
[0045]具体的,所述确定单元,具体用于:
[0046]获取预先保存的关键表描述信息;
[0047]从所述关键表描述信息中获取每个所述关键表所在的数据库;
[0048]所述获取单元,具体用于:
[0049]确定每个所述关键表所在的数据库的类型;
[0050]将所述SQL语句翻译成每个所述关键表所在的数据库的类型对应的标准语句;
[0051]使用翻译后的标准语句分别从对应的数据库中获取所述SQL语句请求的数据。
[0052]本发明有益效果如下:
[0053]本发明实施例提供的基于多个数据库的数据查询方法及装置,通过解析用户发送的SQL语句,得到SQL语句中包括的关键表,SQL语句用于请求从多个数据库中查询用户需要的数据;对用户进行鉴权;若用户通过鉴权,确定每个关键表所在的数据库;分别从每个关键表所在的数据库中获取SQL语句请求的数据;合并获取的数据后发送给用户。可见,用户只需要提供用于查询数据的SQL语句,该方法就可以直接根据该SQL语句从多个数据库中查询用户需要的数据,无需用户依次从各个数据库中进行获取,相对于现有技术中用户需要多次请求才能够获取到需要的数据的方式,简化了用户操作步骤,提高了查询数据的效率。
【附图说明】
[0054]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0055]图1为本发明实施例一种基于多个数据库的数据查询方法的流程示意图;
[0056]图2为本发明实施例一种得到SQL语句中包括的关键表的方法流程图;
[0057]图3为本发明实施例一种基于多个数据库的数据查询装置的结构示意图;
[0058]图4为本发明实施例另一种基于多个数据库的数据查询装置的结构示意图。
【具体实施方式】
[0059]针对现有技术中存在的用户的操作步骤非常繁琐,查询数据的效率也非常低的问题,本发明实施例提供一种基于多个数据库的数据查询方法,该方法的执行主体可以是服务器,流程如图1所示,执行步骤如下:
[0060]Sll:解析用户发送的结构化查询语言(Structured Query Language,SQL)语句,得到SQL语句中包括的关键表,SQL语句用于请求从多个数据库中查询用户需要的数据。[0061 ] 若用户需要从多个数据库中查询需要的数据,可以首先构建SQL语句,SQL语句有固定的格式,包括多个预先设定好的关键字,用户可以在每个关键字后填写关键元素从而在多个数据库中查询需要的信息,关键元素可以包括关键表、字段、过滤条件等等。
[0062]SQL语句可以是单一的SQL语句,也可以是嵌套式的SQL语句,下面对这两种SQL语句的格式分别进行说明。
[0063]单一的SQL语句可以为:
[0064]Select a,b,C,d
[0065]From tl,t2,t3
[0066]Where tl.1d = t3.1d ;