(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202211070114.4
(22)申请日 2022.09.02
(71)申请人 上海浪潮云计算 服务有限公司
地址 200072 上海市 静安区江场三路238号
411室
(72)发明人 周永进 颜亮 李国涛 秦雪娇
(74)专利代理 机构 济南信达专利事务所有限公
司 37100
专利代理师 冯春连
(51)Int.Cl.
G06F 16/23(2019.01)
G06F 16/242(2019.01)
G06F 16/22(2019.01)
(54)发明名称
一种基于两层时间标识的数据湖数据增量
消费方法
(57)摘要
本发明公开一种基于两层时间标识的数据
湖数据增量消费方法, 涉及数据湖技术领域, 包
括数据写入数据湖和查询数据湖中的数据两个
阶段; 在数据写入数据湖阶段, 需要: 创建增量
表, 启动时间服务器生成时间戳来作为写入数据
的时间标识, 生成多个空文件, 将有时间标识的
数据写入空文件, 并在文件名称中增设时间戳;
在查询数据湖中的数据阶段, 需要: 指定待消费
的增量表、 起始消费的时间戳、 每次消费的时间
范围, 判断增量表是否支持增量查询, 在支持时
解析SQL语句, 生成Job, 获取时间戳字段, 进而过
滤增量表, 获取满足要求的文件存储路径。 本发
明可以快速定位数据的存储路径, 实现数据的增
量查询, 解决数据进入数据湖后无法进行增量消
费的缺陷。
权利要求书2页 说明书5页 附图2页
CN 115470223 A
2022.12.13
CN 115470223 A
1.一种基于两层时间标识的数据湖数据增量消费方法, 其特征在于,所述方法包括数
据写入数据湖和查询数据湖中的数据两个阶段;
(1)在数据写入数据湖阶段,
(1.1)根据数据的表结构信息, 在 “metastore ”中创建增量表,
(1.2)获取本批次数据, 启动一个线程作为时间服务器, 客户端通过时间服务器操作系
统的本地时间, 生成一个时间戳Ti, 时间戳Ti作为本批次数据写入数据湖的时间标识,
(1.3)预估本 批次数据包 含的数据量, 创建Y个文件,
(1.4)根据文件个数划分本批次数据, 并对应写入到Y个文件中, 数据写入文件的过程
中, 在文件的页脚写入数据统计信息, 所述数据统计信息包括该文件包含的数据量、 列存储
的最大值信息和最小值信息, 在文件的页眉写入布隆索引,
(1.5)本批次数据全部写入数据湖后, 将本批次数据的写入作为Lo g记录到commit文件
中;
(2)在查询数据湖中的数据阶段,
(2.1)通过执行set方法指定需要消费的增量表、 起始消费的时间戳T0、 每次消费的时间
范围betwe en_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)将生成的时间戳Ti作为本批次数据写入数据湖的时间标识后,
客户端首先调用API接口, 获取数据湖的上批次数据写入数据湖的时间戳Ti‑1, 随后对
比本批次数据的时间戳Ti和上批次数据的时间戳Ti‑1,
(a)如果时间戳Ti小于时间戳Ti‑1, 则表示时间服务器有异常, 或者, 并发写入数据导致
时间出现冲突, 此时, 客户端会将本批次数据写入失败队列, 随后抛出异常给前台, 提示客
户端处理异常后, 再继续本 批次数据的写入,
(b)如果时间戳Ti大于时间戳Ti‑1, 则直接将时间戳Ti作为本批次数据写入数据湖的时
间标识。
5.根据权利要求3所述的一种基于两层时间标识的数据湖数据增量消费方法, 其特征权 利 要 求 书 1/2 页
2
CN 115470223 A
2在于, 执行步骤(1.3), 创建Y个文件的具体流 程为:
预估本批次需要写入数据湖的数据量为X, 每条数据占用的存储空间为m, 设定每个文
件的阈值thresho ld, 那么, 需要创建的文件个数为Y=mX/thresho ld。
6.根据权利要求5所述的一种基于两层时间标识的数据湖数据增量消费方法, 其特征
在于, 生成的文件为Parquet格式, 命名规则为: 随机符串+时间戳+本次写入文件数量序列。
7.根据权利要求3所述的一种基于两层时间标识的数据湖数据增量消费方法, 其特征
在于, 执行步骤(1.4), 在文件的页眉写入布隆索引的具体操作为:
首先, 基于该文件中写入的数据量, 获取 该文件的实际阈值,
然后, 根据该文件的实际阈值确定需要 多少个bit位 来存储布隆索引,
再然后, 对每一行的UUID通过多次hash算法计算出多个位置的结果标志, 将标识根据
bit标志位写入bit存 储中,
最后, 在写入每一行数据时, 给这条记录数据增加时间戳字段 “_commit_time_ ”并赋值
为Ti。
8.根据权利要求1所述的一种基于两层时间标识的数据湖数据增量消费方法, 其特征
在于, Log的内容包含: 本批次共写入多少数据, 新创建了 哪些文件, 哪些文件被合并导致旧
文件失效, 以及本 批次写入的时间戳Ti。
9.根据权利要求1所述的一种基于两层时间标识的数据湖数据增量消费方法, 其特征
在于, 时间戳的格式为y yyymmddhhmmss。
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, 生成结束时间戳Tend。权 利 要 求 书 2/2 页
3
CN 115470223 A
3
专利 一种基于两层时间标识的数据湖数据增量消费方法
文档预览
中文文档
10 页
50 下载
1000 浏览
0 评论
0 收藏
3.0分
温馨提示:本文档共10页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 SC 于 2024-02-07 12:42:53上传分享