一种表连接查询方法、装置及存储介质制造方法及图纸

技术编号:29489329 阅读:14 留言:0更新日期:2021-07-30 19:00
本公开提供了一种表连接查询方法、装置及存储介质,用于解决HBase的Join查询效率的技术问题。本公开提供的方案,在大小表Join连接查询中,以小表的查询结果作为大表的过滤条件,构造大表的查询关系表达式,再利用HBase二级索引查询大表结果,提升了大小表Join查询的速度,通过本公开,可以显著提升HBase大小表Join查询的执行速度。

【技术实现步骤摘要】
一种表连接查询方法、装置及存储介质
本公开涉及数据库及大数据
,尤其涉及一种表连接查询方法、装置及存储介质。
技术介绍
HBase是一种结构化数据的分布式存储系统,是ApacheHadoop的数据库,其建立在Hadoop分布式文件系统(HadoopDistributionFileSystem,HDFS)之上,被设计用来提供高可靠性、高性能、列存储、可伸缩、多版本的NoSql的分布式数据存储系统,实现对大型数据的实时、随机读写请求,适合于存储非结构化的数据。原生的HBase虽然适合存储海量的数据,但对于两表的jion即连接查询问题却没有提供很好的解决方案。ApacheHive可以支持传统关系型数据库的主流SQL语言,但其查询依赖于MapReduce计算框架,数据存取时的磁盘I/O时间消耗大,即使一张数据量大的表与一张数据量很小的表进行Join操作,查询速度也很慢,而且大多数业务场景是根据一张小表的数据从大表中过滤数据,因此,HBase的大小表Join的效率不高。
技术实现思路
有鉴于此,本公开提供一种表连接查询方法、装置及存储介质,用于解决HBase的Join查询效率的技术问题。图1为本公开实施例提供的一种表连接查询方法的步骤流程图,包括:步骤101.解析表连接Join查询语句,得到Join查询语句中两个连接表的关系表达式;步骤102.根据预设的大小表区分规则将参加Join查询的连接表区分为大表和小表;步骤103.从小表的关系表达式中获取小表的表名、查询的字段以及过滤条件并下发到支持二级索引的HBase中间件,通过HBase中间件查询小表获得小表的查询结果数据即第一结果数据;所述第一结果数据中包括小表的查询列名和列值;当所述小表有过滤条件时,所述小表的过滤条件中的字段列为索引列;步骤104.使用小表的查询结果数据构造过滤条件,并结合大表的关系表达式构造获取大表数据的第三关系表达式;步骤105.从所述第三关系表达式中获取大表的表名、查询的字段和过滤条件并下发到支持二级索引的HBase中间件,通过HBase中间件查询大表获得大表的查询结果数据即第二结果数据;所述第二结果数据中包括大表的查询列名和列值;所述大表的Join列为索引列;步骤106.从所述第一结果数据和所述第二结果数据中分别获取Join列的值相等的记录,将获取的记录拼接后得到Join查询结果。进一步地,所述预设的大小表区分规则为:当两表都带有过滤条件或都不带过滤条件时,根据表存储文件大小区分大小表,表存储文件容量大的为大表,存储文件容量小的为小表;当只有其中一张表带有过滤条件时,将带过滤条件的表作为小表,将不带过滤条件的表作为大表。进一步地,所述通过HBase中间件查询小表获得小表的查询结果数据即第一结果数据时,采用分批获取方式,即每次从小表中获取第一预设数量的查询结果数据作为第一结果数据;相应地,所述通过HBase中间件查询大表获得大表的查询结果数据即第二结果数据时,也采用分批获取方式,即每次从大表中获取第二预设数量的查询结果数据作为第二结果数据;在将所述第一结果数据和所述第二结果数据Join列的值相等的记录拼接后存入结果集合中,在通过第三关系表达式完成一批大表数据的获取后,判断是否获取完符合第三关系表达式的大表数据,如果没有,则再次获取下一批第二结果数据并再次与第一结果数据拼接后存入结果集合;如果已获取完大表数据,则继续判断是否获取完符合小表关系表达式的小表数据,如果已获取完小表数据,则将所述结果集合作为Join查询结果输出;如果未获取完小表数据,则继续获取下一批小表数据,根据新一批的小表数据再次构造新的第三关系表达式,再次执行大表数据的查询及后续拼接处理步骤。进一步地,当小表中的总记录数小于预设的门限时,一次性查询出所有符合小表的关系表达式的小表记录作为第一结果数据并将第一结果数据缓存在内存中;基于第一结果数据构造过滤条件,并结合大表的关系表达式构造所述第三关系表达式后,采用一次性或分批获取的方式,通过HBase中间件获取符合第三关系表达式的大表数据,将分批获取的第二结果数据分别于第一结果数据拼接输出Join查询结果。进一步地,当所述Join查询中包括返回记录条数限制时,在完成所述拼接处理步骤后,还包括判断记录条数是否达到返回记录条数的限制,如果达到则直接输出Join查询结果,如果未达到则继续执行。图2为本公开实施例提供的一种表连接查询装置结构示意图,该装置200中的各功能模块可以采用软件、硬件或软硬件相结合的方式实现。当多个硬件设备共同实施本公开的技术方案时,由于各硬件设备之间相互协作的目的是共同实现本公开目的,一方的动作和处理结果确定了另一方的动作执行的时机及可能获得的结果,因此,可视为各执行主体之间具有相互协作关系,各执行主体之间具有相互指挥和控制关系。该装置200包括:解析模块201,用于解析表连接Join查询语句,得到Join查询语句中两个连接表的关系表达式;大小表区分模块202,用于根据预设的大小表区分规则将参加Join查询的连接表区分为大表和小表;所述预设的大小表区分规则为:当两表都带有过滤条件或都不带过滤条件时,根据表存储文件大小区分大小表,表存储文件容量大的为大表,存储文件容量小的为小表;当只有其中一张表带有过滤条件时,将带过滤条件的表作为小表,将不带过滤条件的表作为大表;小表数据获取模块203,用于从小表的关系表达式中获取小表的表名、查询的字段以及过滤条件并下发到支持二级索引的HBase中间件,通过HBase中间件查询小表获得小表的查询结果数据即第一结果数据;所述第一结果数据中包括小表的查询列名和列值;当所述小表有过滤条件时,所述小表的过滤条件中的字段列为索引列;关系表达式构造模块204,用于使用小表的查询结果数据构造过滤条件,并结合大表的关系表达式构造获取大表数据的第三关系表达式;大表数据获取模块205,用于从所述第三关系表达式中获取大表的表名、查询的字段和过滤条件并下发到支持二级索引的HBase中间件,通过HBase中间件查询大表获得大表的查询结果数据即第二结果数据;所述第二结果数据中包括大表的查询列名和列值;所述大表的Join列为索引列;拼接输出模块206,用于从所述第一结果数据和所述第二结果数据中分别获取Join列的值相等的记录,将获取的记录拼接后输出Join查询结果。进一步地,小表数据获取模块203采用分批获取方式,即每次从小表中获取第一预设数量的查询结果数据作为第一结果数据;大表数据获取模块205采用分批获取方式,即每次从大表中获取第二预设数量的查询结果数据作为第二结果数据;拼接输出模块206在将所述第一结果数据和所述第二结果数据Join列的值相等的记录拼接后存入结果集合中,然后判断是否获取完符合第三关系表达式的大表数据,如果没有,则指令大表数据获取模块205再次获取下一批第二结果数据并再次与第一结果数据执行拼接处理;如果已获取完大表数据,则继本文档来自技高网...

