一种基于Flink数据流的Iceberg表Schema动态变更方法及系统技术方案

技术编号:34445722 阅读:15 留言:0更新日期:2022-08-06 16:40
本发明专利技术公开了一种基于Flink数据流的Iceberg表Schema动态变更方法,创建数据行,并组装成数据流,其中所述数据流为附带结构信息的数据流;实现Flink算子IcebergStreamWriter,通过该算子接收所述步骤1中组装的数据流记录,并存储到数据文件中,在存储到数据文件之前检测接收到的数据是否存在结构信息;实现Flink算子IcebergFilesCommitter,通过该算子将步骤2中生成的数据文件组装成清单文件,并生成快照。相比现有的实现方案能够做到自动映射数据行的结构信息到目标表结构,不必再重新修改代码,重启作业,同时数据行记录并不是每次都需要携结构信息,只有在第一条记录和结构发生变更时才需要,因此相比原有方式,并不会带来网络和计算开销,此外该方案对原有方案的侵入性非常小,实现起来也很简单。实现起来也很简单。实现起来也很简单。

【技术实现步骤摘要】
一种基于Flink数据流的Iceberg表Schema动态变更方法及系统


[0001]本专利技术涉及大数据实时流计算领域,尤其涉及一种基于Flink数据流的Iceberg表Schema动态变更方法及系统。

技术介绍

[0002]Iceberg是目前最流行的数据湖技术框架之一,Iceberg作为HDFS、S3等存储系统之上的抽象层,提供了一种独立的数据组织方式,可实现大数据场景下的数据的追加、修改和删除,表Schema的变更等,上述功能以事务快照的形式实现,支持表的并发读写、数据回溯和版本回滚等。Iceberg和Flink结合,能够实现实时数据入湖和实时数仓等功能。
[0003]Iceberg本身支持表Schema的动态变更,但是跟Flink结合时,因为Flink的设计实现等原因,导致在创建数据流时需要明确指定数据行DataRow的Schema,即数据行的数据结构,而且一旦指定数据行的数据结构信息,该结构信息就无法在作业流运行过程中动态修改,必须人工停止作业再重新修改数据结构和Iceberg目标表的结构,然后再重启作业。在实际应用中,数据行的数据结构发生变更是常有的事,因此通过修改代码再重启作业,在实时应用场景是无法接受的,出现该问题的根源是数据行DataRow本身不带有Schema信息,因此本专利技术专利通过在数据行中引入结构信息,在作业运行过程中根据结构信息的变更自动映射到目标表结构,以此来解决必须重启作业的问题。

技术实现思路

