一种流处理方式支持动态读取hive表数据的方法及装置制造方法及图纸

技术编号:31752661 阅读:18 留言:0更新日期:2022-01-05 16:34
本发明专利技术涉及计算机技术领域,提供了一种流处理方式支持动态读取hive表数据的方法及装置,方法包括:设置patitionMap和partitionValueList,设置第一轮读取中的时间戳为预设初始值;若patitionMap中能够找到partitionValueList中待读取的分区名,则判定相应待读取的分区为老分区;若老分区中待读取文件的文件修改时间大于patitionMap中相应分区中已经读取过的最大的文件修改时间,且老分区中待读取文件的文件修改时间大于当前轮时间戳,则判定老分区中待读取文件为老分区新文件,按partitionValueList中相应待读取文件的路径进行老分区新文件的读取;本发明专利技术提供的流处理方式支持动态读取hive表数据的方法可以在流机制上执行hive的数据源,使流处理引擎能够对hive中的老分区新文件进行动态读取。够对hive中的老分区新文件进行动态读取。够对hive中的老分区新文件进行动态读取。

【技术实现步骤摘要】
一种流处理方式支持动态读取hive表数据的方法及装置


[0001]本专利技术涉及计算机
,尤其涉及一种流处理方式支持动态读取hive表数据的方法及装置。

技术介绍

[0002]随着科技的发展,很多场景应用的数据是无限的,批处理已经不能满足这些场景的需求,随着市场的需求增加,流处理引擎日渐火爆。流处理引擎,用于实时计算,来一条数据就处理一条,不用像批处理一样,得等待一批数据到达后再进行处理,流处理引擎进行实时计算的优势使得流处理引擎在网络监控和电子商务等应用广泛。
[0003]hive是基于hadoop的数据仓分析处理工具,并且可以用sql语句进行查询;因为hive的底层是封装流hadoop,hive的数据都存储在hadoop文件中,所以有很好的批处理的能力,但是hive对于流处理并不支持,对于不同的分区的数据,每个分区为一个文件夹,文件夹下的文件即为存储的数据;而在hive中,对于老分区中新加入的数据,会在hdfs中自动新建文件,不能在已经存在的文件下添加数据,因此流处理引擎对于hive表的老分区中新添加的文件不能读取出来,即不支持动态读取hive中的老分区新文件。
[0004]当一次性加入大量的新分区文件时,由于流处理引擎不能一次读出所有的新分区文件,会由于时间差导致流处理引擎中的分区和hive中的分区不匹配,出现部分新分区漏读的情况。
[0005]鉴于此,克服该现有技术所存在的缺陷是本
亟待解决的问题。

技术实现思路

