System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于flink cdc技术同步批量表到hudi的方法技术_技高网

一种基于flink cdc技术同步批量表到hudi的方法技术

技术编号:40958444 阅读:3 留言:0更新日期:2024-04-18 20:36
本发明专利技术公开了一种基于flink cdc技术同步批量表到hudi的方法,包括以下步骤:步骤一:通过表映射模块负责确定每个源表与hudi表的对应关系,默认情况下,每个源表都会被同步到同名的hudi表;步骤二:通过schema同步模块负责自动创建及更新flink hudi表,动态从数据源中获取源表的主键和列信息,并根据数据类型映射关系,将源表的列转换为对应的flink sql数据类型的hudi表列,同时结合从外部系统加载的表属性配置,即生成hudi表完整schema信息,最后基于flink Catalog创建表或更新表结构。本发明专利技术通过[schema同步模块]自动根据源表元数据生成hudi表,基于[表映射模块]支持一源表写到多hudi表、多源表写到同一hudi表,实现在同一flink任务中将多源表的数据同步到多hudi表,减少资源消耗。

【技术实现步骤摘要】

本专利技术涉及数据同步的,尤其涉及一种基于flink cdc技术同步批量表到hudi的方法。


技术介绍

1、flink cdc是一组以flink为引擎的针对不同类型数据源的连接器集合,用来从数据源中捕获变更数据。支持存量与增量数据捕获一体化,支持同一任务获取多表数据,支持动态增加表,并且提供恰好一次语义。

2、hudi是一个事务性数据湖平台,它为数据湖带来了数据库和数据仓库功能。支持快速的更新和删除操作,拥有完善的表管理服务,在与flink集成时提供了流式的数据写入和读取能力。

3、基于flink引擎的数据写入,hudi提供了两种方式,一种是使用hoodieflinkstreamer工具从kafka消费数据写到hudi表。另一种是通过flink sql连接器方式进行写入。这两种方式都存在着一些不足之处:

4、1.存在大量重复性工作,需要手动预先创建好hudi表。

5、2.资源消耗严重,写入每个hudi表都需要启动独立的作业。


技术实现思路

1、本部分的目的在于概述本专利技术的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和专利技术名称中可能会做些简化或省略以避免使本部分、说明书摘要和专利技术名称的目的模糊,而这种简化或省略不能用于限制本专利技术的范围。

2、鉴于上述现有基于flink cdc技术同步批量表到hudi的方法存在的问题,提出了本专利技术。

3、因此,本专利技术目的是提供一种基于flink cdc技术同步批量表到hudi的方法,其通过[schema同步模块]自动根据源表元数据生成hudi表,基于[表映射模块]支持一源表写到多hudi表、多源表写到同一hudi表,实现在同一flink任务中将多源表的数据同步到多hudi表,减少资源消耗。

4、为解决上述技术问题,本专利技术提供如下技术方案:一种基于flink cdc技术同步批量表到hudi的方法,包括以下步骤:

5、步骤一:通过表映射模块负责确定每个源表与hudi表的对应关系,默认情况下,每个源表都会被同步到同名的hudi表;

6、步骤二:通过schema同步模块负责自动创建及更新flink hudi表,动态从数据源中获取源表的主键和列信息,并根据数据类型映射关系,将源表的列转换为对应的flinksql数据类型的hudi表列,同时结合从外部系统加载的表属性配置,即生成hudi表完整schema信息,最后基于flink catalog创建表或更新表结构;

7、步骤三:通过数据处理模块负责处理从数据源捕获到的[主数据流],并最终将数据写入各个hudi表,通过分流方式,为每个输出的hudi表创建一个元素类型为row的[hudi表数据流],在分流的过程中,将一源表的行数据复制到不同的[hudi表数据流],或者将不同源表的行数据添加到相同的[hudi表数据流]中,最终分别将每个[hudi表数据流]转化为flink table对象并插入到对应的hudi表中。

8、作为本专利技术所述基于flink cdc技术同步批量表到hudi的方法的一种优选方案,其中:所述步骤一中对于一些复杂的映射关系,一个源表需要同步到多个hudi表或多个源表需要同步到同一个hudi表,则能够在外部系统进行特定的配置,在作业启动时,[表映射模块]会从外部加载[自定义映射键值对]进行初始化,最终得到[表映射键值对],键为源表名,值为[hudi表名列表]。