【技术保护点】
1.一种表连接查询方法,其特征在于,所述方法包括:/n解析表连接Join查询语句,得到Join查询语句中两个连接表的关系表达式;/n根据预设的大小表区分规则将参加Join查询的连接表区分为大表和小表;/n从小表的关系表达式中获取小表的表名、查询的字段以及过滤条件并下发到支持二级索引的HBase中间件,通过HBase中间件查询小表获得小表的查询结果数据即第一结果数据;所述第一结果数据中包括小表的查询列名和列值;当所述小表有过滤条件时,所述小表的过滤条件中的字段列为索引列;/n使用小表的查询结果数据构造过滤条件,并结合大表的关系表达式构造获取大表数据的第三关系表达式;/n从所述第三关系表达式中获取大表的表名、查询的字段和过滤条件并下发到支持二级索引的HBase中间件,通过HBase中间件查询大表获得大表的查询结果数据即第二结果数据;所述第二结果数据中包括大表的查询列名和列值;所述大表的Join列为索引列;/n从所述第一结果数据和所述第二结果数据中分别获取Join列的值相等的记录,将获取的记录拼接后得到Join查询结果。/n

【技术特征摘要】
1.一种表连接查询方法,其特征在于,所述方法包括:
解析表连接Join查询语句,得到Join查询语句中两个连接表的关系表达式;
根据预设的大小表区分规则将参加Join查询的连接表区分为大表和小表;
从小表的关系表达式中获取小表的表名、查询的字段以及过滤条件并下发到支持二级索引的HBase中间件,通过HBase中间件查询小表获得小表的查询结果数据即第一结果数据;所述第一结果数据中包括小表的查询列名和列值;当所述小表有过滤条件时,所述小表的过滤条件中的字段列为索引列;
使用小表的查询结果数据构造过滤条件,并结合大表的关系表达式构造获取大表数据的第三关系表达式;
从所述第三关系表达式中获取大表的表名、查询的字段和过滤条件并下发到支持二级索引的HBase中间件,通过HBase中间件查询大表获得大表的查询结果数据即第二结果数据;所述第二结果数据中包括大表的查询列名和列值;所述大表的Join列为索引列;
从所述第一结果数据和所述第二结果数据中分别获取Join列的值相等的记录,将获取的记录拼接后得到Join查询结果。


