CN116028514A - 数据更新方法及装置 - Google Patents
数据更新方法及装置 Download PDFInfo
- Publication number
- CN116028514A CN116028514A CN202211659621.1A CN202211659621A CN116028514A CN 116028514 A CN116028514 A CN 116028514A CN 202211659621 A CN202211659621 A CN 202211659621A CN 116028514 A CN116028514 A CN 116028514A
- Authority
- CN
- China
- Prior art keywords
- data
- field
- updating
- target data
- updated
- 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
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种数据更新方法及装置,其中方法包括:获取目标数据的变更数据;基于变更数据,在目标数据的更新信息字段中存储字段更新信息,并在目标数据的操作类型字段中存储数据变更类型信息;基于更新信息字段以及操作类型字段,确定待更新字段的更新方式;基于更新方式以及变更数据,对目标数据在数据库中对应存储的历史数据进行更新,并对更新后的历史数据进行列存储。本发明提供的数据更新方法及装置,通过对Hudi架构中目标数据的字段进行扩展,用于辅助目标数据中变更数据的更新过程,实现了字段更新的必要的信息的存储,使得能基于扩充字段中存储的更新信息,准确实现对Hudi架构中字段的更新,提升了数据更新的准确性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据更新方法及装置。
背景技术
Hudi是一款开源的用于对基于Hadoop生态搭建的数据湖/数据仓库上的数据进行快速更新存储的架构。
现有的Hudi针对非全字段形式的数据更新时,由于Hudi使用的输入输出组件能力有限,无法明确的分辨出待更新数据中某个字段是NULL值还是不更新值,因此只能笼统的挑选最新的更新字段,并把不更新的字段都当做NULL值处理。导致Hudi在处理非全字段更新时,把不更新的字段舍弃,导致更新数据不准确。
发明内容
本发明提供一种数据更新方法及装置,用以解决现有技术Hudi在处理非全字段更新时,把不更新的字段舍弃,导致更新数据不准确的技术问题。
本发明提供一种数据更新方法,包括:
获取数据存储架构Hudi中目标数据的变更数据;
基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息,并在所述目标数据的操作类型字段中存储所述变更数据的数据变更类型信息;
基于所述更新信息字段,确定所述目标数据中的待更新字段,并基于所述操作类型字段,确定所述待更新字段的更新方式;
基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
根据本发明提供的一种数据更新方法,基于所述更新信息字段,确定所述目标数据中的待更新字段,包括:
基于所述更新信息字段,确定所述目标数据中的空字段以及所述目标数据中不更新的字段;
基于所述空字段以及所述不更新的字段,确定所述目标数据中的待更新字段。
根据本发明提供的一种数据更新方法,基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储,包括:
将所述更新方式以及所述变更数据进行行存储,得到行存储数据;
基于行存储数据中的更新方式以及行存储数据中的变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
根据本发明提供的一种数据更新方法,获取数据存储架构Hudi中目标数据的变更数据之后,还包括:
对所述Hudi中的系统预留字段进行扩展,得到所述目标数据的键值字段以及所述目标数据的交换数据字段;
在所述变更数据对应的变更字段为所述目标数据中的唯一键字段的情况下,基于所述变更数据,确定所述目标数据的唯一键变更值,并将所述唯一键变更值发送至目标地址的Http服务器,以使所述Http服务器存储所述唯一键变更值;
在所述目标数据的键值字段中存储所述目标数据的历史唯一键值,并在所述目标数据的交换数据字段中存储所述目标地址。
根据本发明提供的一种数据更新方法,在所述目标数据的交换数据字段中存储所述目标地址之后,还包括:
从所述交换数据字段中获取所述目标地址,并从所述Http服务器中获取所述唯一键变更值;
基于所述唯一键变更值以及所述键值字段中的历史唯一键值,更新所述目标数据的唯一键值,并将更新后的目标数据写入列存格式的数据文件中,得到所述目标数据的列存储数据;
基于所述列存储数据,替换所述目标数据在数据库中对应存储的历史数据。
根据本发明提供的一种数据更新方法,基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息之前,还包括:
对所述Hudi中的系统预留字段进行扩展,得到所述目标数据的更新信息字段以及所述目标数据的操作类型字段。
本发明还提供一种数据更新装置,包括:
获取模块,用于获取数据存储架构Hudi中目标数据的变更数据;
变更数据处理模块,用于基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息,并在所述目标数据的操作类型字段中存储所述变更数据的数据变更类型信息;
更新方式确定模块,用于基于所述更新信息字段,确定所述目标数据中的待更新字段,并基于所述操作类型字段,确定所述待更新字段的更新方式;
存储更新模块,用于基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
本发明还提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一种所述数据更新方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一种数据更新方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述数据更新方法。
本发明提供的数据更新方法及装置,通过对Hudi架构中目标数据的字段进行扩展,将目标数据的变更信息存储在扩展的更新信息字段以及操作类型字段中,用于辅助目标数据中变更数据的更新过程,实现了字段更新的必要的信息的存储。对于目标数据中非全字段更新的情况,能基于扩充字段中存储的更新信息,准确实现对Hudi架构中字段的更新,提升了数据更新的准确性。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图简要地说明,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的数据更新方法的流程示意图;
图2是本发明提供的Hudi基本架构示意图;
图3是本发明提供的替换组件结构示意图;
图4是本发明提供的Key更新架构示意图;
图5是本发明提供的组件变更内部结构示意图;
图6是本发明提供的数据更新装置的结构示意图;
图7是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在一些数据湖,或者实时数据仓库的场景中,经常需要对海量的历史数据进行更新,而由于历史数据量的庞大,这种更新往往需要花费很高的代价,常见的做法通过分库分表,将频繁修改的数据集(一般称为热数据)放到单独的数据库/表中,再定期同步到历史数据库/数据仓库(一般称为冷数据)里。这样的处理过程使得历史数据库里的数据会有天级别的延迟,为了降低这种延迟,提高数据湖的时效性,有不少新的软件陆续被开发出来,例如Apache Hudi/ClickHouse等。
Apache Hudi是一款开源的用于对基于Hadoop生态搭建的数据湖/数据仓库上的数据进行快速更新的架构。其来源数据一般是从kafka,pulsar等消息队列里取得的变更日志,或者源于类似mysql数据库的binlog等。输出数据则一般是写到HDFS(HadoopDistributed File System,分布式文件系统)等文件系统上的列存数据文件,这些文件可以被Hadoop生态上的其它数据分析组件(如spark,hive等)读取使用。
相关方法中对Hudi架构中进行数据更新的基本原理如下:
1、历史数据采用Hadoop生态通用的列存文件格式parquet存储,方便与其它组件共享数据,被称为Base数据;
2、将来源的变更日志先写入一种行存储格式(AVRO)数据文件中,被称为log数据,由于其数据量较少,所以该操作一般不会有太多开销;
3、此时如果进行数据查询,会有两种查询方式:第一种查询实时数据(称为RT视图),需要在查询时将历史数据和已经写入的log数据按照唯一键进行合并,每个唯一键都保留最新的一笔数据,这样从逻辑上就像是数据完成了更新,该过程称为merge;第二种查询历史数据(称为RO视图),查询时只查历史数据。显然,RT视图在查询时需要进行merge,性能相比RO视图有很大降低,但可以查到最新的数据;
4、为了避免log数据一直存在,导致必须用RT视图才能查询最新的数据,Hudi会按照一定的触发条件,对数据进行整合,用Base数据与log数据merge后的结果作为新的Base数据写入文件,并替换旧的Base数据文件,该过程被称为compact;
5、完成了compact后,RO视图就能以较高的性能查询到最新的数据了。
Apache Hudi存在一个功能缺陷,即无法支持非全字段的更新,具体说明如下:
根据上述的介绍,Apache Hudi完成数据更新的关键步骤merge的处理策略是:对每个唯一键对应的变更日志,一般称为record,只保留最新的一笔record。
假设一张表的每笔record有以下几个字段:{唯一键,逻辑时间(逻辑时间越大,表示数据越新),field1,field2,field3},对某唯一键KeyA的一个连续处理的过程为:
1.KeyA最开始存在于历史数据中,其逻辑时间为1,这笔record记为{KeyA,1,field1-1,field2-1,field3-1};
2.KeyA被更新了一次,新的数据保存在log中,逻辑时间为2,这笔record记为{KeyA,2,field1-2,field2-2,field3-2};
3.KeyA被compact到新的历史数据中(merge后的数据),只保留最新的一笔record,记为{KeyA,2,field1-2,field2-2,field3-2};
4.KeyA又被更新了一次,新的数据保存在log中,这次只更新了field1的值,逻辑时间为3,这笔record记为{KeyA,3,field1-3}
5.对KeyA再进行merge,得到的record记为{KeyA,3,field1-3};
可以看到,在第3步时,数据merge后的结果符合预期,但第5步时,数据merge后,只有field1的值符合预期,field2和field3的值都被抛弃了(此时查询通常会体现为NULL值),而并不是预期的field2-2和field3-2。
将形如第2步骤的更新操作称为全字段更新,其特点是record的每个字段都会提供更新后的值;将形如第4步骤的更新操作称为非全字段更新,其特点是只有一部分字段会提供更新后的值。全字段更新实际上是一种特殊的非全字段更新,Hudi使用的输入输出组件能力有限,无法明确的表示出某个字段是NULL值还是不更新值,因此只能笼统的挑选最新一笔record,并把不更新的字段都当做NULL值处理。所以,Apache Hudi在面对普通的非全字段更新时,无法保证数据结果的正确性。
与此同时,对于Apache Hudi在面对数据更新中key值的更新时,Hudi使用spark进行并行计算,会按照唯一键将数据集用hash算法分配到多个并行的计算单元里,同一个唯一键只会分配到同一个计算单元里,计算单元之间也没有任何依赖关系,可独立运行。但key更新场景下,新key的运算需要依赖旧key的数据,但两者由于key不同,可能分配到不同的计算单元,此时就无法完成数据交接。
针对相关方法中的缺陷,本发明提供一种数据更新方法,图1为本发明提供的数据更新方法的流程示意图。参照图1,本发明提供的数据更新方法可以包括:
步骤110,获取数据存储架构Hudi中目标数据的变更数据;
步骤120,基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息,并在所述目标数据的操作类型字段中存储所述变更数据的数据变更类型信息;
步骤130,基于所述更新信息字段,确定所述目标数据中的待更新字段,并基于所述操作类型字段,确定所述待更新字段的更新方式;
步骤140,基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
本发明提供的数据更新方法的执行主体可以是电子设备、电子设备中的部件、集成电路、或芯片。该电子设备可以是移动电子设备,也可以为非移动电子设备。示例性的,移动电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本或者个人数字助理(personal digitalassistant,PDA)等,非移动电子设备可以为服务器、网络附属存储器(Network AttachedStorage,NAS)或个人计算机(personal computer,PC)等,本发明不作具体限定。
下面以计算机执行本发明提供的数据更新方法为例,详细说明本发明的技术方案。
在步骤110中,获取数据存储架构Hudi中目标数据的变更数据。
在需要对数据存储架构Hudi中目标数据进行更新时,获取针对目标数据的变更数据。
目标数据中可以包括数据字段field、唯一键key字段以及时间戳timestap字段等。例如,在目标数据为{key,timestamp,field1,field2,field3}时,针对目标数据的变更数据可以是将field1更新为field1-1。
在步骤120中,对原有的Hudi中数据的字段进行扩增,新增更新信息字段以及操作类型字段。获取变更数据后,基于变更数据,在目标数据的更新信息字段中存储变更数据的字段更新信息,并在目标数据的操作类型字段中存储变更数据的数据变更类型信息。
在对原有的Hudi中数据的字段进行扩增后,基于目标数据的变更数据,在扩充的字段中存入对应的变更数据。
可以理解的是,Hudi中目标数据的更新可以分为全字段的更新以及非全字段的更新。全字段的更新是指对目标数据中所有的数据字段进行更新,非全字段的更新是指对目标数据中的部分数据字段进行更新。
在步骤130中,基于目标数据的更新信息字段,确定目标数据中的待更新字段,并基于目标数据的操作类型字段,确定待更新字段的更新方式。
由于更新信息字段中存储的是变更数据的字段更新信息,所以,可以基于目标数据的更新信息字段,确定目标数据中的待更新字段。由于操作类型字段中存储的是变更数据的数据变更类型信息,所以,可以基于目标数据中操作类型字段,确定待更新字段的数据变更类型。
可选的,数据变更类型可以是upsert或者delete,upsert表示key对应的record存在则更新,不存在则新增,delete表示将key对应的record删除。
在步骤140中,基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
数据存储更新包括行存储(avro)以及列存储(parquet)。其中,基于变更数据,目标数据的更新方式和变更数据采用行存储,目标数据的历史数据采用列存储。
在确定目标数据的更新方式后,对目标数据中的变更数据进行存储,从而实现对数据的更新。数据存储更新包括行存储(avro)以及列存储(parquet)。其中,目标数据的更新方式和变更数据使用行存储,后续再对目标数据的历史数据采用列存储。每当满足一定条件的时候(经过n个commit或者经过特定时间)Hudi开始compact操作,将行存储的数据和列存储的合并,生成新的列存储文件,从而最终实现对目标数据的更新。
例如,假设目标数据有以下几个字段:{key,timestamp,field1,field2,field3},为其扩展的系统预留字段为:{__null_fields__,__op_type__},这几个字段的含义和作用如下:
__null_fields__:更新信息字段,存储变更数据中值为NULL的字段名,用于区分变更数据中的NULL值和不更新值;
__op_type__:操作类型字段,存储变更数据的数据变更类型信息,分为upsert,delete,update key;
操作类型各自的含义:upsert表示key对应的record存在则更新,不存在则新增,delete表示将key对应的record删除;update key表示在upsert的基础上,更新的字段也包含唯一键key;
对于Hudi中的merge策略也进行对应调整:
对每个唯一键对应的数据,为每一列保留该列所有要更新的值(正常值,或者__null_fields__表示的NULL值)里最新的一个值。
对目标数据的一个连续处理的过程为:
1.目标数据的唯一键KeyA最开始存在于历史数据中,其逻辑时间为1,此数据记为:
{key:"KeyA",timestamp:1,field1:field1-1,field2:field2-1,field3:field3-1,__null_fields__:"",__op_type__:upsert}
2.KeyA被更新了一次,新的数据保存在log中,逻辑时间为2,除key外所有字段都要更新,此次更新数据为:
{key:"KeyA",timestamp:2,field1:field1-2,field3:field3-2,__null_fields__:"field2",__op_type__:upsert};
3.KeyA被compact到新的历史数据中(merge后的数据),所有字段值都以逻辑时间2的为准,因此记为:
{key:"KeyA",timestamp:2,field1:field1-2,field3:field3-2,__null_fields__:"field2",__op_type__:upsert};
4.KeyA又被更新了一次,新的数据保存在log中,只更新field1的值,逻辑时间为3,此次更新数据记为:
{key:"KeyA",timestamp:3,field1:field1-3,__null_fields__:"",__op_type__:upsert};
5.对KeyA再进行merge,其中field1的值以逻辑时间3的为准,其他字段仍以逻辑时间2的为准,得到的更新后的数据记为:{key:"KeyA",timestamp:3,field1:field1-3,field3:field3-2,__null_fields__:"field2",__op_type__:upsert};
可以看出,通过补充一些字段,再配合调整merge的处理策略,就可以正确处理非全字段的更新。
可选的,由于对原有的Hudi中的字段进行了扩充,所以在基于Hudi对待更新字段进行行存储以及后续的列存储的过程中,需要对Hudi中的组件结构的功能进行调整。
Hudi的基本架构如图2本发明提供的Hudi基本架构示意图所示。Hudi的整个运行过程分为如下步骤:
1.源表收到DML(Data Manipulation Language,数据操纵语言)SQL后,对数据库进行修改;
2.修改产生变动会以binlog的形式给出,形成Record(变更日志);
3.Record会先进行格式适配,使其可以存入Hoodie Payload;
4.所有Hoodie Payload会在内存中先进行一次merge,merge后的Hoodie Payload集合里,每个唯一键只对应一个HoodiePayload;
5.之后Hoodie Payload会持久化到Hoodie Log(AVRO)里;
6.当满足一定条件后,Hoodie Log(AVRO)会与HoodieBase(Parquet)进行compact;
6.1.compact过程中,会先将Hoodie Log(AVRO)读取为Hoodie Payload结构;
6.2.将其与Hoodie Base(Parquet)进行merge,merge的结果最后存入新的HoodieBase(Parquet)中。
对Hudi中的架构进行调整,将调整后的组件命名为HoodieDeltaChangePayload,具体结构如图3本发明提供的替换组件结构示意图所示。HoodieDeltaChangePayload用于保存多个字段信息,每个字段又保存三个要素,包括字段名,逻辑时间,字段值。记为required表示该字段不能缺少,记为optional表示该字段可以缺少,缺少的字段用来表示不更新。
提供三个与原组件同样规格的方法,工作过程如下:
1、preCombine(),主要步骤有:
a)输入两个HoodieDeltaChangePayload;
b)将它们每个要更新的字段的逻辑时间进行比较,选出各自最新的那个值;
c)其中__null_fields__的处理方式与其它列有区别,当某字段更新为NULL值时追加对应的字段名,从NULL值更新为非NULL值时,删除对应的字段名;
d)所有选出的字值最终构成一个HoodieDeltaChangePayload给出。
在每次使用该方法时,每个要更新的字段都进行一次比较,设每笔记录要更新的字段个数平均为NC,设要更新的记录的总笔数为NL,则比较运算的次数可近似等于NC*(NL-1)次。
2、getInsertValue(),主要步骤有:
a)当操作类型是delete时,给出空对象;
b)否则将自身所有要更新的字段的值整体转换为一个
IndexedRecord;
c)IndexedRecord对象里只能有一个逻辑时间值,而由于自身每个字段都记录了各自的逻辑时间,因此需要从多个逻辑时间中选出一个合适的,选择策略也很简单:挑出最新的那个逻辑时间,并存入IndexedRecord;
d)将生成的IndexedRecord给出;
3、combineAndGetUpdateValue(),主要步骤有:
a)当自身的操作类型是delete时,给出空对象。
b)输入一个来源于base数据的IndexedRecord;
c)将自身的每个要更新的字段的逻辑时间与输入的逻辑时间进行比较,选出最新的值覆盖到IndexedRecord;
d)清空__null_fields__的所有字段名,因为此时已经不需要再区分NULL值和不更新值了;
e)将修改后的IndexedRecord给出;
注意,每次使用该方法,每个要更新的字段都进行一次比较,设每笔记录要更新的字段个数平均为NC,设Base数据的总笔数为NB,则比较运算的次数可近似等于NC*NB次。
本发明实施例提供的数据更新方法,通过对Hudi架构中目标数据的字段进行扩展,将目标数据的变更信息存储在扩展的更新信息字段以及操作类型字段中,用于辅助目标数据中变更数据的更新过程,实现了字段更新的必要的信息的存储。对于目标数据中非全字段更新的情况,能基于扩充字段中存储的更新信息,准确实现对Hudi架构中字段的更新,提升了数据更新的准确性。
在一个实施例中,基于所述更新信息字段,确定所述目标数据中的空字段以及所述目标数据中不更新的字段;基于所述空字段以及所述不更新的字段,确定所述目标数据中的待更新字段。
可以理解的是,在更新信息字段中存储变更数据的字段更新信息。在对目标数据进行更新时,可以读取目标数据的更新信息字段中存储的变更数据的字段更新信息。基于确定目标数据中的空字段以及不更新字段,从而实现对目标数据中的待更新字段的确定。
目标数据中的空字段以及不更新字段为基于变更数据对目标数据进行更新的过程中不涉及的字段,即不需要更新的字段。相关方法中由于Hudi使用的输入输出组件能力有限,无法明确的确定目标数据中某个字段是NULL值还是不更新值,因此只能笼统的挑选最新一笔数据,并把不更新的字段都当做NULL值处理,导致更新后的数据不准确。
基于在目标数据中扩充字段,记录目标数据中的空字段以及不更新字段,可以实现对目标数据中的待更新字段的确定,在后续对目标数据进行更新存储的过程中,可以实现对目标数据的准确更新。
本发明实施例提供的数据更新方法,通过读取目标数据的更新信息字段中存储的变更数据的字段更新信息。基于确定目标数据中的空字段以及不更新字段,可以实现对目标数据中的待更新字段的确定,在后续对目标数据进行更新存储的过程中,可以实现对目标数据的准确更新。
在一个实施例中,基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储,包括:将所述更新方式以及所述变更数据进行行存储,得到行存储数据;基于行存储数据中的更新方式以及行存储数据中的变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
数据存储更新包括行存储(avro)以及列存储(parquet)。其中,基于变更数据,先对目标数据的更新方式和变更数据采用行存储,目标数据的数据库中对应的历史数据采用列存储。
在基于更新信息字段以及操作类型字段中存储的信息,确定目标数据中的待更新字段,以及对应的更新方式后,将更新方式以及变更数据进行行存储。
基于行存储数据中的更新方式以及行存储数据中的变更数据,对待更新字段进行更新,并将更新后的目标数据写入列存储格式的数据文件中,实现对目标数据的列存储更新。在基于变更数据,对目标数据进行列存储更新后,得到目标数据列存储数据。
在得到目标数据列存储数据后,基于列存储数据,替换目标数据在数据库中对应存储的历史数据,实现对存储在数据库中的目标数据的更新,从而完成对目标数据的更新过程。
本发明实施例提供的数据更新方法,通过基于变更数据以及更新方式,对待更新字段进行更新,并将更新后的目标数据写入列存储格式的数据文件中,实现对目标数据的列存储更新。
在一个实施例中,获取数据存储架构Hudi中目标数据的变更数据之后,还包括:对所述Hudi中的系统预留字段进行扩展,得到所述目标数据的键值字段以及所述目标数据的交换数据字段;在所述变更数据对应的变更字段为所述目标数据中的唯一键字段的情况下,基于所述变更数据,确定所述目标数据的唯一键变更值,并将所述唯一键变更值发送至目标地址的Http服务器,以使所述Http服务器存储所述唯一键变更值;在所述目标数据的键值字段中存储所述目标数据的历史唯一键值,并在所述目标数据的交换数据字段中存储所述目标地址。
对Hudi中的系统预留字段进行扩展,得到目标数据的键值字段以及目标数据的交换数据字段。目标数据的键值字段用于存储目标数据的历史唯一键值。目标数据的唯一键是用于区分目标数据与其他数据的key值,相当于目标数据的身份id。基于目标数据的唯一键,可以从众多数据中获取目标数据。
在变更数据对应的变更字段为目标数据中的唯一键字段的情况下,基于变更数据,确定目标数据的唯一键变更值,并将唯一键变更值发送至目标地址的Http服务器中存储。
在目标数据扩充的键值字段中存储目标数据的历史唯一键值,并在目标数据的交换数据字段中存储目标地址。以便后续更新目标数据的唯一键值时,可以从交换数据字段中获取目标地址,从而获取存储在Http服务器中的唯一键变更值。
本发明实施例提供的数据更新方法,通过在目标数据扩充的键值字段中存储目标数据的历史唯一键值,并在目标数据的交换数据字段中存储目标地址。为后续获取目标地址,从而获取存储在Http服务器中的唯一键变更值,并实现对目标数据的唯一键值的更新提供了基础。
在一个实施例中,在所述目标数据的交换数据字段中存储所述目标地址之后,还包括:从所述交换数据字段中获取所述目标地址,并从所述Http服务器中获取所述唯一键变更值;基于所述唯一键变更值以及所述键值字段中的历史唯一键值,更新所述目标数据的唯一键值,并将更新后的目标数据写入列存格式的数据文件中,得到所述目标数据的列存储数据;基于所述列存储数据,替换所述目标数据在数据库中对应存储的历史数据。
从交换数据字段中获取存储唯一键变更值的Http服务器的目标地址,基于目标地址,从对应Http服务器中获取目标数据的唯一键变更值,并基于获取的唯一键变更值以及存储在键值字段中的历史唯一键值,更新目标数据的唯一键值,并将更新后的目标数据写入列存格式的数据文件中,得到目标数据的列存储数据。进一步的,基于列存储数据,替换目标数据在数据库中对应存储的历史数据,实现目标数据的列存储,从而最终实现目标数据的更新过程。
可选的,由于目标数据的唯一键key更新场景下,存在两个key值,分别是目标数据的历史key值以及目标数据的待更新key值,而Hudi要求key和目标数据必须是一对一的。对于不更新列的数据,只有在处理旧key的delete时,才能从历史数据中读取到,而这些数据又是处理新key的upsert所必须的。因此必须由Hudi做针对性的支持,使两者可以交接数据。
例如,目标数据为{key,timestamp,field1,field2,field3,__null_fields__,__op_type__},基于Hudi系统预留字段,再扩展两个字段:{__swap_token_for_uk__,__old_keys__},扩展的字段的含义和作用如下:
__swap_token_for_uk__:交换数据字段,用于保存用于交换新旧key数据的Http服务的目标地址URL;
__old_keys__:键值字段,用于存储旧的历史唯一键值;(更新key值需要扩展的预留字段)
同时Hudi中的merge策略也有相应的变化:
对于操作类型为update key的目标数据,先将其拆分为两条:一条使用__old_keys__中的历史唯一键值作为key,操作类型为记为update key delete(UKD),用来表示旧key数据删除;另一条沿用原本的目标数据,只是去掉__old_keys__字段,并将操作类型记为update key insert(UKI),用来表示新key数据新增;两条目标数据都被分配一个相同的Http路径,保存到各自的__swap_token_for_uk__字段里;
对于UKD,其处理方式相比普通的delete多一个步骤,即需要将删除的旧key对应的目标数据按照__swap_token_for_uk__指定的目标地址发送给Http服务;对于UKI,其处理方式相比普通的upsert也会多一个步骤,即需要从__swap_token_for_uk__指定的目标地址接收旧key对应的目标数据,并与自身数据merge。
在对目标数据的唯一键KeyA更新为KeyB的一个连续处理的过程为:
1.KeyA最开始存在于目标数据的历史数据中,其逻辑时间为1,这笔record记为:{key:"KeyA",timestamp:1,field1:field1-1,field2:field2-1,field3:field3-1,__null_fields__:"",__op_type__:upsert}
2.KeyA被更新了一次,新的目标数据保存在log中,逻辑时间为2,其中key字段被更新为KeyB,另外还更新field1的值,这笔record记为:
{key:"KeyB",timestamp:2,field1:field1-2,__null_fields__:"",
__op_type__:update key,__old_keys__:{key:"KeyA"}}
3.KeyA被拆分为两笔数据,分别记为:
{key:"KeyA",timestamp:2,__op_type__:update key delete,
__swap_token_for_uk__:"http://ip:port/swaptoken/timestamp2"}
和
{key:"KeyB",timestamp:2,field1:field1-2,__null_fields__:"",__op_type__:update key insert,
__swap_token_for_uk__:"http://ip:port/swaptoken/timestamp2"}
4.先处理KeyA的UKD,将自身字段分别合入KeyA的旧数据,清空__swap_token_for_uk__字段,然后发送给Http服务,数据记为:
{key:"KeyA",timestamp:2,field1:field1-1,field2:field2-1,field3:field3-1,__null_fields__:"",__op_type__:update key delete,__swap_token_for_uk__:""}
5.后处理KeyB的UKI,旧数据从http服务接收,将自身字段分别合入旧数据,清空__swap_token_for_uk__字段,最后结果记为:
{key:"KeyB",timestamp:2,field1:field1-2,field2:field2-1,field3:field3-1,__null_fields__:"",__op_type__:update key insert,__swap_token_for_uk__:""}
至此,目标数据就完成了目标数据的唯一键key的更新。
其中,目标数据的唯一键key的更新场景,如图4本发明提供的Key更新架构示意图所示,整体运行架构基于COW模式,分为以下步骤:
1.源表收到DMLSQL后,对数据库进行修改;
2.修改产生变动会以binlog的形式给出,形成Record(变更日志);
3.Record会先进行格式适配,使其可以被DivergenceSource识别
4.DivergenceSource会将每笔操作类型为update key的Record拆分为两笔,分别存入两个HoodieDeltaChangePayload中,它们的操作类型分别用UKD和UKI来表示,同时为它们分配相同的url(基于同一个逻辑时间),指向PayloadCacheServer内的http服务;
5.操作类型为UKD的Record先处理;
5.1.直接触发与Hoodie Base(Parquet)的merge,给出空对象表示旧key被删除;
5.2.额外步骤:merge过程中将从Hoodie Base(Parquet)中读取到的旧key的数据使用url发送给PayloadCacheServer;
6.操作类型为UKI的Record后处理,触发常规的预merge过程;
7.预merge过后,Record操作类型一定为UKI,会被当做新增数据;
7.1.将自身数据持久化到新的Hoodie Base(Parquet)中;
7.2.额外步骤:持久化之前,需要使用URL从PayloadCacheServer接受旧key的数据,并将其与自身数据进行一次merge;
除HoodieDeltaChangePayload外,key更新场景还替换了另外一个组件,暂定名为DivergenceSource,此外还新增了一个组件PayloadCacheServer。下面详细说明它们的结构和工作流程。
DivergenceSource组件用于获取外部的Record集合,并转换为Apache Hudi内部使用的数据结构,其主要功能都集中在fetchNewDataInAvroFormat方法里,具体运行步骤如下:
1.fetchNewDataInAvroFormat():
a)获取来源record集合;
b)识别其中类型为update key的record,将其拆分为两笔record,并替换集合中原本位置的record,注意拆分后的record一定是UKD在前,UKI在后;
c)将拆分完成的record集合从UKD和UKI之间的位置分割开,最终分成多个record集合;
d)按原本数据集的顺序将多个record集合依次给出,由于每个record集合在Hudi架构的上层模块使用上会作为一批数据一起处理和提交,这样就可以确保操作类型为UKD的record一定会在前一批处理和提交,UKI一定会在后一批处理和提交,保证了这两种record的处理顺序;
e)当多个集合全部给出之后,开始重复上述过程;
PayloadCacheServer组件是新加的,内部会开启一个轻量全内存http服务,并维护一个map,对外提供两个http接口:
1.put();
a)响应http请求,得到url和数据内容;
b)从接收到的url中截取末尾部分作为key,将收到的数据内容作为value,存入map中;
2.get();
a)响应http请求,得到url;
b)从接收到的url中截取末尾部分作为key,从map中查找对应的数据内容;
c)如果能查到数据内容,则将数据内容通过http请求给出;
d)如果查不到,则给出空数据;
HoodieDeltaChangePayload内部结构如图5本发明提供的组件变更内部结构示意图所示。
其中getInsertValue和combineAndGetUpdateValue工作流程有变动,具体如下:
1.getInsertValue(),原本的处理逻辑不变,增加新的处理分支,主要步骤有:
a)当操作类型为UKI时,运行新的处理流程;
b)以自身的__swap_token_for_uk__字段的url为入参,使用PayloadCacheServer的get方法接收旧key数据,并转换为IndexedRecord;
c)将自身的每个要更新的字段的逻辑时间与输入的逻辑时间进行比较,选出最新的值覆写到IndexedRecord;
d)将生成的IndexedRecord给出;
2.combineAndGetUpdateValue(),原本的处理逻辑不变,增加新的处理分支,主要步骤有:
a)输入一个来源于base数据的IndexedRecord;
b)当操作类型为UKD时,运行新的处理流程。
c)将自身的每个要更新的字段的逻辑时间与输入的逻辑时间进行比较,选出最新的值覆写到IndexedRecord;
d)清空IndexedRecord中的__swap_token_for_uk__字段,因为此时它作为旧key的数据,即将发送给PayloadCacheServer,并不需要该字段了;
e)将IndexedRecord和自身__swap_token_for_uk__字段的url作为入参,使用PayloadCacheServer的put方法发送旧key数据;
f)给出空对象,表示删除旧key数据;
本发明实施例提供的数据更新方法,通过基于目标地址,从对应Http服务器中获取目标数据的唯一键变更值,并基于获取的唯一键变更值以及存储在键值字段中的历史唯一键值,更新目标数据的唯一键值,并将更新后的目标数据写入列存格式的数据文件中,得到目标数据的列存储数据,从而最终实现目标数据的更新过程。
在一个实施例中,基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息之前,还包括:对所述Hudi中的系统预留字段进行扩展,得到所述目标数据的更新信息字段以及所述目标数据的操作类型字段。
目标数据中的更新信息字段以及目标数据的操作类型字段,是Hudi架构中原本不存在的字段。可以通过对Hudi中的系统预留字段进行扩展得到。
基于Hudi中的系统预留字段,对目标数据中的原有字段进行扩充,得到目标数据的更新信息字段以及目标数据的操作类型字段。
本发明实施例提供的数据更新方法,通过对Hudi中的系统预留字段,对目标数据中的原有字段进行扩充,实现了目标数据的更新信息字段以及目标数据的操作类型字段的扩充。
图6为本发明提供的数据更新装置的结构示意图,如图6所示,该装置包括:
获取模块610,用于获取数据存储架构Hudi中目标数据的变更数据;
变更数据处理模块620,用于基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息,并在所述目标数据的操作类型字段中存储所述变更数据的数据变更类型信息;
更新方式确定模块630,用于基于所述更新信息字段,确定所述目标数据中的待更新字段,并基于所述操作类型字段,确定所述待更新字段的更新方式;
存储更新模块640,用于基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
本发明实施例提供的数据更新装置,通过对Hudi架构中目标数据的字段进行扩展,将目标数据的变更信息存储在扩展的更新信息字段以及操作类型字段中,用于辅助目标数据中变更数据的更新过程,实现了字段更新的必要的信息的存储。对于目标数据中非全字段更新的情况,能基于扩充字段中存储的更新信息,准确实现对Hudi架构中字段的更新,提升了数据更新的准确性。
在一个实施例中,更新方式确定模块630具体用于:
基于所述更新信息字段,确定所述目标数据中的待更新字段,包括:
基于所述更新信息字段,确定所述目标数据中的空字段以及所述目标数据中不更新的字段;
基于所述空字段以及所述不更新的字段,确定所述目标数据中的待更新字段。
在一个实施例中,存储更新模块640具体用于:
基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储,包括:
将所述更新方式以及所述变更数据进行行存储,得到行存储数据;
基于行存储数据中的更新方式以及行存储数据中的变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
在一个实施例中,获取模块610具体用于:
获取数据存储架构Hudi中目标数据的变更数据之后,还包括:
对所述Hudi中的系统预留字段进行扩展,得到所述目标数据的键值字段以及所述目标数据的交换数据字段;
在所述变更数据对应的变更字段为所述目标数据中的唯一键字段的情况下,基于所述变更数据,确定所述目标数据的唯一键变更值,并将所述唯一键变更值发送至目标地址的Http服务器,以使所述Http服务器存储所述唯一键变更值;
在所述目标数据的键值字段中存储所述目标数据的历史唯一键值,并在所述目标数据的交换数据字段中存储所述目标地址。
在一个实施例中,获取模块610还具体用于:
在所述目标数据的交换数据字段中存储所述目标地址之后,还包括:
从所述交换数据字段中获取所述目标地址,并从所述Http服务器中获取所述唯一键变更值;
基于所述唯一键变更值以及所述键值字段中的历史唯一键值,更新所述目标数据的唯一键值,并将更新后的目标数据写入列存格式的数据文件中,得到所述目标数据的列存储数据;
基于所述列存储数据,替换所述目标数据在数据库中对应存储的历史数据。
在一个实施例中,变更数据处理模块620具体用于:
基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息之前,还包括:
对所述Hudi中的系统预留字段进行扩展,得到所述目标数据的更新信息字段以及所述目标数据的操作类型字段。
图7示例了一种电子设备的实体结构示意图,如图7所示,该电子设备可以包括:处理器(processor)710、通信接口(Communications Interface)720、存储器(memory)730和通信总线740,其中,处理器710,通信接口720,存储器730通过通信总线740完成相互间的通信。处理器710可以调用存储器730中的逻辑指令,以执行数据更新方法,该方法包括:
获取数据存储架构Hudi中目标数据的变更数据;
基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息,并在所述目标数据的操作类型字段中存储所述变更数据的数据变更类型信息;
基于所述更新信息字段,确定所述目标数据中的待更新字段,并基于所述操作类型字段,确定所述待更新字段的更新方式;
基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
此外,上述的存储器730中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的数据更新方法,该方法包括:
获取数据存储架构Hudi中目标数据的变更数据;
基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息,并在所述目标数据的操作类型字段中存储所述变更数据的数据变更类型信息;
基于所述更新信息字段,确定所述目标数据中的待更新字段,并基于所述操作类型字段,确定所述待更新字段的更新方式;
基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的数据更新方法,该方法包括:
获取数据存储架构Hudi中目标数据的变更数据;
基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息,并在所述目标数据的操作类型字段中存储所述变更数据的数据变更类型信息;
基于所述更新信息字段,确定所述目标数据中的待更新字段,并基于所述操作类型字段,确定所述待更新字段的更新方式;
基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种数据更新方法,其特征在于,所述方法包括:
获取数据存储架构Hudi中目标数据的变更数据;
基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息,并在所述目标数据的操作类型字段中存储所述变更数据的数据变更类型信息;
基于所述更新信息字段,确定所述目标数据中的待更新字段,并基于所述操作类型字段,确定所述待更新字段的更新方式;
基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
2.根据权利要求1所述的数据更新方法,其特征在于,所述基于所述更新信息字段,确定所述目标数据中的待更新字段,包括:
基于所述更新信息字段,确定所述目标数据中的空字段以及所述目标数据中不更新的字段;
基于所述空字段以及所述不更新的字段,确定所述目标数据中的待更新字段。
3.根据权利要求1所述的数据更新方法,其特征在于,所述基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储,包括:
将所述更新方式以及所述变更数据进行行存储,得到行存储数据;
基于所述行存储数据中的更新方式以及所述行存储数据中的变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
4.根据权利要求1所述的数据更新方法,其特征在于,所述获取数据存储架构Hudi中目标数据的变更数据之后,还包括:
对所述Hudi中的系统预留字段进行扩展,得到所述目标数据的键值字段以及所述目标数据的交换数据字段;
在所述变更数据对应的变更字段为所述目标数据中的唯一键字段的情况下,基于所述变更数据,确定所述目标数据的唯一键变更值,并将所述唯一键变更值发送至目标地址的Http服务器,以使所述Http服务器存储所述唯一键变更值;
在所述目标数据的键值字段中存储所述目标数据的历史唯一键值,并在所述目标数据的交换数据字段中存储所述目标地址。
5.根据权利要求4所述的数据更新方法,其特征在于,所述在所述目标数据的交换数据字段中存储所述目标地址之后,还包括:
从所述交换数据字段中获取所述目标地址,并从所述Http服务器中获取所述唯一键变更值;
基于所述唯一键变更值以及所述键值字段中的历史唯一键值,更新所述目标数据的唯一键值,并将更新后的目标数据写入列存格式的数据文件中,得到所述目标数据的列存储数据;
基于所述列存储数据,替换所述目标数据在数据库中对应存储的历史数据。
6.根据权利要求1所述的数据更新方法,其特征在于,所述基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息之前,还包括:
对所述Hudi中的系统预留字段进行扩展,得到所述目标数据的更新信息字段以及所述目标数据的操作类型字段。
7.一种数据更新装置,其特征在于,包括:
获取模块,用于获取数据存储架构Hudi中目标数据的变更数据;
变更数据处理模块,用于基于所述变更数据,在所述目标数据的更新信息字段中存储所述变更数据的字段更新信息,并在所述目标数据的操作类型字段中存储所述变更数据的数据变更类型信息;
更新方式确定模块,用于基于所述更新信息字段,确定所述目标数据中的待更新字段,并基于所述操作类型字段,确定所述待更新字段的更新方式;
存储更新模块,用于基于所述更新方式以及所述变更数据,对所述目标数据在数据库中对应存储的历史数据进行更新,得到更新后的历史数据,并对所述更新后的历史数据进行列存储。
8.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述数据更新方法。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述数据更新方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述数据更新方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211659621.1A CN116028514A (zh) | 2022-12-22 | 2022-12-22 | 数据更新方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211659621.1A CN116028514A (zh) | 2022-12-22 | 2022-12-22 | 数据更新方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116028514A true CN116028514A (zh) | 2023-04-28 |
Family
ID=86090650
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211659621.1A Pending CN116028514A (zh) | 2022-12-22 | 2022-12-22 | 数据更新方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116028514A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116821146A (zh) * | 2023-08-31 | 2023-09-29 | 杭州玳数科技有限公司 | 一种基于Apache Iceberg的数据表列更新方法及系统 |
-
2022
- 2022-12-22 CN CN202211659621.1A patent/CN116028514A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116821146A (zh) * | 2023-08-31 | 2023-09-29 | 杭州玳数科技有限公司 | 一种基于Apache Iceberg的数据表列更新方法及系统 |
CN116821146B (zh) * | 2023-08-31 | 2023-12-08 | 杭州玳数科技有限公司 | 一种基于Apache Iceberg的数据表列更新方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11182356B2 (en) | Indexing for evolving large-scale datasets in multi-master hybrid transactional and analytical processing systems | |
US8140495B2 (en) | Asynchronous database index maintenance | |
KR102407510B1 (ko) | 데이터 저장 및 조회 방법, 장치, 기기 및 매체 | |
US8527556B2 (en) | Systems and methods to update a content store associated with a search index | |
US10372726B2 (en) | Consistent query execution in hybrid DBMS | |
CN110309233B (zh) | 数据存储的方法、装置、服务器和存储介质 | |
CN106407360B (zh) | 一种数据的处理方法及装置 | |
CN109902130A (zh) | 一种数据存储方法、数据查询方法和装置、存储介质 | |
US11269954B2 (en) | Data searching method of database, apparatus and computer program for the same | |
CN108875077B (zh) | 数据库的列存储方法、装置、服务器及存储介质 | |
CN109690522B (zh) | 一种基于b+树索引的数据更新方法、装置及存储装置 | |
JP2016509281A (ja) | アクティブデータベースクエリのメンテナンス | |
US11681691B2 (en) | Presenting updated data using persisting views | |
CN110232095B (zh) | 一种数据同步方法、装置、存储介质和服务器 | |
JP2020123320A (ja) | インデックスを管理するための方法、装置、設備及び記憶媒体 | |
US10095737B2 (en) | Information storage system | |
CN116028514A (zh) | 数据更新方法及装置 | |
CN109189759A (zh) | Kv存储系统中的数据读取方法、数据查询方法、装置及设备 | |
JP4177833B2 (ja) | リンクリストへのマルチプロセスアクセス方法および装置 | |
CN111723092B (zh) | 数据处理方法及装置 | |
US20170242880A1 (en) | B-tree index structure with grouped index leaf pages and computer-implemented method for modifying the same | |
CN101609462B (zh) | 一种个人数据空间环境下的任务识别系统和方法 | |
CN114595224A (zh) | 数据存储方法及装置、数据查询方法及装置 | |
CN102799996A (zh) | 网络广告策略匹配方法及系统 | |
CN108694219B (zh) | 一种数据处理方法及装置 |
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 |