[0004]本专利技术旨在至少解决现有技术中存在的技术问题之一。为此,本专利技术公开一种基于Flink数据流的Iceberg表Schema动态变更方法,所述方法包括:
[0005]步骤1,创建数据行,并组装成数据流,其中所述数据流为附带结构信息的数据流;
[0006]步骤2,实现Flink算子IcebergStreamWriter,通过该算子接收所述步骤1中组装的数据流记录,并存储到数据文件中,在存储到数据文件之前检测接收到的数据是否存在结构信息;
[0007]步骤3,实现Flink算子IcebergFilesCommitter,通过该算子将步骤2中生成的数据文件组装成清单文件,并生成快照。
[0008]更进一步地,所述组装成数据流进一步包括:
[0009]步骤101,如果数据行是第一条记录,则必须附带上数据行的结构信息;
[0010]步骤102,如果数据行不是第一条记录,且当前数据行的结构信息未变更,则当前数据行可以不必附带结构信息;
[0011]步骤103,如果数据行不是第一条记录,且当前数据行的结构信息发生变更,则当前数据行必须附带结构信息。
[0012]更进一步地,所述步骤2中的存储到数据文件中,在写入文件之前执行如下步骤:
[0013]步骤201,如果当前接收到的是第一条数据记录,检查是否存在结构信息,如果没
有,则报告异常,作业终止;
[0014]步骤202,如果当前接收到的是第一条数据记录,检查是否存在结构信息,如果有结构信息,则根据提供的结构信息,创建Iceberg目标表和存储文件。
[0015]更进一步地,所述步骤2中的存储到数据文件中,在写入文件之前执行如下步骤:步骤203,如果当前接收到的不是第一条数据记录,检查当前行是否发送结构变更,如果结构信息发生变更,且提供了新的结构信息,则根据新提供的结构信息,修改Iceberg目标表结构,并创建新的存储文件。
[0016]更进一步地,所述步骤2中的存储到数据文件中,在写入文件之前执行如下步骤:
[0017]步骤204,如果当前接收到的不是第一条数据记录,检查当前行是否发送结构变更,如果结构信息发生变更,且没有提供新的结构信息,则报错,并终止作业;
[0018]步骤205,根据最新的表结构写入数据行记录。
[0019]本专利技术还公开了一种基于Flink数据流的Iceberg表Schema动态变更系统,所述系统包括:
[0020]数据流组装模块,创建数据行,并组装成数据流,其中所述数据流为附带结构信息的数据流,如果数据行是第一条记录,则必须附带上数据行的结构信息;如果数据行不是第一条记录,且当前数据行的结构信息未变更,则当前数据行可以不必附带结构信息;如果数据行不是第一条记录,且当前数据行的结构信息发生变更,则当前数据行必须附带结构信息;
[0021]数据存储模块,实现Flink算子IcebergStreamWriter,通过该算子接收所述数据流组装模块中组装的数据流记录,并存储到数据文件中,对接收到的数据进行检测,如果当前接收到的是第一条数据记录,检查是否存在结构信息,如果没有,则报告异常,作业终止,如果当前接收到的是第一条数据记录,检查是否存在结构信息,如果有结构信息,则根据提供的结构信息,创建Iceberg目标表和存储文件;
[0022]快照生成模块,实现Flink算子IcebergFilesCommitter,通过该算子将数据存储模块中存储的数据文件组装成清单文件,并生成快照。
[0023]更近一步地,所述数据存储模块进一步包括:如果当前接收到的不是第一条数据记录,检查当前行是否发送结构变更,如果结构信息发生变更,且提供了新的结构信息,则根据新提供的结构信息,修改Iceberg目标表结构,并创建新的存储文件。
[0024]更进一步地,如果当前接收到的不是第一条数据记录,检查当前行是否发送结构变更,如果结构信息发生变更,且没有提供新的结构信息,则报错,并终止作业;根据最新的表结构写入数据行记录。
[0025]本专利技术进一步公开了一种基于Flink数据流的Iceberg表Schema动态变更的装置,包括至少一个存储器和至少一个处理器;所述至少一个存储器,用于存储机器可读程序;所述至少一个处理器,用于调用所述机器可读程序,执行上述的变更方法的步骤。
[0026]更进一步公开了一种计算机可读存储介质,存储有能够被处理器加载并执行上述方法的计算机程序。
[0027]本专利技术于现有技术相比,有益效果为:本专利技术专利相比现有的实现方案能够做到自动映射数据行的结构信息到目标表结构,不必再重新修改代码,重启作业,同时数据行记录并不是每次都需要携结构信息,只有在第一条记录和结构发生变更时才需要,因此相比
原有方式,并不会带来网络和计算开销,此外该方案对原有方案的侵入性非常小,实现起来也很简单。
附图说明
[0028]从以下结合附图的描述可以进一步理解本专利技术。图中的部件不一定按比例绘制,而是将重点放在示出实施例的原理上。在图中,在不同的视图中,相同的附图标记指定对应的部分。
[0029]图1是本专利技术的基于Flink数据流的Iceberg表Schema动态变更方法的流程图;
[0030]图2是本专利技术一实施例中动态变更的流程框图。
具体实施方式
[0031]实施例一
[0032]如图1所示,本实施例总体流程分为3个阶段:...

【技术保护点】

【技术特征摘要】
1.一种基于Flink数据流的Iceberg表Schema动态变更方法,其特征在于,所述方法包括:步骤1,创建数据行,并组装成数据流,其中所述数据流为附带结构信息的数据流;步骤2,实现Flink算子IcebergStreamWriter,通过该算子接收所述步骤1中组装的数据流记录,并存储到数据文件中,在存储到数据文件之前检测接收到的数据是否存在结构信息;步骤3,实现Flink算子IcebergFilesCommitter,通过该算子将步骤2中生成的数据文件组装成清单文件,并生成快照。2.如权利要求1所述的一种基于Flink数据流的Iceberg表Schema动态变更方法,其特征在于,所述组装成数据流进一步包括:步骤101,如果数据行是第一条记录,则必须附带上数据行的结构信息;步骤102,如果数据行不是第一条记录,且当前数据行的结构信息未变更,则当前数据行可以不必附带结构信息;步骤103,如果数据行不是第一条记录,且当前数据行的结构信息发生变更,则当前数据行必须附带结构信息。3.如权利要求1所述的一种基于Flink数据流的Iceberg表Schema动态变更方法,其特征在于,所述步骤2中的存储到数据文件中,在写入文件之前执行如下步骤:步骤201,如果当前接收到的是第一条数据记录,检查是否存在结构信息,如果没有,则报告异常,作业终止;步骤202,如果当前接收到的是第一条数据记录,检查是否存在结构信息,如果有结构信息,则根据提供的结构信息,创建Iceberg目标表和存储文件。4.如权利要求3所述的一种基于Flink数据流的Iceberg表Schema动态变更方法,其特征在于,所述步骤2中的存储到数据文件中,在写入文件之前执行如下步骤:步骤203,如果当前接收到的不是第一条数据记录,检查当前行是否发送结构变更,如果结构信息发生变更,且提供了新的结构信息,则根据新提供的结构信息,修改Iceberg目标表结构,并创建新的存储文件。5.如权利要求4所述的一种基于Flink数据流的Iceberg表Schema动态变更方法,其特征在于,所述步骤2中的存储到数据文件中,在写入文件之前执行如下步骤:步骤204,如果当前接收到的不是第一条数据记录,检查当前行是否发送结构变更,如果结构信息发生变更,且没有提供新的结构信息,则报错,并终止作业;...

【专利技术属性】
技术研发人员:闻乃松杨磊
申请(专利权)人:北京滴普科技有限公司
类型:发明
国别省市:

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

1