掌桥专利:专业的专利平台
掌桥专利
首页

一种数据变更方法、装置、设备及计算机可读存储介质

文献发布时间:2023-06-19 13:46:35


一种数据变更方法、装置、设备及计算机可读存储介质

技术领域

本申请涉及大数据技术领域,特别涉及一种数据变更方法、装置、电子设备及计算机可读存储介质。

背景技术

随着大数据技术的发展,近年来兴起了一种针对数据湖的大数据表格式组件——数据湖表格式组件。它可提供批流一体、数据变更(更新和删除)、时间旅行等功能,其中,最有代表的组件是DeltaLake、Apache Iceberg、Apache Hudi等。

在数据湖表格式组件中,数据变更(更新或者删除)主要有COW和MOR两种方式。当前,不论是Apache Iceberg、Apache Hudi,还是DeltaLake,COW的实现方案一般均是,只要某个文件有数据需要变更,便将整个数据文件的数据全部一条条读取出来,进行完数据更新或者删除处理后再写入新的文件。

由于该方案会将该文件的所有数据都读出并一条条处理,即所有的数据都要被处理一遍,因此极大降低了读写效率。特别地,当存储的文件格式是列存格式时,读取时还存在一个列转行的过程,写入时还存在一个行转列的过程,显然,此类文件按照传统COW方案进行处理时的读写效率将受到极大影响。

鉴于此,提供一种解决上述技术问题的方案,已经是本领域技术人员所亟需关注的。

发明内容

本申请的目的在于提供一种数据湖表格式组件中的数据变更方法、装置、电子设备及计算机可读存储介质,以便有效提高数据变更过程中的读写效率。

为解决上述技术问题,一方面,本申请公开了一种数据变更方法,包括:

针对第一文件中的任一文件块,判断所述文件块是否需要变更数据;

若所述文件块需要变更数据,则将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块;

若所述文件块不需变更数据,则将所述文件块的数据整块复制到所述第二文件中对应位置的文件块。

可选地,所述第一文件为列式存储文件;所述将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块,包括:

通过行列变换,将从所述文件块中按列读出的数据进行数据变更,并按列写入所述第二文件中对应位置的文件块。

可选地,所述通过行列变换,将从所述文件块中按列读出的数据进行数据变更,并按列写入所述第二文件中对应位置的文件块,包括:

从所述文件块中按列取出数据列作为一个行元素进行列转行变换;

对所述行元素中的数据进行数据变更处理;

在所述文件块中的数据列均被处理完后,将变更后的各个行元素进行行转列变换,以按列写入所述第二文件中对应位置的文件块。

可选地,所述第一文件为行式存储文件;所述将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块,包括:

将从所述文件块中按行读出的数据进行数据变更,并按行写入所述第二文件中对应位置的文件块。

可选地,所述将从所述文件块中按行读出的数据进行数据变更,并按行写入所述第二文件中对应位置的文件块,包括:

从所述文件块中按行取出数据行作为一个行元素;

对所述行元素中的数据进行数据变更处理;

在所述文件块中的数据行均被处理完后,将变更后的各个行元素按行写入所述第二文件中对应位置的文件块。

可选地,在所述针对第一文件中的任一文件块,判断所述文件块是否需要变更数据之前,还包括:

根据数据变更指令确定需要进行变更的目标数据;

将所述目标数据所在的文件确定为所述第一文件。

可选地,在将所述目标数据所在的文件确定为所述第一文件之后、在所述针对第一文件中的任一文件块,判断所述文件块是否需要变更数据之前,还包括:

确定所述目标数据在所述第一文件中对应的行号;

将与所述行号对应的文件块识别为需要进行数据变更的文件块,并生成记录文件;

所述针对第一文件中的任一文件块,判断所述文件块是否需要变更数据,包括:

针对第一文件中的任一文件块,在所述记录文件中进行匹配检索;

若匹配成功,则判定所述文件块需要变更数据;

若匹配失败,则判定所述文件块不需变更数据。

又一方面,本申请公开了一种数据变更装置,包括:

判断模块,用于针对第一文件中的任一文件块,判断所述文件块是否需要变更数据;

变更模块,用于在所述文件块需要变更数据时,将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块;

复制模块,用于在所述文件块不需变更数据时,将所述文件块的数据整块复制到所述第二文件中对应位置的文件块。