2.根据权利要求1所述的方法,其特征在于,
所述预设的大小表区分规则为:当两表都带有过滤条件或都不带过滤条件时,根据表存储文件大小区分大小表,表存储文件容量大的为大表,存储文件容量小的为小表;当只有其中一张表带有过滤条件时,将带过滤条件的表作为小表,将不带过滤条件的表作为大表。


3.根据权利要求1所述的方法,其特征在于,所述通过HBase中间件查询小表获得小表的查询结果数据即第一结果数据时,采用分批获取方式,即每次从小表中获取第一预设数量的查询结果数据作为第一结果数据;
相应地,所述通过HBase中间件查询大表获得大表的查询结果数据即第二结果数据时,也采用分批获取方式,即每次从大表中获取第二预设数量的查询结果数据作为第二结果数据;
在将所述第一结果数据和所述第二结果数据Join列的值相等的记录拼接后存入结果集合中,在通过第三关系表达式完成一批大表数据的获取后,判断是否获取完符合第三关系表达式的大表数据,如果没有,则再次获取下一批第二结果数据并再次与第一结果数据拼接后存入结果集合;如果已获取完大表数据,则继续判断是否获取完符合小表关系表达式的小表数据,如果已获取完小表数据,则将所述结果集合作为Join查询结果输出;如果未获取完小表数据,则继续获取下一批小表数据,根据新一批的小表数据再次构造新的第三关系表达式,再次执行大表数据的查询及后续拼接处理步骤。


4.根据权利要求3所述的方法,其特征在于,
当小表中的总记录数小于预设的门限时,一次性查询出所有符合小表的关系表达式的小表记录作为第一结果数据并将第一结果数据缓存在内存中;
基于第一结果数据构造过滤条件,并结合大表的关系表达式构造所述第三关系表达式后,采用一次性或分批获取的方式,通过HBase中间件获取符合第三关系表达式的大表数据,将分批获取的第二结果数据分别于第一结果数据拼接输出Join查询结果。


5.根据权利要求1所述的方法,其特征在于,
当所述Join查询中包括返回记录条数限制时,在完成所述拼接处理步骤后,还包括判断记录条数是否达到返回记录条数的限制,如果达到则直接输出Join查询结果,如果未达到则继续执行。


6.一种表连接查询装置,其特征在于,该装置包括:
解析模块,用于解析表连接Join查询语句,得到Join查询语句中两个连接...

【专利技术属性】
技术研发人员:吕征
申请(专利权)人:新华三大数据技术有限公司
类型:发明
国别省市:河南;41

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1