9、作为本专利技术所述基于flink cdc技术同步批量表到hudi的方法的一种优选方案,其中:所述步骤一中表映射模块从外部系统加载需要同步的源表名,得到[源表列表],从外部系统加载[自定义映射键值对]配置,键为源表名,值为[hudi表名列表],通过[自定义映射键值对]能够实现同一源表映射多个hudi表,或多个源表映射到同一hudi表。

10、作为本专利技术所述基于flink cdc技术同步批量表到hudi的方法的一种优选方案,其中:所述[源表列表]中每个源表为键,构造[表映射键值对],值优先使用与[自定义映射键值对]相同键的值,否则,赋予默认值为与源表同名的hudi表,最终得到的[表映射键值对]包含了全量[源表列表]与hudi表的映射关系,并以[表映射键值对]为依据进行自动化schema同步和数据处理。

11、作为本专利技术所述基于flink cdc技术同步批量表到hudi的方法的一种优选方案,其中:所述步骤二中还包括遍历[表映射键值对]中每一个源表,通过jdbc方式从数据源获取该源表的主键和列的元数据信息,并将源表的列转换为对应的flink sql数据类型的hudi表列;从[表映射键值对]得到该源表映射的[hudi表名列表],遍历每个hudi表。

12、作为本专利技术所述基于flink cdc技术同步批量表到hudi的方法的一种优选方案,其中:从外部系统中加载hudi表的个性化表属性配置包括表类型、索引和写入方式,如果无个性化表属性,则为该hudi表公共属性生成默认值,否则,个性化表属性将默认的公共属性。

13、作为本专利技术所述基于flink cdc技术同步批量表到hudi的方法的一种优选方案,其中:根据得到的主键和列元数据信息以及得到的表属性信息,合并生成hudi表的完整schema信息;判断hudi表是否存在,若不存在,则调用catalog创建表,否则调用catalog更新表结构或表属性,保持hudi表结构保持与源表结构一致。

14、作为本专利技术所述基于flink cdc技术同步批量表到hudi的方法的一种优选方案,其中:所述步骤三中还包括从[表映射键值对]中去得到去重后的所有hudi表名,为每个hudi表创建唯一侧输出标签,得到[hudi表名-侧输出标签键值对]。

15、作为本专利技术所述基于flink cdc技术同步批量表到hudi的方法的一种优选方案,其中:所述步骤三中通过自定义debeziumdeserializationschema对数据源捕获到的每个变更事件进行反序列化,从中提取变更类型、行数据、源表名,用变更类型与行数据构造为flink内部row对象,row对象和源表名一起封装为[自定义对象],得到元素类型为[自定义对象]的[主数据流];处理[主数据流],根据[自定义对象]中的源表名,从[表映射模块]中的[表映射键值对]确定需要输出的[hudi表名列表],将[自定义对象]中的row对象分别复制提交到对应的侧输出。

16、作为本专利技术所述基于flink cdc技术同步批量表到hudi的方法的一种优选方案,其中:遍历[hudi表名-侧输出标签键值对]中所有侧输出标签,根据侧输出标签从[主数据流]获取到[hudi表数据流],然后把[hudi表数据流]转换为flink table对象;通过streamstatementset#addinsert为各个table对象生成插入hudi表语句,避免了创建多个source算子,最后使用streams本文档来自技高网...

【技术保护点】

1.一种基于flink cdc技术同步批量表到hudi的方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:所述步骤一中对于一些复杂的映射关系,一个源表需要同步到多个hudi表或多个源表需要同步到同一个hudi表,则能够在外部系统进行特定的配置,在作业启动时,[表映射模块]会从外部加载[自定义映射键值对]进行初始化,最终得到[表映射键值对],键为源表名,值为[hudi表名列表]。

3.根据权利要求2所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:所述步骤一中表映射模块从外部系统加载需要同步的源表名,得到[源表列表],从外部系统加载[自定义映射键值对]配置,键为源表名,值为[hudi表名列表],通过[自定义映射键值对]能够实现同一源表映射多个hudi表,或多个源表映射到同一hudi表。

4.根据权利要求3所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:所述[源表列表]中每个源表为键,构造[表映射键值对],值优先使用与[自定义映射键值对]相同键的值,否则,赋予默认值为与源表同名的hudi表,最终得到的[表映射键值对]包含了全量[源表列表]与hudi表的映射关系,并以[表映射键值对]为依据进行自动化schema同步和数据处理。

5.根据权利要求1所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:所述步骤二中还包括遍历[表映射键值对]中每一个源表,通过jdbc方式从数据源获取该源表的主键和列的元数据信息,并将源表的列转换为对应的flink sql数据类型的hudi表列;从[表映射键值对]得到该源表映射的[hudi表名列表],遍历每个hudi表。

6.根据权利要求5所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:从外部系统中加载hudi表的个性化表属性配置包括表类型、索引和写入方式,如果无个性化表属性,则为该hudi表公共属性生成默认值,否则,个性化表属性将默认的公共属性。

7.根据权利要求6所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:根据得到的主键和列元数据信息以及得到的表属性信息,合并生成hudi表的完整schema信息;判断hudi表是否存在,若不存在,则调用Catalog创建表,否则调用Catalog更新表结构或表属性,保持hudi表结构保持与源表结构一致。

8.根据权利要求1所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:所述步骤三中还包括从[表映射键值对]中去得到去重后的所有hudi表名,为每个hudi表创建唯一侧输出标签,得到[hudi表名-侧输出标签键值对]。

9.根据权利要求8所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:所述步骤三中通过自定义DebeziumDeserializationSchema对数据源捕获到的每个变更事件进行反序列化,从中提取变更类型、行数据、源表名,用变更类型与行数据构造为flink内部Row对象,Row对象和源表名一起封装为[自定义对象],得到元素类型为[自定义对象]的[主数据流];处理[主数据流],根据[自定义对象]中的源表名,从[表映射模块]中的[表映射键值对]确定需要输出的[hudi表名列表],将[自定义对象]中的Row对象分别复制提交到对应的侧输出。

10.根据权利要求9所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:遍历[hudi表名-侧输出标签键值对]中所有侧输出标签,根据侧输出标签从[主数据流]获取到[hudi表数据流],然后把[hudi表数据流]转换为flink Table对象;通过StreamStatementSet#addInsert为各个Table对象生成插入hudi表语句,避免了创建多个source算子,最后使用StreamStatementSet#attachAsDataStream将插入语句优化为底层的DataStream Api方式运行。

...

【技术特征摘要】

1.一种基于flink cdc技术同步批量表到hudi的方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:所述步骤一中对于一些复杂的映射关系,一个源表需要同步到多个hudi表或多个源表需要同步到同一个hudi表,则能够在外部系统进行特定的配置,在作业启动时,[表映射模块]会从外部加载[自定义映射键值对]进行初始化,最终得到[表映射键值对],键为源表名,值为[hudi表名列表]。

3.根据权利要求2所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:所述步骤一中表映射模块从外部系统加载需要同步的源表名,得到[源表列表],从外部系统加载[自定义映射键值对]配置,键为源表名,值为[hudi表名列表],通过[自定义映射键值对]能够实现同一源表映射多个hudi表,或多个源表映射到同一hudi表。

4.根据权利要求3所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:所述[源表列表]中每个源表为键,构造[表映射键值对],值优先使用与[自定义映射键值对]相同键的值,否则,赋予默认值为与源表同名的hudi表,最终得到的[表映射键值对]包含了全量[源表列表]与hudi表的映射关系,并以[表映射键值对]为依据进行自动化schema同步和数据处理。

5.根据权利要求1所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:所述步骤二中还包括遍历[表映射键值对]中每一个源表,通过jdbc方式从数据源获取该源表的主键和列的元数据信息,并将源表的列转换为对应的flink sql数据类型的hudi表列;从[表映射键值对]得到该源表映射的[hudi表名列表],遍历每个hudi表。

6.根据权利要求5所述的基于flink cdc技术同步批量表到hudi的方法,其特征在于:从外部系统中加载hudi表的个性化表属性配置包括表类型、索引和写入方式,如果无个性化表属性,则为该hudi表公共属性...

【专利技术属性】
技术研发人员:陈志明
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

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

1