基于Hive实现MongoDB的联表查询的方法及系统与流程

文档序号:24181655发布日期:2021-03-09 12:13阅读:74来源:国知局
基于hive实现mongodb的联表查询的方法及系统
技术领域
:1.本发明涉及数据处理
技术领域
:,具体的,本发明涉及基于hive实现mongodb的联表查询的方法及系统。
背景技术
::2.在数据量巨大化的背景下,mongodb凭借其低消耗、高性能、存储维护便捷的优点已经成为了数据存储的一种主流方式。面对数据的多样化,用户可以选择将所有的字段信息存放在同一张表中,但是这样会导致单表过大,查询效率降低。将不同的数据存放在不同的表中,便于数据的管理,但是这样也会面临一个问题,如果要查询多张表的数据,需要用到联表查询,现有技术中只支持$lookup查询,这种关联查询会把符合条件的inventory文档整体内嵌到聚合框架新生成的文档中,并且新key统一命名为inventory_docs,如果原表中存在key值为空值或者是不存在时,就会导致本次查询失败。特别是当需要对数据做跨库联表查询时,mongodb无法满足此需求,也正是因此,在用户需要关联查询的时候,往往会查询出一个字段值,然后再拿结果当作查询条件去进行反查以得到目标字段的值。在需要查询数据较多的情况下,这种多次查询会降低查询的效率。随着大数据时代的到来,如何快速有效的在海量数据中查询到所需的数据,成为当下急需解决的问题。技术实现要素:3.为了克服现有技术的不足,本发明提供了基于hive实现mongodb的联表查询的方法及系统,以解决上述的技术问题。4.本发明解决其技术问题所采用的技术方法是:基于hive实现mongodb的联表查询的方法,其改进之处在于:包括s1、目标字段的导出,通过mongoexport命令将mongodb多张表中的不同的目标字段以json格式导出;s2、hdfs中数据的导入,通过sqoop将json格式的数据导入到hdfs;s3、hive表中数据的插入,hdfs对数据进行格式校验及转换后,将数据插入到hive表;s4、在hive表上对数据进行联表查询。5.在上述方法中,s1中的目标字段为不同表、不同库或不同服务器上的不同数据库的目标字段。6.在上述方法中,s2包括以下的步骤:7.s21、sqoop将json数据转换成json文档;8.s22、将数据导入到hdfs。9.在上述方法中,s3包括以下的步骤:10.s31、通过hive自身的数据加载命令,将hdfs上的json文档数据导入到json格式的hive表格中,每个字段存储的是json数据;11.s32、利用hive的类sql和正则表达式,将json格式的hive表格中的数据读取转换成oracle格式hive表所需要的数据;12.s33、将数据插入到oracle格式的hive表。13.本发明还提供了基于hive实现mongodb的联表查询的系统,其改进之处在于:包括数据导出单元、数据导入单元、数据插入单元和联表查询单元,其中,数据导出单元,用于通过mongoexport命令将mongodb多张表中的不同的目标字段以json格式导出;数据导入单元,与数据导出单元连接,用于接收数据导出单元导出的json格式的数据,通过sqoop将json格式的数据导入到hdfs;数据插入单元,与数据导入单元连接,用于接收数据导入单元导入的数据,通过hdfs对数据进行格式校验及转换后,将数据插入到hive表;联表查询单元,与数据插入单元连接,接收数据插入单元插入的数据,在hive表上对数据进行联表查询。14.在上述系统中,目标字段为不同表、不同库或不同服务器上的不同数据库的目标字段。15.在上述系统中,数据导入单元,包括数据转换模块和第一数据导入模块,其中,16.数据转换模块,与数据导出单元连接,接收数据导出单元导出的json格式的数据,通过sqoop将json数据转换成json文档;17.第一数据导入模块,与数据转换模块连接,接收数据转换模块转换的json文档,将数据导入到hdfs。18.在上述系统中,数据插入单元,包括第二数据导入模块、读取转换模块和插入模块,其中,19.第二数据导入模块,与第一数据导入模块连接,接收第一数据导入模块导入到hdfs上的数据,将hdfs上的json文档数据导入到json格式的hive表格中;20.读取转换模块,与第二数据导入模块连接,接收第二数据导入模块导入的数据,将json格式的hive表格中的数据读取转换成oracle格式hive表所需要的数据;21.插入模块,与读取转换模块连接,接收读取转换模块转换的用于oracle格式hive表所需要的数据,将数据插入到oracle格式的hive表。22.本发明的有益效果是:通过mongodb的导出命令将不同表、不同库或不同服务器上的不同数据库的目标字段以json格式导出,汇总到同一个hive库,在hive上用户能根据需求,对数据进行联表查询,解决了空值的隐患,并且实现了跨库联表查询,在关联关系复杂、数据量大的情况下能提升查询的效率,减少关联查询的局限性。附图说明23.附图1为本发明的基于hive实现mongodb的联表查询的方法的流程图24.附图2为本发明的基于hive实现mongodb的联表查询的系统的逻辑示意图具体实施方式25.下面结合附图和实施例对本发明进一步说明。26.以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整地描述,以充分地理解本发明的目的、特征和效果。显然,所描述的实施例只是本发明的一部分实施例,而不是全部实施例,基于本发明的实施例,本领域的技术人员在不付出创造性劳动的前提下所获得的其他实施例,均属于本发明保护的范围。另外,专利中涉及到的所有联接/连接关系,并非单指构件直接相接,而是指可根据具体实施情况,通过添加或减少联接辅件,来组成更优的联接结构。本发明创造中的各个技术特征,在不互相矛盾冲突的前提下可以交互组合。27.参照图1,本发明的基于hive实现mongodb的联表查询的方法包括:28.s1、通过mongoexport命令将mongodb多张表中的不同的目标字段以json格式导出。mongodb是一种数据库,mongoexport是mongodb提供的工具,可以实现将库中的数据以json或cvs的格式输出到文件中。进一步的,目标字段可以是不同表、不同库甚至是不同服务器上的不同数据库的目标字段,实现了将不同表、不同库甚至是不同服务器上的不同数据库的目标字段以json格式导出。29.s2、通过sqoop将json格式的数据导入到hdfs。sqoop是一个用来将hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库中的数据导入到hadoop的hdfs中,hdfs即hadoop分布式文件系统(hadoopdistributedfilesystem)。具体的,sqoop将json数据转换成json文档;然后将数据导入到hdfs,以备下一步中对数据的格式校验及转换。30.s3、hdfs对数据进行格式校验及转换后,将数据插入到hive表。hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,提供类sql查询功能。具体的,将json格式的数据导入到hdfs后,通过hive自身的数据加载命令(loaddatalocalinpath'/home/bigdata/etl/temp/data_$name.json'overwriteintotablestg.${hive_stg_table};),将hdfs上的json文档导入到json格式的hive表格中,每个字段存储的是json数据。读取json格式的hive表格中的数据,利用hive的类sql和正则表达式,将json格式的数据读取转换成oracle格式hive表所需要的数据,并插入到oracle格式的hive表中,oracle是关系数据库管理系统。至此,实现将不同表、不同库甚至是不同服务器上的不同数据库的目标字段以json格式导出后,然后汇总至同一个hive库。31.s4、在hive表上对数据进行联表查询。在hive上用户能根据需求,对数据进行联表查询,得到相应的结果,解决了现有技术中进行$lookup查询时key值为空值或者是不存在时的隐患,并且实现了跨库联表查询。32.参照图2,与上述方法相对应,本发明还提供了基于hive实现mongodb的联表查询的系统,包括:33.数据导出单元,用于通过mongoexport命令将mongodb多张表中的不同的目标字段以json格式导出。实现将不同表、不同库或不同服务器上的不同数据库的目标字段以json格式导出;34.数据导入单元,数据导入单元与数据导出单元连接,用于接收数据导出单元导出的数据,通过sqoop将json格式的数据导入到hdfs。具体的,数据导入单元包括数据转换模块和第一数据导入模块,所述数据转换模块与所述数据导出单元连接,接收数据导出单元导出的json格式的数据,通过sqoop将json数据转换成json文档,所述第一数据导入模块与所述数据转换模块连接,接收数据转换模块转换的json文档,将数据导入到hdfs;35.数据插入单元,用于通过hdfs对数据进行格式校验及转换后,将数据插入到hive表。具体的,数据插入单元包括第二数据导入模块、读取转换模块和插入模块,所述第二数据导入模块与所述第一数据导入模块连接,接收第一数据导入模块导入到hdfs上的数据,将hdfs上的json文档数据导入到json格式的hive表格中;所述读取转换模块与所述第二数据导入模块连接,接收第二数据导入模块导入的数据,将json格式的hive表格中的数据读取转换成oracle格式hive表所需要的数据;所述插入模块与所述读取转换模块连接,接收读取转换模块转换的用于oracle格式hive表所需要的数据,将数据插入到oracle格式的hive表。实现将不同表、不同库甚至是不同服务器上的不同数据库的目标字段以json格式导出后的数据,汇总至同一个hive库;36.联表查询单元,用于在hive表上对数据进行联表查询。用户能根据需求,在联表查询单元进行联表查询,得到相应的结果,解决了现有技术中进行$lookup查询时key值为空值或者是不存在时的隐患,并且实现了跨库联表查询。37.本发明通过mongodb的导出命令将不同表、不同库或不同服务器上的不同数据库的目标字段以json格式导出,汇总到同一个hive库,在hive上用户能根据需求,对数据进行联表查询,解决了空值的隐患,并且实现了跨库联表查询,在关联关系复杂、数据量大的情况下能提升查询的效率,减少关联查询的局限性。38.以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1