[0006]本专利技术要解决的技术问题是:<br/>[0007]在hive中,对于老分区中新加入的数据,会在hdfs中自动新建文件,不能在已经存在的文件下添加数据,因此流处理引擎对于hive表的老分区中新添加的文件不能读取出来,即不支持动态读取hive中的老分区新文件。
[0008]为实现上述目的,本专利技术采用如下技术方案:
[0009]第一方面,本专利技术提供了一种流处理方式支持动态读取hive表数据的方法,包括:
[0010]在流处理引擎开始读取hive表之前,设置patitionMap,用于装载整个读取流程中已经读取过的分区名和相应分区中已经读取过的最大的文件修改时间;设置partitionValueList,用于装载当前轮待读取的分区名、相应分区中待读取文件的文件修改时间和相应待读取文件的路径;设置第一轮读取中的时间戳为预设初始值;
[0011]在流处理引擎读取hive表的过程中,若patitionMap中能够找到partitionValueList中待读取的分区名,则判定相应待读取的分区为老分区;若老分区中待读取文件的文件修改时间大于patitionMap中相应分区中已经读取过的最大的文件修改时间,且老分区中待读取文件的文件修改时间大于当前轮时间戳,则判定老分区中待读取文件为老分区新文件,按partitionValueList中相应待读取文件的路径进行老分区新文件
的读取;
[0012]待当前轮的待读取文件读取完毕后,清空partitionValueList,更新patitionMap中的相应分区中已经读取过的最大的文件修改时间,将时间戳更新为与当前轮所有已经读取过的文件中文件修改时间最大的文件相对应的文件修改时间。
[0013]优选地,在流处理引擎读取hive表的过程中,若patitionMap中找不到partitionValueList中待读取的分区名,则判定相应待读取的分区为新分区,相应分区中待读取文件为新分区文件,相应待读取文件的路径设置为空字符串,依据新分区名在hadoop中进行新分区文件的读取。
[0014]优选地,在流处理引擎读取hive表的过程中,由hadoop从hive表中拿取全部的分区名,与patitionMap中的分区名进行对比,找到遗漏分区名,将遗漏分区名和相应分区中的最大的文件修改时间写入lackPartition;
[0015]若lackPartition不为空,则流处理引擎优先根据lackPartition进行遗漏分区的文件的读取,完成相应分区的文件的读取后,从lackPartition中删除相应的分区名,直到lackPartition为空。
[0016]优选地,流处理引擎依据lackPartition中的遗漏分区名进行遗漏分区的文件的读取。
[0017]优选地,当lackPartition为空时,流处理引擎直接依据partitionValueList中的相应待读取文件的路径进行待读取文件的读取。
[0018]优选地,流处理引擎依据partitionValueList中的相应待读取文件的路径进行待读取文件的读取之前,先根据partitionValueList中的相应分区中待读取文件的文件修改时间进行升序排序,按照排好的顺序,用partitionValueList中的相应待读取文件的路径进行待读取文件的读取。
[0019]优选地,更新后的patitionMap用于下一轮读取中的待读取的分区为新分区或老分区的判断。
[0020]优选地,更新后的时间戳用于下一轮读取中的待读取文件是否为老分区新文件的判断。
[0021]优选地,若老分区中待读取文件的文件修改时间小于或等于patitionMap中相应分区中已经读取过的最大的文件修改时间,或者,老分区中待读取文件的文件修改时间小于或等于当前轮时间戳,则判定老分区中待读取文件为老分区旧文件,跳过对老分区旧文件的读取。
[0022]第二方面,本专利技术提供了一种流处理方式支持动态读取hive表数据的装置,用于实现第一方面所述的流处理方式支持动态读取hive表数据的方法,流处理方式支持动态读取hive表数据的装置包括:
[0023]至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行第一方面所述的流处理方式支持动态读取hive表数据的方法。
[0024]与现有技术相比,本专利技术的有益效果是:
[0025]本专利技术通过将待读取文件的文件修改时间与相应分区中已经读取过的最大的文件修改时间和当前轮时间戳进行对比,找到待读取文件中的老分区新文件,并根据
partitionValueList中相应待读取文件的路径进行老分区新文件的读取;可以在流机制上执行hive的数据源,使流处理引擎能够对hive中的老分区新文件进行动态读取。
附图说明
[0026]为了更清楚地说明本专利技术实施例的技术方案,下面将对本专利技术实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0027]图1是本专利技术实施例提供的一种流处理方式支持动态读取hive表数据的方法的流程示意图;
[0028]图2是本专利技术实施例提供的另一种流处理方式支持动态读取hive表数本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种流处理方式支持动态读取hive表数据的方法,其特征在于,包括:在流处理引擎开始读取hive表之前,设置patitionMap,用于装载整个读取流程中已经读取过的分区名和相应分区中已经读取过的最大的文件修改时间;设置partitionValueList,用于装载当前轮待读取的分区名、相应分区中待读取文件的文件修改时间和相应待读取文件的路径;设置第一轮读取中的时间戳为预设初始值;在流处理引擎读取hive表的过程中,若patitionMap中能够找到partitionValueList中待读取的分区名,则判定相应待读取的分区为老分区;若老分区中待读取文件的文件修改时间大于patitionMap中相应分区中已经读取过的最大的文件修改时间,且老分区中待读取文件的文件修改时间大于当前轮时间戳,则判定老分区中待读取文件为老分区新文件,按partitionValueList中相应待读取文件的路径进行老分区新文件的读取;待当前轮的待读取文件读取完毕后,清空partitionValueList,更新patitionMap中的相应分区中已经读取过的最大的文件修改时间,将时间戳更新为与当前轮所有已经读取过的文件中文件修改时间最大的文件相对应的文件修改时间。2.根据权利要求1所述的流处理方式支持动态读取hive表数据的方法,其特征在于,在流处理引擎读取hive表的过程中,若patitionMap中找不到partitionValueList中待读取的分区名,则判定相应待读取的分区为新分区,相应分区中待读取文件为新分区文件,相应待读取文件的路径设置为空字符串,依据新分区名在hadoop中进行新分区文件的读取。3.根据权利要求1所述的流处理方式支持动态读取hive表数据的方法,其特征在于,在流处理引擎读取hive表的过程中,由hadoop从hive表中拿取全部的分区名,与patitionMap中的分区名进行对比,找到遗漏分区名,将遗漏分区名和相应分区中的最大的文件修改时间写入lackPartition;若lackPartition不为空,则流处理引擎优先根据lackPartition进行遗漏分区的文件的读取,完成相应分区的...

【专利技术属性】
技术研发人员:赵方杨高东升梅纲
申请(专利权)人:武汉达梦数据库股份有限公司
类型:发明
国别省市:

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

1