可选地,所述第一文件为列式存储文件;所述变更模块在将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块时,具体用于:

通过行列变换,将从所述文件块中按列读出的数据进行数据变更,并按列写入所述第二文件中对应位置的文件块。

可选地,所述变更模块在通过行列变换,将从所述文件块中按列读出的数据进行数据变更,并按列写入所述第二文件中对应位置的文件块时,具体用于:

从所述文件块中按列取出数据列作为一个行元素进行列转行变换;对所述行元素中的数据进行数据变更处理;在所述文件块中的数据列均被处理完后,将变更后的各个行元素进行行转列变换,以按列写入所述第二文件中对应位置的文件块。

可选地,所述第一文件为行式存储文件;所述变更模块在将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块时,具体用于:

将从所述文件块中按行读出的数据进行数据变更,并按行写入所述第二文件中对应位置的文件块。

可选地,所述变更模块在将从所述文件块中按行读出的数据进行数据变更,并按行写入所述第二文件中对应位置的文件块时,具体用于:

从所述文件块中按行取出数据行作为一个行元素;对所述行元素中的数据进行数据变更处理;在所述文件块中的数据行均被处理完后,将变更后的各个行元素按行写入所述第二文件中对应位置的文件块。

可选地,还包括:

确定模块,用于在所述判断模块针对第一文件中的任一文件块,判断所述文件块是否需要变更数据之前,根据数据变更指令确定需要进行变更的目标数据;将所述目标数据所在的文件确定为所述第一文件。

可选地,所述确定模块还用于:

在将所述目标数据所在的文件确定为所述第一文件之后,在所述判断模块针对第一文件中的任一文件块,判断所述文件块是否需要变更数据之前,确定所述目标数据在所述第一文件中对应的行号;将与所述行号对应的文件块识别为需要进行数据变更的文件块,并生成记录文件;

所述判断模块在针对第一文件中的任一文件块,判断所述文件块是否需要变更数据时,具体用于:

针对第一文件中的任一文件块,在所述记录文件中进行匹配检索;若匹配成功,则判定所述文件块需要变更数据;若匹配失败,则判定所述文件块不需变更数据。

又一方面,本申请还公开了一种电子设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序以实现如上所述的任一种数据变更方法的步骤。

又一方面,本申请还公开了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时用以实现如上所述的任一种数据变更方法的步骤。

本申请所提供的数据变更方法、装置、电子设备及计算机可读存储介质所具有的有益效果是:本申请通过区分文件中的各个文件块是否需要变更数据,进而将数据变更的粒度从文件级别细分到文件块级别,有效避免了不必要的分条读取数据过程,极大提高了数据变更的读写效率。

附图说明

为了更清楚地说明现有技术和本申请实施例中的技术方案,下面将对现有技术和本申请实施例描述中需要使用的附图作简要的介绍。当然,下面有关本申请实施例的附图描述的仅仅是本申请中的一部分实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图,所获得的其他附图也属于本申请的保护范围。

图1为现有技术中一种数据变更方法的示意图;

图2为本申请实施例公开的一种数据变更方法的流程图;

图3为本申请实施例公开的一种数据变更方法的示意图;

图4为本申请实施例公开的一种数据变更装置的结构框图;

图5为本申请实施例公开的一种电子设备的结构框图。

具体实施方式

本申请的核心在于提供一种数据变更方法、装置、电子设备及计算机可读存储介质,以便有效提高数据变更过程中的读写效率。

为了对本申请实施例中的技术方案进行更加清楚、完整地描述,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行介绍。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

随着大数据技术的发展,近年来兴起了一种针对数据湖的大数据表格式组件——数据湖表格式组件。它可提供批流一体、数据变更(更新和删除)、时间旅行等功能,其中,最有代表的组件是DeltaLake、Apache Iceberg、Apache Hudi等。

在数据湖表格式组件中,数据变更(更新或者删除)主要有COW(Copy-On-Write,写时拷贝)和MOR(Merge-On-Read,读时合并)两种方式。其中,COW是指在数据变更时,将待修改的原始数据和变更数据合并处理后写入新的数据文件,从而避免读数据时的合并开销。MOR是指在变更数据时,将变更的数据新写文件而不和待修改的原始数据合并。

当前,不论是Apache Iceberg、Apache Hudi,还是DeltaLake,COW的实现方案一般均是,只要某个文件有数据需要变更,便将整个数据文件的数据全部一条条读取出来,进行完数据更新或者删除处理后再写入新的文件。

