一种通用的两个数据库联合查询方法与流程

文档序号:11950898阅读:4623来源:国知局

本发明涉及计算机信息技术领域,具体涉及一种通用的两个数据库联合查询方法。



背景技术:

随着大规模互联网应用的普及,网络信息数据的海量剧增,大数据已然对国家治理、企业决策、个人生活都产生了巨大的影响。在大数据的背景时代下,分布式文件系统、分布式数据库等都是适用于大数据的技术。如今为满足人们的查询需要,实现多个数据库之间联合查询是很有必要的。

目前,对于两种数据库做联合查询主要是Hive与HBase表联合查询,如专利号为201410000720.8的中国发明专利公开了一种HBase表联合查询优化的方法。该方法为:首先根据HBase中表的格式创建相应的Hive外部表;Hive外部表创建成功后,在Hive表和HBase表之间建立关联关系,即Hive表的列和列类型与HBase表的列族及列限定词建立关联,并通过两者本身对外的API接口相互进行通信;进入查询步骤,根据Hive中自带的HQL语句将Hive中的两个表格按照条件联合查询,用底层的MapReduce处理联合查询任务,查询出满足条件的记录;将查询结果存放在HBase表中。

上述方法的不足之处在于,这种Hive与HBase表联合查询的方法不通用,其要求两数据库在同一个网段,且基于两者本身对外的API接口相互进行通信,对于那些不在同一个网段,没有此类接口,或接口使用方式不同的数据库,不能复用该方法。



技术实现要素:

为克服上述不足,本发明提供一种通用的两个数据库联合查询方法,具有通用性,尤其是两数据库网不通的情况,通过把查询结果在其中一个数据库中建表,给用户拿到想要的数据结果。

为解决上述技术问题,本发明采用如下技术方案:

一种通用的两个数据库(A,B)联合查询方法,步骤包括:

1)从A库的对应表中读出数据生成数据文件,基于该数据文件生成SQL文件,并发送到B库节点;

2)通过B库提供的接口建立临时表,并把上述数据文件导入该表中,替换SQL中的表名;

3)在B库中执行替换好的SQL,把结果生成数据文件,并发回A库节点;

4)在A库中建立临时表,把步骤3)的数据文件导入该表中,并把库名和表名返回给用户。

进一步地,所述数据文件为标准CSV格式文件。

进一步地,通过HCatalog从A库的对应表中读出数据。

进一步地,通过隔离机实现A库与B库之间的数据传送。

进一步地,如果B库有多个临时表要建立,可通过重复执行步骤2),待全部临时表建立完毕后再执行步骤3)。

进一步地,所述SQL文件内容包括用户填入的SQL、数据文件的切分规则、数据文件的表格式、数据文件和SQL中表的对应关系。

进一步地,在B库通过SQL文件中数据文件的表格式建立临时表。

进一步地,将步骤3)中所述数据文件先上传到HDFS,再将HDFS上的数据文件导入到步骤4)中的临时表中。

进一步地,所述步骤4)中通过HCatalog以用户配置的结果表的表格式建立临时表。

进一步地,每生成一个数据文件,都会生成对应的.ok文件。

本发明的有益效果是,本发明提供的这种两个数据库之间的联合查询方法具有通用性,不受限于不同的网段和接口,通过把查询结果在其中一个数据库中建表,给用户拿到想要的数据结果。其中,通过隔离机传输数据文件,保证了两个数据库之间的独立性;使用标准CSV格式的文件,保证了读出和写入数据的格式一致性;通过建立临时表,替换SQL来进行查询,利用了B库的高可用性。

附图说明

图1为实施例中一种通用的两个数据库联合查询方法的流程图。

具体实施方式

为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。

本实施例提供一种通用的两个数据库联合查询方法,这两个数据库分别为Hive、神舟通用数据库,如图1所示,具体流程如下:

以Hive中student表与神舟通用数据库中student_info表做联合查询为例。student表中有两列,分别为h_s_name,h_s_id;student_info表中有三列,分别为st_s_id,st_s_mentor,st_s_gpa。

用户从页面上输入SQL:select a.h_s_name,b.st_s_mentor,b.st_s_gpa form student a,student_info b where a.h_s_id=b.st_s_id。

程序根据传入的Hive表名,此例中即为student,通过HCatalog读出数据,生成一个数据文件。文件命名分为三部分:第一部分为“DATA_”;第二部分为由Java UUID生成的32位字符串;第三部分为“_inportX”,X替换文件编号,程序支持一个或多个Hive表做联合查询。

程序生成SQL文件,此文件中包含用户填入的SQL、数据文件的切分规则、数据文件的表格式、数据文件和SQL中表的对应关系。SQL文件的命名分为两部分:第一部分“SQL_”;第二部分第二步生成的UUID,以此保证数据文件和SQL文件的关联关系。

上述两文件的生成目录为隔离机监视目录(如:A_to_B)。文件生成结束后,生成对应文件的.ok文件。隔离机通过轮询该目录,当该目录下有文件,并有对应的.ok文件(如:文件test.txt和test.txt.ok),则把这两个文件发送到对端的同名目录下。

在对端的同名目录(A_to_B)下,由监视程序一直轮询该目录。当收到数据文件和SQL文件,并且文件的数量正确,则开始连接神舟通用数据库。

建立连接成功后,通过SQL文件中数据文件的表格式建立临时表,并把对应的数据导入临时表中,替换SQL中的对应表名为临时表名。若有多个表则重复该步,全部临时表建立完毕后,执行替换过表名的SQL语句。

把查询的结果生成数据文件,五十万条数据写一个文件,命名分为三部分:第一部分“Result_”,第二部分为第二步生成的UUID,第三部分为“partX”,X替换文件编号。文件的生成目录(如:B_to_A)由隔离机监控。每生成一个数据文件,都会生成对应的.ok文件。查询结束后,会生成一个以“partNums”结尾的数据文件,该数据文件中保存此次查询的结果文件数量。关闭与神舟通用数据库的连接。

程序会一直轮询本端的同名目录(B_to_A),当接收到以“partNums”结尾的数据文件后,通过解析,拿到数据文件数量,确定查询是否已经结束并把对应的数据文件上传到HDFS。

通过HCatalog,以用户配置的结果表的表格式建表,并把HDFS上的数据文件导入结果表中,返回库名和表名。

由上述实施例可知,本发明提供的这种两个数据库之间的联合查询方法具有通用性,不受限于不同的网段和接口,通过把查询结果在其中一个数据库中建表,给用户拿到想要的数据结果。其中,通过隔离机传输数据文件,保证了两个数据库之间的独立性;使用标准CSV格式的文件,保证了读出和写入数据的格式一致性;通过建立临时表,替换SQL来进行查询,利用了B库的高可用性。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1