一种基于两层时间标识的数据湖数据增量消费方法与流程

阅读: 评论:0

1.本发明涉及数据

技术领域


:,具体的说是一种基于两层时间标识的数据湖数据增量消费方法。

背景技术


::2.数据管理技术发展到现在主要有三个阶段:数据仓库、数据湖以及现阶段提出来的湖仓一体。3.数据仓库主要依托传统数据库,实现数据的存储、计算和访问,主要是用来做bi(全称businessintelligence,商业智能,又称商业智慧或商务智能,指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数据分析以实现商业价值)和报表等功能,数据仓库主要特点是:数据体系严格,格式标准、数据治理相对容易,面向特定引擎容易获得高度优化,缺点是仅能支持结构化数据、集扩展性较差。4.数据湖发展至今大约有不到10年的时间,目前主要依托于hadoop生态,用于构建可以存储结构化、半结构化和非结构化的数据,可以面向异构数据的科学探索和价值挖掘,但是数据比较灵活,数据治理难度较大,导致数据利用程度较低。5.为融合两者的优势,现阶段提出了湖仓一体大数据架构,数据湖吸收数据仓库的优势,打通二者之前的数据壁垒,提供一个从数据入湖到数据存储、计算、治理再到数据服务、机器学习等引用的支持,形成一个完整的闭环体系,真正做到一次入湖,多次利用的大数据解决方案。6.当前,湖仓一体平台最主要的一个特点是支持流批融合的计算场景,要做到流计算场景的应用,就需要平台支持增量的数据写入和消费。hadoop是当前大数据主流的生态框架,基于hadoop衍生了hive、hbase、spark等大数据存储和计算的优秀框架。基于hadoop生态构建数据湖是目前主流的大数据技术趋势。但是,目前的数据湖的架构存在一个重要的功能缺陷:数据湖中的数据不支持增量消费。比如通过hive、spark等查询hadoop中的增量数据,需要对分区、全表进行过滤,这实际上是和全量查询计算没有太大的区别,时间复杂度都是0(n),这就代表着数据越大,查询消耗的时间就越长。而对于增量来说,数据写入数据湖的速率是基本不变的,因此想要做到增量消费,那么它的时间复杂度的目标就是o(1)。技术实现要素:7.本发明针对目前技术发展的需求和不足之处,提供一种基于两层时间标识的数据湖数据增量消费方法,解决数据进入数据湖后无法进行增量消费的缺陷。8.本发明的一种基于两层时间标识的数据湖数据增量消费方法,解决上述技术问题采用的技术方案如下:9.一种基于两层时间标识的数据湖数据增量消费方法,该方法包括数据写入数据湖和查询数据湖中的数据两个阶段;10.(1)在数据写入数据湖阶段,11.(1.1)根据数据的表结构信息,在“metastore”中创建增量表,“metastore”为元数据服务,12.(1.2)获取本批次数据,启动一个线程作为时间服务器,客户端通过时间服务器操作系统的本地时间,生成一个时间戳ti,时间戳ti作为本批次数据写入数据湖的时间标识,13.(1.3)预估本批次数据包含的数据量,创建y个文件,14.(1.4)根据文件个数划分本批次数据,并对应写入到y个文件中,数据写入文件的过程中,在文件的页脚写入数据统计信息,所述数据统计信息包括该文件包含的数据量、列存储的最大值信息和最小值信息,在文件的页眉写入布隆索引,15.(1.5)本批次数据全部写入数据湖后,将本批次数据的写入作为log记录到commit文件中;16.(2)在查询数据湖中的数据阶段,17.(2.1)通过执行set方法指定需要消费的增量表、起始消费的时间戳t0、每次消费的时间范围between_time,18.(2.2)判断步骤(2.1)中被指定的增量表是否支持增量查询,若支持,则继续执行步骤(2.3),19.(2.3)解析sql语句,生成job,在job中获取时间戳字段“_commit_time_”的值,即起始消费的时间戳t0,20.(2.4)通过时间戳t0过滤当前增量表,获取满足大于时间戳t0的文件的存储路径,多个文件的存储路径形成文件lists[]数组,将文件lists[]数组返回给job,以生成执行的task任务。[0021]可选的,执行步骤(1.1)创建的增量表包括表的名字、表的字段、表的存储格式以及表的实际存储位置。[0022]可选的,执行步骤(1.1)创建增量表时,需要增加一个时间戳字段“_commit_time_”,需要执行数据的存储格式为parquet格式,需要提供唯一字段作为表的主键信息,支持uuid默认模式。[0023]可选的,执行步骤(1.2)将生成的时间戳ti作为本批次数据写入数据湖的时间标识后,[0024]客户端首先调用api接口,获取数据湖的上批次数据写入数据湖的时间戳ti-1,[0025]随后对比本批次数据的时间戳ti和上批次数据的时间戳ti-1,[0026](a)如果时间戳ti小于时间戳ti-1,则表示时间服务器有异常,或者,并发写入数据导致时间出现冲突,此时,客户端会将本批次数据写入失败队列,随后抛出异常给前台,提示客户端处理异常后,再继续本批次数据的写入,[0027](b)如果时间戳ti大于时间戳ti-1,则直接将时间戳ti作为本批次数据写入数据湖的时间标识。[0028]进一步可选的,执行步骤(1.3),创建y个文件的具体流程为:[0029]预估本批次需要写入数据湖的数据量为x,每条数据占用的存储空间为m,设定每个文件的阈值threshold,那么,需要创建的文件个数为y=mx/threshold。[0030]优选的,生成的文件为parquet格式,命名规则为:随机符串+时间戳+本次写入文件数量序列。[0031]进一步可选的,执行步骤(1.4),在文件的页眉写入布隆索引的具体操作为:[0032]首先,基于该文件中写入的数据量,获取该文件的实际阈值,[0033]然后,根据该文件的实际阈值确定需要多少个bit位来存储布隆索引,[0034]再然后,对每一行的uuid通过多次hash算法计算出多个位置的结果标志,将标识根据bit标志位写入bit存储中,[0035]最后,在写入每一行数据时,给这条记录数据增加时间戳字段“_commit_time_”并赋值为ti。[0036]进一步可选的,log的内容包含:本批次共写入多少数据,新创建了哪些文件,哪些文件被合并导致旧文件失效,以及本批次写入的时间戳ti。[0037]优选的,时间戳的格式为yyyymmddhhmmss。[0038]进一步可选的,执行步骤(2.3),在job中获取时间戳字段“_commit_time_”的值,即起始消费的时间戳t0,具体流程为:[0039](2.3.1)解析sql语句,生成job,通过语法分析器获取conditions,判断语法是否符合增量查询的格式,若符合,则继续执行(2.3.2);[0040](2.3.2)获取时间戳字段_commit_time_,通过关键字从hash表中获取增量查询的起始时间标识t0;[0041](2.3.3)判断时间标识t0是否符合时间戳的格式,若符合,则返回起始消费的时间戳t0;[0042](2.3.4)获取执行set时配置参数中的时间范围between_time,基于起始消费的时间戳t0,生成结束时间戳tend。[0043]本发明的一种基于两层时间标识的数据湖数据增量消费方法,与现有技术相比具有的有益效果是:[0044]本发明在将数据写入数据湖时给不同批次的数据增加时间标识,在将同一批次的数据写入数据湖的文件时又在文件名称中增加时间标识,这两次时间标识的增加可以快速定位数据的存储路径,实现数据的增量查询,满足实时计算的业务需求,解决数据进入数据湖后无法进行增量消费的缺陷,将时间复杂度由0(n)降到o(1)。附图说明[0045]附图1是本发明数据写入数据湖阶段的流程示意图;[0046]附图2是本发明查询数据湖中的数据的流程示意图。具体实施方式[0047]为使本发明的技术方案、解决的技术问题和技术效果更加清楚明白,以下结合具体实施例,对本发明的技术方案进行清楚、完整的描述。[0048]实施例一:[0049]本实施例提出一种基于两层时间标识的数据湖数据增量消费方法,该方法包括数据写入数据湖和查询数据湖中的数据两个阶段。[0050](1)结合附图1,在数据写入数据湖阶段:[0051](1.1)根据数据的表结构信息,在“metastore”中创建增量表,“metastore”为元数据服务。[0052]创建的增量表包括表的名字、表的字段、表的存储格式以及表的实际存储位置。[0053]创建增量表时,需要增加一个时间戳字段“_commit_time_”,需要执行数据的存储格式为parquet格式,需要提供唯一字段作为表的主键信息,支持uuid默认模式。[0054](1.2)获取本批次数据,启动一个线程作为时间服务器,客户端通过时间服务器操作系统的本地时间,生成一个格式为yyyymmddhhmmss的时间戳ti,时间戳ti作为本批次数据写入数据湖的时间标识,随后,客户端调用api接口,获取数据湖的上批次数据写入数据湖的时间戳ti-1,并进一步对比本批次数据的时间戳ti和上批次数据的时间戳ti-1,[0055](a)如果时间戳ti小于时间戳ti-1,则表示时间服务器有异常,或者,并发写入数据导致时间出现冲突,此时,客户端会将本批次数据写入失败队列,随后抛出异常给前台,提示客户端处理异常后,再继续本批次数据的写入,[0056](b)如果时间戳ti大于时间戳ti-1,则直接将时间戳ti作为本批次数据写入数据湖的时间标识。[0057](1.3)预估本批次数据包含的数据量,生成y个parquet格式的文件,具体流程为:[0058]预估本批次需要写入数据湖的数据量为x,每条数据占用的存储空间为m,[0059]设定每个文件的阈值threshold,[0060]那么,需要创建的文件个数为y=mx/threshold。[0061]将文件的命名规则设定为:随机符串+时间戳+本次写入文件数量序列,比如说123e4567-e89b-12d3-a456-426655440000_20211102171312789_2.parquet,这就是满足文件命名规则的文件名称。[0062](1.4)根据文件个数划分本批次数据,并对应写入到y个文件中。[0063]数据写入文件的过程中,[0064]在文件的页脚写入数据统计信息,数据统计信息包括该文件包含的数据量、列存储的最大值信息和最小值信息;[0065]在文件的页眉写入布隆索引,具体操作为:[0066]首先,基于该文件中写入的数据量,获取该文件的实际阈值,[0067]然后,根据该文件的实际阈值确定需要多少个bit位来存储布隆索引,[0068]再然后,对每一行的uuid通过多次hash算法计算出多个位置的结果标志,将标识根据bit标志位写入bit存储中,[0069]最后,在写入每一行数据时,给这条记录数据增加时间戳字段“_commit_time_”并赋值为ti。[0070](1.5)本批次数据全部写入数据湖后,将本批次数据的写入作为log记录到commit文件中。log的内容包含:本批次共写入多少数据,新创建了哪些文件,哪些文件被合并导致旧文件失效,以及本批次写入的时间戳ti。[0071](2)结合附图2,在查询数据湖中的数据阶段:[0072](2.1)通过执行set方法指定需要消费的增量表、起始消费的时间戳t0、每次消费的时间范围between_time。执行set方法设定格式为:support.increment.table=database.tablename。[0073](2.2)判断步骤(2.1)中被指定的增量表是否支持增量查询,若支持,则继续执行步骤(2.3)。[0074](2.3)解析sql语句,生成job,在job中获取时间戳字段“_commit_time_”的值,即起始消费的时间戳t0,具体流程为:[0075](2.3.1)解析sql语句,生成job,通过语法分析器获取conditions,判断语法是否符合增量查询的格式,若符合,则继续执行(2.3.2);[0076](2.3.2)获取时间戳字段_commit_time_,通过关键字从hash表中获取增量查询的起始时间标识t0;[0077](2.3.3)判断时间标识t0是否符合时间戳的格式,若符合,则返回起始消费的时间戳t0;[0078](2.3.4)获取执行set时配置参数中的时间范围between_time,基于起始消费的时间戳t0,生成结束时间戳tend。[0079](2.4)通过时间戳t0过滤当前增量表,获取满足大于时间戳t0的文件的存储路径,多个文件的存储路径形成文件lists[]数组,将文件lists[]数组返回给job,以生成执行的task任务。[0080]综上可知,采用本发明的一种基于两层时间标识的数据湖数据增量消费方法,可以快速定位数据的存储路径,实现数据的增量查询,满足实时计算的业务需求,解决数据进入数据湖后无法进行增量消费的缺陷,将时间复杂度由0(n)降到o(1)。[0081]以上应用具体个例对本发明的原理及实施方式进行了详细阐述,这些实施例只是用于帮助理解本发明的核心技术内容。基于本发明的上述具体实施例,本

技术领域


:的技术人员在不脱离本发明原理的前提下,对本发明所作出的任何改进和修饰,皆应落入本发明的专利保护范围。当前第1页12当前第1页12

技术特征:


1.一种基于两层时间标识的数据湖数据增量消费方法,其特征在于,所述方法包括数据写入数据湖和查询数据湖中的数据两个阶段;(1)在数据写入数据湖阶段,(1.1)根据数据的表结构信息,在“metastore”中创建增量表,(1.2)获取本批次数据,启动一个线程作为时间服务器,客户端通过时间服务器操作系统的本地时间,生成一个时间戳t
i
,时间戳t
i
作为本批次数据写入数据湖的时间标识,(1.3)预估本批次数据包含的数据量,创建y个文件,(1.4)根据文件个数划分本批次数据,并对应写入到y个文件中,数据写入文件的过程中,在文件的页脚写入数据统计信息,所述数据统计信息包括该文件包含的数据量、列存储的最大值信息和最小值信息,在文件的页眉写入布隆索引,(1.5)本批次数据全部写入数据湖后,将本批次数据的写入作为log记录到commit文件中;(2)在查询数据湖中的数据阶段,(2.1)通过执行set方法指定需要消费的增量表、起始消费的时间戳t0、每次消费的时间范围between_time,(2.2)判断步骤(2.1)中被指定的增量表是否支持增量查询,若支持,则继续执行步骤(2.3),(2.3)解析sql语句,生成job,在job中获取时间戳字段“_commit_time_”的值,即起始消费的时间戳t0,(2.4)通过时间戳t0过滤当前增量表,获取满足大于时间戳t0的文件的存储路径,多个文件的存储路径形成文件lists[]数组,将文件lists[]数组返回给job,以生成执行的task任务。2.根据权利要求1所述的一种基于两层时间标识的数据湖数据增量消费方法,其特征在于,执行步骤(1.1)创建的增量表包括表的名字、表的字段、表的存储格式以及表的实际存储位置。3.根据权利要求2所述的一种基于两层时间标识的数据湖数据增量消费方法,其特征在于,执行步骤(1.1)创建增量表时,需要增加一个时间戳字段“_commit_time_”,需要执行数据的存储格式为parquet格式,需要提供唯一字段作为表的主键信息,支持uuid默认模式。4.根据权利要求1或3所述的一种基于两层时间标识的数据湖数据增量消费方法,其特征在于,执行步骤(1.2)将生成的时间戳t
i
作为本批次数据写入数据湖的时间标识后,客户端首先调用api接口,获取数据湖的上批次数据写入数据湖的时间戳t
i-1
,随后对比本批次数据的时间戳t
i
和上批次数据的时间戳t
i-1
,(a)如果时间戳t
i
小于时间戳t
i-1
,则表示时间服务器有异常,或者,并发写入数据导致时间出现冲突,此时,客户端会将本批次数据写入失败队列,随后抛出异常给前台,提示客户端处理异常后,再继续本批次数据的写入,(b)如果时间戳t
i
大于时间戳t
i-1
,则直接将时间戳t
i
作为本批次数据写入数据湖的时间标识。5.根据权利要求3所述的一种基于两层时间标识的数据湖数据增量消费方法,其特征
在于,执行步骤(1.3),创建y个文件的具体流程为:预估本批次需要写入数据湖的数据量为x,每条数据占用的存储空间为m,设定每个文件的阈值threshold,那么,需要创建的文件个数为y=mx/threshold。6.根据权利要求5所述的一种基于两层时间标识的数据湖数据增量消费方法,其特征在于,生成的文件为parquet格式,命名规则为:随机符串+时间戳+本次写入文件数量序列。7.根据权利要求3所述的一种基于两层时间标识的数据湖数据增量消费方法,其特征在于,执行步骤(1.4),在文件的页眉写入布隆索引的具体操作为:首先,基于该文件中写入的数据量,获取该文件的实际阈值,然后,根据该文件的实际阈值确定需要多少个bit位来存储布隆索引,再然后,对每一行的uuid通过多次hash算法计算出多个位置的结果标志,将标识根据bit标志位写入bit存储中,最后,在写入每一行数据时,给这条记录数据增加时间戳字段“_commit_time_”并赋值为t
i
。8.根据权利要求1所述的一种基于两层时间标识的数据湖数据增量消费方法,其特征在于,log的内容包含:本批次共写入多少数据,新创建了哪些文件,哪些文件被合并导致旧文件失效,以及本批次写入的时间戳t
i
。9.根据权利要求1所述的一种基于两层时间标识的数据湖数据增量消费方法,其特征在于,时间戳的格式为yyyymmddhhmmss。10.根据权利要求9所述的一种基于两层时间标识的数据湖数据增量消费方法,其特征在于,执行步骤(2.3),在job中获取时间戳字段“_commit_time_”的值,即起始消费的时间戳t0,具体流程为:(2.3.1)解析sql语句,生成job,通过语法分析器获取conditions,判断语法是否符合增量查询的格式,若符合,则继续执行(2.3.2);(2.3.2)获取时间戳字段_commit_time_,通过关键字从hash表中获取增量查询的起始时间标识t0;(2.3.3)判断时间标识t0是否符合时间戳的格式,若符合,则返回起始消费的时间戳t0;(2.3.4)获取执行set时配置参数中的时间范围between_time,基于起始消费的时间戳t0,生成结束时间戳t
end


技术总结


本发明公开一种基于两层时间标识的数据湖数据增量消费方法,涉及数据湖技术领域,包括数据写入数据湖和查询数据湖中的数据两个阶段;在数据写入数据湖阶段,需要:创建增量表,启动时间服务器生成时间戳来作为写入数据的时间标识,生成多个空文件,将有时间标识的数据写入空文件,并在文件名称中增设时间戳;在查询数据湖中的数据阶段,需要:指定待消费的增量表、起始消费的时间戳、每次消费的时间范围,判断增量表是否支持增量查询,在支持时解析SQL语句,生成Job,获取时间戳字段,进而过滤增量表,获取满足要求的文件存储路径。本发明可以快速定位数据的存储路径,实现数据的增量查询,解决数据进入数据湖后无法进行增量消费的缺陷。费的缺陷。费的缺陷。


技术研发人员:

周永进 颜亮 李国涛 秦雪娇

受保护的技术使用者:

上海浪潮云计算服务有限公司

技术研发日:

2022.09.02

技术公布日:

2022/12/12

本文发布于:2022-12-13 19:48:30,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/1/33184.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   时间   增量   文件
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图