由于该方案会将该文件的所有数据都读出并一条条处理,即所有的数据都要被处理一遍,因此极大降低了读写效率。特别地,当存储的文件格式是列存格式(如ORC文件格式或者Parquet文件格式)时,读取时还存在一个列转行的过程,写入时还存在一个行转列的过程,具体如图1所示。

具体地,在采用如ORC或者Parquet等列存格式的文件中,一般是将表数据横切成多个文件块即Block,(一个Block可称为Stripe),每个文件块又会按列纵切成多个文件条即Column。一张表可以包括多个ORC文件,一个ORC文件一般包含多个Block。对于此结构的文件,在按传统方案进行COW时,便需要将Column一个个读出并变更处理,显然,此类文件按照传统COW方案进行处理时,读写效率更是将会受到极大影响。鉴于此,本申请提供了一种数据湖表格式组件中的数据变更方案,可有效解决上述问题。

参见图2所示,本申请实施例公开了一种数据变更方法,主要包括:

S101:针对第一文件中的任一文件块,判断该文件块是否需要变更数据;若是,则进入S102;若否,则进入S103。

S102:将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块。

S103:将该文件块的数据整块复制到第二文件中对应位置的文件块。

容易理解的是,在第一文件的一个文件块经上述步骤S101-S103处理完成后,便可自动对下一个文件块进行上述步骤中的处理过程,直至第一文件中所有文件块均被处理完。

需要指出的是,本申请所提供的数据变更方法,可具体应用于数据湖表格式组件中。其中,第一文件即需要进行数据变更的文件,可称为“原文件”;第二文件即以MOR方式进行数据变更后生成的文件,可称为“新文件”。需要强调的是,在数据变更过程中,本申请具体对第一文件中的每一个文件块即Block是否需要变更数据均进行了识别,从而将数据变更的粒度从文件级别细分到了文件块级别。

具体地,当需要变更的数据只涉及到第一文件中的某些数据块时,本申请便只针对这些数据块按照传统实现方案一条条地提取数据并做变更处理;而对于不涉及数据变更的文件块,本申请则不再按条处理,而是整块读取并整块写入第二文件。如此,对于这些无需进行数据变更的数据块,本申请便有效减少了中间的分条读取处理过程,可以极大提高读写效率。

具体可参见图3所示的一种数据变更方法的示意图。在图3中,不妨假设第一文件包含三个Block,其中,仅有Block1需要变更数据,而Block2和Block3则均不需要变更数据。

如此,本申请便仅针对第一文件的Block1将其中的数据一条条地读取出进行对应的数据变更处理,然后将变更完成的Block1的数据再写入第二文件的Block1中。而对于第一文件的Block2和Block3,本申请则无需按条处理,而是分别整块读取并分别写入到第二文件的Block2和Block3。如此,Block2和Block3的数据将因直接整块复制和写入第二文件而极大地缩短了数据处理耗时,提高了数据读写效率。

可见,本申请所提供的数据湖表格式组件中的数据变更方法,通过区分文件中的各个文件块是否需要变更数据,进而将数据变更的粒度从文件级别细分到文件块级别,有效避免了不必要的分条读取数据过程,极大提高了数据变更的读写效率。

作为一种具体实施例,本申请实施例所提供的数据湖表格式组件中的数据变更方法在上述内容的基础上,第一文件为列式存储文件;所述将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块,包括:

通过行列变换,将从所述文件块中按列读出的数据进行数据变更,并按列写入所述第二文件中对应位置的文件块。

需要说明的是,在这些列式存储文件中,数据是按列存储的,因此,在数据读取时存在一个列转行的过程,在数据写入时还存在一个行转列的过程,显然,这些行列转化将会消耗一定的处理时间。而本申请通过将不涉及数据变更的文件块整块复制到第二文件中,不仅省却了数据逐条读取和处理的过程,而且还省却了行列转换的过程,可极大地提高数据变更处理效率。

例如,对于一个128MB的ORC文件,其中的数据量将近为四百万条,并分成4个Block。如果需要变更的数据只涉及其中的一个Block,则本申请只需要对这1/4的数据逐条读取并变更处理,另外3/4的数据则可以整块读取并整块写入,不需要行列转化。如此,对于该文件本申请最多能节省3/4的处理时间。

