CN116991860A - 基于Flink的Hudi表增量数据写入方法及装置 - Google Patents

基于Flink的Hudi表增量数据写入方法及装置 Download PDF

Info

Publication number
CN116991860A
CN116991860A CN202311001141.0A CN202311001141A CN116991860A CN 116991860 A CN116991860 A CN 116991860A CN 202311001141 A CN202311001141 A CN 202311001141A CN 116991860 A CN116991860 A CN 116991860A
Authority
CN
China
Prior art keywords
data
hudi
writing
prest
flink
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311001141.0A
Other languages
English (en)
Inventor
黄主斌
黄靖
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Clinbrain Information Technology Co Ltd
Original Assignee
Shanghai Clinbrain Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Clinbrain Information Technology Co Ltd filed Critical Shanghai Clinbrain Information Technology Co Ltd
Priority to CN202311001141.0A priority Critical patent/CN116991860A/zh
Publication of CN116991860A publication Critical patent/CN116991860A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/275Synchronous replication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/283Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开提供了基于Flink的Hudi表增量数据写入方法及装置,通过提供以Presto为源端,Hudi为接收端的Flink计算引擎;获取Hudi对应的最新数据更新时间,根据最新数据更新时间,构建目标查询语句;驱动Presto执行目标查询语句,在预设源数据库中查询更新时间在最新数据更新时间之后的增量数据;驱动Flink计算引擎将增量数据写入Hudi对应的Hudi表。通过Flink结合Presto引擎查询的能力,将增量的多表关联操作交由Presto,Flink只负责处理简单的转换逻辑,可以适应源端复杂SQL查询后输出到Hudi的写入过程,并结合Hudi高效的更新插入能力建立数据仓库。

Description