实际上,在大数据应用场景中,一个表中可能包括成百上千个ORC文件,甚至更多。如果每个文件均能节省出数据处理时间,那么整体的数据读写效率的提升量将是非常可观的,可能原本需要几个小时才能完成的数据变更任务,经本申请的技术方案仅需几十分钟便可完成,取得非常明显的速度提升。

作为一种具体实施例,本申请实施例所提供的数据湖表格式组件中的数据变更方法在上述内容的基础上,所述通过行列变换,将从所述文件块中按列读出的数据进行数据变更,并按列写入所述第二文件中对应位置的文件块,包括:

从文件块中按列取出数据列作为一个行元素进行列转行变换;

对行元素中的数据进行数据变更处理;

在文件块中的数据列均被处理完后,将变更后的各个行元素进行行转列变换,以按列写入第二文件中对应位置的文件块。

具体地,可对照参见图3。图3所示的数据变更过程中的第一文件是一种列式存储格式的文件,具体例如ORC或者Parquet文件格式。图3中Block1为涉及数据变更的数据块,本申请每从中提取一条条数据即一个个数据列Column后,便可进行行列转换并变更数据,然后再一列列写入第二文件的Block1。而对于Block和Block3,本申请则直接整块复制写入。

作为一种具体实施例,本申请实施例所提供的数据湖表格式组件中的数据变更方法在上述内容的基础上,第一文件为行式存储文件;所述将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块,包括:

将从所述文件块中按行读出的数据进行数据变更,并按行写入所述第二文件中对应位置的文件块。

容易理解的是,对于行式存储格式的文件,本申请则是将涉及数据变更的文件块中数据按行读出,进行完数据变更处理后再写入第二文件中。

作为一种具体实施例,本申请实施例所提供的数据湖表格式组件中的数据变更方法在上述内容的基础上,所述将从所述文件块中按行读出的数据进行数据变更,并按行写入所述第二文件中对应位置的文件块,包括:

将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块,包括:

从文件块中按行取出数据行作为一个行元素;

对行元素中的数据进行数据变更处理;

在文件块中的数据行均被处理完后,将变更后的各个行元素按行写入第二文件中对应位置的文件块。

作为一种具体实施例,本申请实施例所提供的数据湖表格式组件中的数据变更方法在上述内容的基础上,在所述针对第一文件中的任一文件块,判断所述文件块是否需要变更数据之前,还包括:

根据数据变更指令确定需要进行变更的目标数据;

将目标数据所在的文件确定为第一文件。

具体地,在数据湖表格式组件中具体可通过相关指令来执行操作。在用户输入数据变更指令后,可根据该数据变更指令确定需要变更(包括修改或删除)的目标数据。由于通常一个表中可能包含有成百上千个文件,因此可检索出包含有该目标数据的文件有哪些,这些文件即为需要变更数据的第一文件。

作为一种具体实施例,本申请实施例所提供的数据湖表格式组件中的数据变更方法在上述内容的基础上,在将所述目标数据所在的文件确定为所述第一文件之后、在所述针对第一文件中的任一文件块,判断所述文件块是否需要变更数据之前,还包括:

确定目标数据在第一文件中对应的行号;

将与行号对应的文件块识别为需要进行数据变更的文件块,并生成记录文件;

针对第一文件中的任一文件块,判断文件块是否需要变更数据,包括:

针对第一文件中的任一文件块,在记录文件中进行匹配检索;

若匹配成功,则判定文件块需要变更数据;

若匹配失败,则判定文件块不需变更数据。

具体地,为了便于确定第一文件中各个文件块是否需要变更数据,本申请针对每个第一文件,首先查找确定出了目标数据所在的行号,根据行号便可对应确定出目标数据所在的文件块,进而将这些文件块信息存储在记录文件中。如此,每当需要判断一个文件块是否需要变更数据时,本申请只需在记录文件中进行匹配检索即可,如若匹配成功,则说明该文件块包含了该目标数据,需要进行数据变更;否则反之。

还需说明的是,一般数据湖表格式组件中的数据操作是以开启任务的形式来执行的。因此,当第一文件中的文件块数量较多时,为了提高数据变更处理效率,本申请也可选择性地开启多个任务同时对该第一文件进行处理。例如,若一个第一文件中涉及数据变更的文件块有4个,则可以同时开启两个任务,每个任务分别处理其中的2个文件块。本领域技术人员可根据实际应用需求自行选择并设置,本申请对此并不进行限定。

参见图4所示,本申请实施例公开了一种数据湖表格式组件中的数据变更装置,主要包括:

判断模块201,用于针对第一文件中的任一文件块,判断文件块是否需要变更数据;

变更模块202,用于在文件块需要变更数据时,将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块;

复制模块203,用于在文件块不需变更数据时,将文件块的数据整块复制到第二文件中对应位置的文件块。

可见,本申请实施例所公开的数据湖表格式组件中的数据变更装置,通过区分文件中的各个文件块是否需要变更数据,进而将数据变更的粒度从文件级别细分到文件块级别,有效避免了不必要的分条读取数据过程,极大提高了数据变更的读写效率。

关于上述数据湖表格式组件中的数据变更装置的具体内容,可参考前述关于数据湖表格式组件中的数据变更方法的详细介绍,这里就不再赘述。

作为一种具体实施例,本申请实施例所公开的数据湖表格式组件中的数据变更装置在上述内容的基础上,第一文件为列式存储文件;变更模块202在将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块时,具体用于:

通过行列变换,将从所述文件块中按列读出的数据进行数据变更,并按列写入所述第二文件中对应位置的文件块。

可选地,所述变更模块202在通过行列变换,将从所述文件块中按列读出的数据进行数据变更,并按列写入所述第二文件中对应位置的文件块时,具体用于:

从文件块中按列取出数据列作为一个行元素进行列转行变换;对行元素中的数据进行数据变更处理;在文件块中的数据列均被处理完后,将变更后的各个行元素进行行转列变换,以按列写入第二文件中对应位置的文件块。

作为一种具体实施例,本申请实施例所公开的数据湖表格式组件中的数据变更装置在上述内容的基础上,第一文件为行式存储文件;变更模块202在将从中按条读出的数据经数据变更后写入第二文件中对应位置的文件块时,具体用于:

将从所述文件块中按行读出的数据进行数据变更,并按行写入所述第二文件中对应位置的文件块。

可选地,所述变更模块202在将从所述文件块中按行读出的数据进行数据变更,并按行写入所述第二文件中对应位置的文件块时,具体用于:

从文件块中按行取出数据行作为一个行元素;对行元素中的数据进行数据变更处理;在文件块中的数据行均被处理完后,将变更后的各个行元素按行写入第二文件中对应位置的文件块。

作为一种具体实施例,本申请实施例所公开的数据湖表格式组件中的数据变更装置在上述内容的基础上,还包括:

确定模块,用于在所述判断模块201针对第一文件中的任一文件块,判断所述文件块是否需要变更数据之前,根据数据变更指令确定需要进行变更的目标数据;将目标数据所在的文件确定为第一文件。

作为一种具体实施例,本申请实施例所公开的数据湖表格式组件中的数据变更装置在上述内容的基础上,确定模块还用于:

在将所述目标数据所在的文件确定为所述第一文件之后,在所述判断模块201针对第一文件中的任一文件块,判断所述文件块是否需要变更数据之前,确定目标数据在第一文件中对应的行号;将与行号对应的文件块识别为需要进行数据变更的文件块,并生成记录文件;

判断模块201在针对第一文件中的任一文件块,判断文件块是否需要变更数据时,具体用于:

针对第一文件中的任一文件块,在记录文件中进行匹配检索;若匹配成功,则判定文件块需要变更数据;若匹配失败,则判定文件块不需变更数据。

参见图5所示,本申请实施例公开了一种电子设备,包括:

存储器301,用于存储计算机程序;

处理器302,用于执行所述计算机程序以实现如上所述的任一种数据变更方法的步骤。

进一步地,本申请实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时用以实现如上所述的任一种数据变更方法的步骤。

关于上述电子设备和计算机可读存储介质的具体内容,可参考前述关于数据湖表格式组件中的数据变更方法的详细介绍,这里就不再赘述。

本申请中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的设备而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

还需说明的是,在本申请文件中,诸如“第一”和“第二”之类的关系术语,仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或者操作之间存在任何这种实际的关系或者顺序。此外,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本申请所提供的技术方案进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请的保护范围内。

相关技术
  • 一种降低关系型数据库表结构变更所带来损耗的方法、装置、计算机设备、和可读存储介质
  • 权限变更方法、装置、计算机设备和计算机可读存储介质
技术分类

06120113807954