基于Flink的Hudi表增量数据写入方法及装置
技术领域
本公开涉及大数据技术领域,具体而言,涉及基于Flink的Hudi表增量数据写入方法及装置。
背景技术
目前,随着大数据时代的到来,往往将传统数据存储系统中的数据同步至大数据存储平台中进行数据分析,数据湖在大数据场景中越来越多,开源数据湖例如Iceberg,Hudi,Kudu等提供了高效的存储和大数据兼容。
现有技术中,对于从数据源到数据湖表的数据同步过程,一般采用Datax、FlinkSpark等方式来实现写入,然而,目前的写入方式无法结合源端复杂SQL查询后输出到Hudi,同时,在Flink中不适合做大规模的表关联操作,无法满足数据湖到数据仓库建模etl处理的过程,需要涉及到增量的多表关联的需求。
发明内容
本公开实施例至少提供基于Flink的Hudi表增量数据写入方法及装置,通过Flink结合Presto引擎查询的能力,将增量的多表关联操作交由Presto,Flink只负责处理简单的转换逻辑,可以适应源端复杂SQL查询后输出到Hudi的写入过程,并结合Hudi高效的更新插入能力建立数据仓库。
本公开实施例提供了基于Flink的Hudi表增量数据写入方法,包括:
提供以Presto为源端,Hudi为接收端的Flink计算引擎;
获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句;
驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据,其中,所述Presto的查询操作关联所述预设源数据库中的全量表与增量表;
驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表。
一种可选的实施方式中,在所述驱动所述Presto执行所述目标查询语句,在预设源数据库中查询存储时间在所述最新数据更新时间之后的增量数据之后,所述方法还包括:
在所述Flink计算引擎的内存中,传输并转换向所述Hudi表写入所述增量数据的写入时间;
提供数据仓库,在写入结束后,由Presto将所述写入时间作为该次写入中所述Hudi对应的数据更新时间,存储至所述数据仓库的日志表;
从所述日志表中提取最新所述数据更新时间作为下次查询的开始时间。
一种可选的实施方式中,所述获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句,具体包括:
从前次运行过程所述Flink计算引擎对应的运行日志中提取所述数据更新时间的最大值确定为所述最新数据更新时间,并保存至etl对应的增量信息表中;
以大于所述最新数据更新时间为筛选条件,所述预设源数据库为目标端,构建SQL查询语句作为所述目标查询语句。
一种可选的实施方式中,所述驱动所述Presto执行所述目标查询语句,在预设源数据库中查询存储时间在所述最新数据更新时间之后的增量数据,具体包括:
构建查询所述预设源数据库的查询链接;
驱动所述Presto执行所述目标查询语句,通过所述查询链接访问所述预设源数据库对应的数据表,其中,所述数据表包括所述全量表与所述增量表;
根据所述目标查询语句携带的所述最新数据更新时间,筛选所述数据表中,所述更新时间大于所述最新数据更新时间的数据作为所述增量数据;
返回所述增量数据至所述Flink计算引擎,并将所述增量数据转换为行数据格式存储。
一种可选的实施方式中,在所述获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句之前,所述方法还包括:
在初始化阶段,根据所述Presto的建表语句,确定所述Presto对应的协议连接以及会话配置信息;
确定所述会话配置信息中所包含的会话设置;
根据所述会话配置信息,在所述协议连接中执行所述会话设置,确定在所述预设源数据库中读取的所述增量表与所述全量表。
一种可选的实施方式中,在所述在初始化阶段,根据所述Presto的建表语句,确定所述Presto对应的协议连接以及会话配置信息之后,所述方法还包括:
获取所述建表语句对应的元数据与所述协议连接对应的元数据;
根据所述建表语句对应的元数据与所述协议连接对应的元数据,确定与字段相关联的目标元数据信息。
一种可选的实施方式中,在所述驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据之后,所述方法还包括:
确定所述目标元数据信息对应的元数据类型;
根据所述元数据类型,将所述增量数据转换为对应的rowData对象。
一种可选的实施方式中,所述驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表,具体包括:
通过所述Flink计算引擎的Flink SQL,将所述增量数据进行分区并设置对应的写入并行度;
针对每个所述写入并行度,获取该写入并行度对应的索引;
根据所述索引,查询当前所述增量数据写入所述Hudi表的写入类型,其中,所述写入类型包括更新数据、追加数据以及数据覆盖重写;
根据所述写入类型,采用预设的写入模式,将所述Hudi表中的原始数据与所述增量数据进行合并重写,生成目标列式存储文件。
一种可选的实施方式中,在所述根据所述写入类型,采用预设的写入模式,针对所述Hudi表进行合并重写,生成目标列式存储文件之后,所述方法还包括:
根据所述Hudi对应的写入记录,更新所述索引;
同步所述Hudi表与所述Hudi对应的Hive外表之间的元数据。
本公开实施例还提供基于Flink的Hudi表增量数据写入装置,包括:
架构模块,用于提供以Presto为源端,Hudi为接收端的Flink计算引擎;
查询语句构建模块,用于获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句;
增量数据查询模块,用于驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据,其中,所述Presto的查询操作关联所述预设源数据库中的全量表与增量表;
写入模块,用于驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表。
本公开实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述基于Flink的Hudi表增量数据写入方法,或上述基于Flink的Hudi表增量数据写入方法中任一种可能的实施方式中的步骤。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述基于Flink的Hudi表增量数据写入方法,或上述基于Flink的Hudi表增量数据写入方法中任一种可能的实施方式中的步骤。
本公开实施例提供的基于Flink的Hudi表增量数据写入方法及装置,通过提供以Presto为源端,Hudi为接收端的Flink计算引擎;获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句;驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据;驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表。通过Flink结合Presto引擎查询的能力,将增量的多表关联操作交由Presto,Flink只负责处理简单的转换逻辑,可以适应源端复杂SQL查询后输出到Hudi的写入过程,并结合Hudi高效的更新插入能力建立数据仓库。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种基于Flink的Hudi表增量数据写入方法的流程图;
图2示出了本公开实施例所提供的一种Hudi表增量数据写入架构的示意图;
图3示出了本公开实施例所提供的一种基于Flink的Hudi表增量数据写入装置的示意图;
图4示出了本公开实施例所提供的一种电子设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,现有技术中,对于从数据源到数据湖表的数据同步过程,一般采用Datax、Flink Spark等方式来实现写入,然而,目前的写入方式无法结合源端复杂SQL查询后输出到Hudi,同时,在Flink中不适合做大规模的表关联操作,无法满足数据湖到数据仓库建模etl处理的过程,需要涉及到增量的多表关联的需求。
基于上述研究,本公开提供了基于Flink的Hudi表增量数据写入方法及装置,通过提供以Presto为源端,Hudi为接收端的Flink计算引擎;获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句;驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据;驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表。通过Flink结合Presto引擎查询的能力,将增量的多表关联操作交由Presto,Flink只负责处理简单的转换逻辑,可以适应源端复杂SQL查询后输出到Hudi的写入过程,并结合Hudi高效的更新插入能力建立数据仓库。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种基于Flink的Hudi表增量数据写入方法进行详细介绍,本公开实施例所提供的基于Flink的Hudi表增量数据写入方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(Personal DigitalAssistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该基于Flink的Hudi表增量数据写入方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的一种基于Flink的Hudi表增量数据写入方法的流程图,所述方法包括步骤S101~S104,其中:
S101、提供以Presto为源端,Hudi为接收端的Flink计算引擎。
在具体实施中,首先搭建以Presto查询引擎为源端,数据湖Hudi为接收端的Flink计算引擎。
这里,Flink为一种分布式、高性能的流处理应用程序打造的统一计算引擎,提供了数据分发以及并行化计算的流数据处理引擎,能够同时处理批处理任务与流处理任务,其中,Flink计算引擎中以Presto为源的连接器。
具体的,Flink计算引擎的结构示意可以参见图2,如图2所示,为本公开实施例提供的一种Hudi表增量数据写入架构的示意图,其中,Presto与源数据库链接,用于在源数据库中查询数据,Presto查询到的数据通过Flink方式进行处理后写入至Hudi的Hudi表中。
这里,预设源数据库可以为Hudi。Flink的源端采用读Presto JDBC的方式,通过直连同步直接连接源数据库抽取数据,目前Flink中不支持Presto的查询,因此需要预先提供Flink对Presto JDBC的支持。
具体的,在初始化阶段,根据Presto的建表语句,确定Presto对应的协议连接以及会话配置信息;确定会话配置信息中所包含的会话设置;根据会话配置信息,在协议连接中执行会话设置,确定在预设源数据库中读取的增量表与全量表。
在具体实施中,Flink Presto连接引擎在初始化的阶段,会从Presto的建表语句中提取JDBC连接、账号、密码、执行SQL、会话(session)配置信息等等。针对提取到的会话配置信息,在JDBC连接中执行对应的会话设置,以确定预设源数据库中需要增量读的增量表,以及需要全量读的全量表。
其中,Presto对应的协议连接可以为JDBC连接。
作为一种可能的实施方式,在从Presto的建表语句中提取JDBC连接、账号、密码、执行SQL、会话配置信息之后,还可以获取所述建表语句对应的元数据与所述协议连接对应的元数据;根据所述建表语句对应的元数据与所述协议连接对应的元数据,确定与字段相关联的目标元数据信息。
这里,在完成配置信息的提取后,根据JDBC连接和建表语句的元数据,提取字段相关的元数据信息,以方便后续字段转化为Flink特有的rowData类型。
需要说明的是,当Presto从源数据库中所需要抽取的数据存在表间关联时,Flink的源端在读Presto JDBC时优选的采用读Presto的表的方式进行数据关联,可以较好适配Flink SQL。
进一步的,为适应Flink计算引擎的批处理调度,Hudi表增量数据写入架构中还提供有Azkaban调度器。
其中,Azkaban为批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。
这里,在源数据库与Flink计算引擎之间提供Azkaban调度器;通过Azkaban调度器,控制Flink计算引擎根据预设的时间间隔触发批处理。
S102、获取Hudi对应的最新数据更新时间,根据最新数据更新时间,构建目标查询语句。
该步骤中,当数据同步流程开始时,获取Flink在上一更新写入操作中,针对Hudi表进行数据更新与写入的最新更新时间,并构建以最新数据更新时间为查询条件的目标查询语句。
在具体实施中,Flink计算引擎读取Presto的每条数据的发生时间在内存中进行比对,如果比之前的时间大则更新缓存时间,如果小则不更新,最终可以得到最新数据更新时间,在Flink计算引擎结束后运行写入日志,再从日志中提取最新数据更新时间保存到etl信息表中。
这里,目标查询语句可以为SQL查询语句,适应于本申请实施例中采用Presto查询引擎实现数据抽取,因此在本实施例中,目标查询语句为Presto SQL。
其中,目标查询语句用于提供给Presto执行,以根据其中所携带的最新数据更新时间在预设源数据库中,查询预设源数据库的数据表中更新时间在Hudi的最新数据更新时间之后的数据,即为预设元数据库在Hudi的最新数据更新时间之后的增量数据。作为一种可能的实施方式,可以通过如下步骤1021-步骤1022获取最新数据更新时间,并构建目标查询语句:
S1021、从前次运行过程所述Flink计算引擎对应的运行日志中提取所述数据更新时间的最大值确定为所述最新数据更新时间,并保存至etl对应的增量信息表中。
在具体实施中,针对Flink每次写入增量数据至Hudi表的一个批处理或流处理完成后,在Flink计算引擎的内存中,设立缓存部针对向Hudi表写入增量数据的写入时间进行传输和转换。
示例性的,Flink每次向Hudi表写入增量数据的写入时间可以为:2023-01-01-00:00:00、2022-12-31-23:59:50、2022-12-31-23:59:40等,进而可以确定出数据更新时间的最大值,即在当前写入过程之前最新一次的数据更新时间为:2023-01-01-00:00:00,此时即可将2023-01-01-00:00:00这一写入时间作为最新数据更新时间,存储至Flink计算引擎的内存中的缓存部。
进一步的,在以Presto为源端,Hudi为接收端的Flink架构Flink计算引擎结构中提供数据仓库,在Flink写入操作结束后,数据被写入Hudi表的时间,作为该次写入中Hudi对应的数据更新时间,存储至数据仓库的日志表。
可选的,数据仓库可以为预先构建好的etl数据调度程序。
进一步的,在下一Flink写入Hudi表流程中,以数据仓库中的日志表所存储的数据更新时间数值的最大值,作为Hudi对应的最新数据更新时间。
S1022、以大于最新数据更新时间为筛选条件,预设源数据库为目标端,构建SQL查询语句作为目标查询语句。
在具体实施中,将大于最新数据更新时间作为数据筛选条件,并指示预设元数据库中的数据表作为数据抽取的目标端,构建SQL查询语句。
这里,Flink Presto连接源提供自定义SQL查询,可先由Presto进行SQL查询,查询后由Flink负责转换逻辑处理。
示例性的,SQL查询语句可以为如下形式:select*from{源端表}wherelastupdatetime>’2023-01-01-00:00:00’,代表在“源端表”内查询数据更新时间在2023-01-01-00:00:00之后的增量数据。
S103、驱动Presto执行目标查询语句,在预设源数据库中查询更新时间在最新数据更新时间之后的增量数据,其中,所述查询操作关联全量表与增量表。
在具体实施中,通过Presto JDBC驱动Flink源端以预设源数据库为目标执行目标查询语句,即执行Presto SQL语句,在预设源数据库中实现数据更新时间在Hudi的最新数据更新时间之后的增量数据。
这里,针对预设源数据库中,数据表之间的表间关联,优选采用读Presto的表的方式进行数据关联,可以较好适配Flink SQL。
需要说明的是,在Presto查询过程中,针对预设源数据库中全量表与增量表进行关联查询,主要可以包括增量表和全量表的关联、增量表和增量表的关联。
其中,预设源数据库可以为Hudi。
进一步的,在预设源数据库中查询更新时间在最新数据更新时间之后的增量数据之后,确定所述目标元数据信息对应的元数据类型;根据所述元数据类型,将所述增量数据转换为对应的rowData对象。
这里,Presto执行目标查询语句并返回增量数据,根据前述提取的字段相关的元数据信息对应的类型,将增量数据转换为对应的rowData对象。
需要说明的是,在Flink将rowData对象数据发送至下游Hudi之前,Presto采用逐条获取数据的方式,可以提取并比较每条增量数据的增量时间,将最大增量时间的数据时间戳进行缓存,并在数据写入任务结束后,从缓存获取最大数据时间戳并打印。
作为一种可能的实施方式,可以通过如下步骤S1031-步骤S1034,在预设源数据库中查询更新时间在最新数据更新时间之后的增量数据:
S1031、构建查询所述预设源数据库的查询链接。
S1032、驱动所述Presto执行所述目标查询语句,通过所述查询链接访问所述预设源数据库对应的数据表。
S1033、根据所述目标查询语句携带的所述最新数据更新时间,筛选所述数据表中,所述更新时间大于所述最新数据更新时间的数据作为所述增量数据。
S1034、返回所述增量数据至所述Flink计算引擎,并将所述增量数据转换为行数据格式存储。
在具体实施中,通过Flink源端的Presto JDBC,在数据仓库的日志表中获取到Hudi上次增量数据写入的最新数据更新时间之后,生成查询需要写入Hudi表中增量数据的Presto SQl查询语句,并驱动Presto以预设源数据库为目标执行Presto SQl查询语句。
在此过程中,Presto搭建与预设源数据库之间的查询链接,通过该查询链接与预设源数据库实现通讯,访问预设源数据库,根据Presto SQl查询语句中所携带的Hudi最新数据更新时间,在预设源数据库对应的数据表中,筛选出更新时间在最新数据更新时间之后的增量数据,并将增量数据通过Presto JDBC返回至Flink源端。
这里,通过Presto JDBC返回至Flink源端的增量数据需要转换至行数据(RowData)格式存储,以便于Flink SQL的识别处理。
作为一种可能的实施方式,还可以将Presto JDBC返回增量数据至Flink的时间作为Hudi的数据更新时间,在Presto数据查询任务结束后打印该数据更新时间,由预设数据仓库的日志表提取该数据更新时间进行存储。
S104、驱动Flink计算引擎将增量数据写入Hudi对应的Hudi表。
该步骤中,通过Flink计算引擎对应的FlinkSQL,构建以Presto为源端的源端表,并以指定的Hudi表为目标端表,通过运行Flink内部的数据传输以及数据转换算子,将Presto查询到的增量数据写入至指定的Hudi表。
这里,Flink将增量数据写入Hudi表的方式可以为Upsert写入方式,而针对初始化写入Hudi的数据,Flink的数据写入方式可以为Bulk Insert方式以及普通的追加模式Insert。
作为一种可能的实施方式,可以通过如下步骤S1041-步骤S1044实现将增量数据写入Hudi表:
S1041、通过Flink计算引擎的Flink SQL,将增量数据进行分区并设置对应的写入并行度。
S1042、针对每个写入并行度,获取该写入并行度对应的索引。
S1043、根据索引,查询当前增量数据写入Hudi表的写入类型,其中,所述写入类型包括更新数据、追加数据以及数据覆盖重写。
S1044、根据写入类型,采用预设的写入模式,将Hudi表中的原始数据与增量数据进行合并重写,生成目标列式存储文件。
在具体实施中,通过Flink SQL,将增量数据的数据集根据预设规则划分为不同的子集,将每个子集作为一个独立的分区,由集群中不同的机器或者是同一台机器不同的处理核进行分区并行处理,针对每个写入并行度,获取该写入并行度对应的索引。
这里,索引建立了包含记录键(record key)的Hudi主键(hoodie key)与Hudi文件组之间的唯一映射关系,该映射关系在数据写入Hudi文件组之后保持不变,即一个文件组包含了一批写入数据的全部版本写入记录,更新的增量数据通过索引可以快速被定位至对应的Hudi文件组。
进一步的,在增量数据的写入过程中,通过查找索引确定当前写入记录所属的Hudi文件组,可以将增量数据打上更新数据(Update)以及插入数据(Insert)的标签,并采用预设的写入模式进行增量数据的合并重写操作。
这里,更新数据对应采用更新数据写入类型,即得到写入Hudi文件组写入记录的旧位置,而插入数据对应采用插入数据写入类型,即为插入Hhudi的记录分配一个新的Hudi文件组写入记录位置。
其中,Hudi的写入模式包括写时复制与读时合并。
具体的,在写时复制模式下,更新数据与插入数据直接同步合并Hudi表原文件中的原始数据,重写索引命中的Hudi文件组中整个列数据文件,得到目标列式存储文件。在读时合并模式下,使用列式与行式文件组合进行数据存储,在处理增量数据时,将写入记录更新到行式的增量文件,并进行异步或同步的压缩,创建列式文件的新版本得到目标列式存储文件。在读取增量数据集时,需要将增量文件与旧文件进行合并,生成新版本的目标列式存储文件。
作为一种可能的实施方式,在步骤1044之后,还可以根据所述Hudi对应的写入记录,更新所述索引;同步Hudi表与述Hudi对应的Hive外表之间的元数据。
这里,在将增量数据写入至目标列式存储文件之后,更新索引以更新写入记录与Hudi文件组之间的映射关系,同时,适配于Presto查询引擎,需要依赖Hive元数据才能进行查询。
具体的,比较Hive外表和Hudi表之间的当前表结构和分区,确定Hudi表中是否存在新增字段和新增分区,若存在,则添加对应的字段和分区至Hive外表,以实现Hive源数据同步,以保证Hudi新写入分区的查询。
本公开实施例提供的基于Flink的Hudi表增量数据写入方法,通过提供以Presto为源端,Hudi为接收端的Flink计算引擎;获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句;驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据;驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表。通过Flink结合Presto引擎查询的能力,将增量的多表关联操作交由Presto,Flink只负责处理简单的转换逻辑,可以适应源端复杂SQL查询后输出到Hudi的写入过程,并结合Hudi高效的更新插入能力建立数据仓库。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与基于Flink的Hudi表增量数据写入方法对应的基于Flink的Hudi表增量数据写入装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述基于Flink的Hudi表增量数据写入方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
请参阅图3,图3为本公开实施例提供的基于Flink的Hudi表增量数据写入装置的示意图之。如图3中所示,本公开实施例提供的基于Flink的Hudi表增量数据写入装置300包括:
架构模块310,用于提供以Presto为源端,Hudi为接收端的Flink计算引擎。
查询语句构建模块320,用于获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句。
增量数据查询模块330,用于驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据其中,所述Presto的查询操作关联所述预设源数据库中的全量表与增量表。
写入模块340,用于驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本公开实施例提供的基于Flink的Hudi表增量数据写入装置,通过提供以Presto为源端,Hudi为接收端的Flink计算引擎;获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句;驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据;驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表。通过Flink结合Presto引擎查询的能力,将增量的多表关联操作交由Presto,Flink只负责处理简单的转换逻辑,可以适应源端复杂SQL查询后输出到Hudi的写入过程,并结合Hudi高效的更新插入能力建立数据仓库。
对应于图1中的基于Flink的Hudi表增量数据写入方法,本公开实施例还提供了一种电子设备400,如图4所示,为本公开实施例提供的电子设备400结构示意图,包括:
处理器41、存储器42、和总线43;存储器42用于存储执行指令,包括内存421和外部存储器422;这里的内存421也称内存储器,用于暂时存放处理器41中的运算数据,以及与硬盘等外部存储器422交换的数据,处理器41通过内存421与外部存储器422进行数据交换,当所述电子设备400运行时,所述处理器41与所述存储器42之间通过总线43通信,使得所述处理器41执行图1中的基于Flink的Hudi表增量数据写入方法的步骤。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的基于Flink的Hudi表增量数据写入方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品包括有计算机指令,所述计算机指令被处理器执行时可以执行上述方法实施例中所述的基于Flink的Hudi表增量数据写入方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。

Claims (10)

1.基于Flink的Hudi表增量数据写入方法,其特征在于,包括:
提供以Presto为源端,Hudi为接收端的Flink计算引擎;
获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句;
驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据,其中,所述Presto的查询操作关联所述预设源数据库中的全量表与增量表;
驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表。
2.根据权利要求1所述的方法,其特征在于,在所述驱动所述Presto执行所述目标查询语句,在预设源数据库中查询存储时间在所述最新数据更新时间之后的增量数据之后,所述方法还包括:
在所述Flink计算引擎的内存中,传输并转换向所述Hudi表写入所述增量数据的写入时间;
提供数据仓库,在写入结束后,由Presto将所述写入时间作为该次写入中所述Hudi对应的数据更新时间,存储至所述数据仓库的日志表;
从所述日志表中提取最新所述数据更新时间作为下次查询的开始时间。
3.根据权利要求2所述的方法,其特征在于,所述获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句,具体包括:
从前次运行过程所述Flink计算引擎对应的运行日志中提取所述数据更新时间的最大值确定为所述最新数据更新时间,并保存至etl对应的增量信息表中;
以大于所述最新数据更新时间为筛选条件,所述预设源数据库为目标端,构建SQL查询语句作为所述目标查询语句。
4.根据权利要求1所述的方法,其特征在于,所述驱动所述Presto执行所述目标查询语句,在预设源数据库中查询存储时间在所述最新数据更新时间之后的增量数据,具体包括:
构建查询所述预设源数据库的查询链接;
驱动所述Presto执行所述目标查询语句,通过所述查询链接访问所述预设源数据库对应的数据表,其中,所述数据表包括所述全量表与所述增量表;
根据所述目标查询语句携带的所述最新数据更新时间,筛选所述数据表中,所述更新时间大于所述最新数据更新时间的数据作为所述增量数据;
返回所述增量数据至所述Flink计算引擎,并将所述增量数据转换为行数据格式存储。
5.根据权利要求1所述的方法,其特征在于,在所述获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句之前,所述方法还包括:
在初始化阶段,根据所述Presto的建表语句,确定所述Presto对应的协议连接以及会话配置信息;
确定所述会话配置信息中所包含的会话设置;
根据所述会话配置信息,在所述协议连接中执行所述会话设置,确定在所述预设源数据库中读取的所述增量表与所述全量表。
6.根据权利要求5所述的方法,其特征在于,在所述在初始化阶段,根据所述Presto的建表语句,确定所述Presto对应的协议连接以及会话配置信息之后,所述方法还包括:
获取所述建表语句对应的元数据与所述协议连接对应的元数据;
根据所述建表语句对应的元数据与所述协议连接对应的元数据,确定与字段相关联的目标元数据信息。
7.根据权利要求6所述的方法,其特征在于,在所述驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据之后,所述方法还包括:
确定所述目标元数据信息对应的元数据类型;
根据所述元数据类型,将所述增量数据转换为对应的rowData对象。
8.根据权利要求1所述的方法,其特征在于,所述驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表,具体包括:
通过所述Flink计算引擎的Flink SQL,将所述增量数据进行分区并设置对应的写入并行度;
针对每个所述写入并行度,获取该写入并行度对应的索引;
根据所述索引,查询当前所述增量数据写入所述Hudi表的写入类型,其中,所述写入类型包括更新数据、追加数据以及数据覆盖重写;
根据所述写入类型,采用预设的写入模式,将所述Hudi表中的原始数据与所述增量数据进行合并重写,生成目标列式存储文件。
9.根据权利要求8所述的方法,其特征在于,在所述根据所述写入类型,采用预设的写入模式,针对所述Hudi表进行合并重写,生成目标列式存储文件之后,所述方法还包括:
根据所述Hudi对应的写入记录,更新所述索引;
同步所述Hudi表与所述Hudi对应的Hive外表之间的元数据。
10.基于Flink的Hudi表增量数据写入装置,其特征在于,包括:
架构模块,用于提供以Presto为源端,Hudi为接收端的Flink计算引擎;
查询语句构建模块,用于获取所述Hudi对应的最新数据更新时间,根据所述最新数据更新时间,构建目标查询语句;
增量数据查询模块,用于驱动所述Presto执行所述目标查询语句,在预设源数据库中查询更新时间在所述最新数据更新时间之后的增量数据,其中,所述Presto的查询操作关联所述预设源数据库中的全量表与增量表;
写入模块,用于驱动所述Flink计算引擎将所述增量数据写入所述Hudi对应的Hudi表。
CN202311001141.0A 2023-08-09 2023-08-09 基于Flink的Hudi表增量数据写入方法及装置 Pending CN116991860A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311001141.0A CN116991860A (zh) 2023-08-09 2023-08-09 基于Flink的Hudi表增量数据写入方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311001141.0A CN116991860A (zh) 2023-08-09 2023-08-09 基于Flink的Hudi表增量数据写入方法及装置

Publications (1)

Publication Number Publication Date
CN116991860A true CN116991860A (zh) 2023-11-03

Family

ID=88529967

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311001141.0A Pending CN116991860A (zh) 2023-08-09 2023-08-09 基于Flink的Hudi表增量数据写入方法及装置

Country Status (1)

Country Link
CN (1) CN116991860A (zh)

Similar Documents

Publication Publication Date Title
CN110032604B (zh) 数据存储装置、转译装置及数据库访问方法
US10838940B1 (en) Balanced key range based retrieval of key-value database
CN111046034B (zh) 管理内存数据及在内存中维护数据的方法和系统
TWI521363B (zh) Method, device and system for implementing incremental data extraction
CN108536761A (zh) 报表数据查询方法及服务器
US20200210399A1 (en) Signature-based cache optimization for data preparation
CN113297320B (zh) 分布式数据库系统及数据处理方法
CN111324610A (zh) 一种数据同步的方法及装置
CN104899295B (zh) 一种异构数据源数据关联分析方法
CN102779138B (zh) 实时数据的硬盘存取方法
CN105373541A (zh) 数据库的数据操作请求的处理方法和系统
US10824612B2 (en) Key ticketing system with lock-free concurrency and versioning
CN103268343A (zh) 将关系数据库和缓存透明结合的系统和方法
CN112612827A (zh) 数据库分页查询方法、装置、计算机设备及存储介质
CN110928900B (zh) 多表数据的查询方法、装置、终端以及计算机存储介质
WO2023197865A1 (zh) 一种信息存储方法及装置
CN112527900A (zh) 一种数据库读多副本一致性的方法、装置、设备及介质
US8005844B2 (en) On-line organization of data sets
CN116991860A (zh) 基于Flink的Hudi表增量数据写入方法及装置
CN1037045A (zh) 对关系数据库的数据项(objelt)进行有效分析的系统和方法
CN114840497B (zh) 一种数据库的行迁移预处理方法、系统、装置及存储介质
WO2022223038A1 (zh) 一种键名称生成方法、装置和计算机可读存储介质
CN115617845A (zh) 数据共享方法、设备及存储介质
CN109063201B (zh) 一种基于混合存储方案的impala在线交互式查询方法
CN104166734A (zh) 一种svn全文检索系统及检索方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination