一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

更新数据的方法、装置、电子设备和存储介质与流程

2022-02-19 01:53:42 来源:中国专利 TAG:


1.本公开涉及数据仓库领域,尤其涉及更新数据的方法、装置、电子设备和存储介质。


背景技术:

2.作为为企业的决策制定过程提供数据支持的战略集合,数据仓库(dw,data warehouse)被广泛用于对多种业务数据进行筛选和整合,以便于数据集市(dm,data mart)执行数据分析、数据挖掘、数据报表等下游数据任务。数据仓库通常将与其相连的数据库(db,data base)等存储对象作为自身的数据源(ds,data source),以从数据源处获取与业务相关的原始数据。
3.当数据源对应的业务发生诸如软件版本更新、功能调整等变化时,输入数据仓库的原始数据构成的数据集合的数据结构也会发生相应的变化,此时,若数据仓库中对应于上述数据结构的结构体不进行相应的更新,则调用该结构体的下游任务可能会出现报错。因此为保证数据仓库的持续稳定产出,需要对数据仓库中的结构体进行及时更新。


技术实现要素:

4.本公开提供了更新数据的方法、装置、电子设备和存储介质,以至少解决相关技术中的技术问题。本公开的技术方案如下:
5.根据本公开实施例的第一方面,提出一种更新数据的方法,包括:
6.获取数据仓库中来自数据源的当前数据集合的当前数据结构与来自所述数据源的历史数据集合的历史数据结构存在的差异;
7.按照所述当前数据结构相对于所述历史数据结构的差异信息确定相应的目标字段;
8.根据所述目标字段更新所述数据仓库中定义的结构体字段,更新后的所述结构体字段中包含所述当前数据结构的结构信息,所述当前数据集合中的数据在按照所述结构信息构造后被所述数据仓库的下游数据任务调用。
9.可选的,所述获取数据仓库中来自数据源的当前数据集合的当前数据结构与来自所述数据源的历史数据集合的历史数据结构存在的差异,包括:
10.在所述数据源中的原始数据周期性输入所述数据仓库的情况下,检测当前输入周期内输入的所述当前数据集合的当前数据结构与前一输入周期内输入的所述历史数据集合的历史数据结构存在的差异;或者,
11.在针对所述当前数据集合的数据任务报错的情况下,检测所述数据仓库中当前数据集合的当前数据结构与历史数据集合的历史数据结构存在的差异。
12.可选的,所述获取数据仓库中来自数据源的当前数据集合的当前数据结构与来自所述数据源的历史数据集合的历史数据结构存在的差异,包括:
13.在通过协议缓冲区机制对来自所述数据源的数据进行序列化和反序列化处理的
情况下,获取所述数据源对应的数据结构定义文件的变更日志,并从所述变更日志中读取所述当前数据结构与所述历史数据结构存在的差异;或者,
14.在通过可扩展标记语言机制或js对象简谱机制对数据源中的原始数据进行序列化和反序列化处理的情况下,解析当前输入周期内输入的原始数据构成的所述当前数据集合的当前数据结构,以及前一输入周期内输入的历史数据构成的所述历史数据集合的历史数据结构;通过比较所述当前数据结构与所述历史数据结构确定二者存在的差异。
15.可选的,所述按照所述当前数据结构相对于所述历史数据结构的差异信息确定相应的目标字段,包括:
16.按照所述当前数据结构相对于所述历史数据结构的差异信息确定相应的变更字段;
17.将所述变更字段中所含的预定义的必备字段、与业务相关的业务核心字段和/或业务执行过程中的高频使用字段确定为目标字段。
18.可选的,所述根据所述目标字段更新所述数据仓库中定义的结构体字段,包括:
19.利用所述目标字段创建当前结构体字段,使所述当前结构体字段包含对应于所述目标字段的嵌套字段;
20.将所述数据仓库中定义的历史结构体字段替换为所述当前结构体字段。
21.根据本公开实施例的第二方面,提出一种更新数据的装置,包括:
22.差异确定模块,被配置为获取数据仓库中来自数据源的当前数据集合的当前数据结构与来自所述数据源的历史数据集合的历史数据结构存在的差异;
23.字段确定模块,被配置为按照所述当前数据结构相对于所述历史数据结构的差异信息确定相应的目标字段;
24.数据更新模块,被配置为根据所述目标字段更新所述数据仓库中定义的结构体字段,更新后的所述结构体字段中包含所述当前数据结构的结构信息,所述当前数据集合中的数据在按照所述结构信息构造后被所述数据仓库的下游数据任务调用。
25.可选的,所述差异确定模块,包括:
26.周期性检测单元,被配置为在所述数据源中的原始数据周期性输入所述数据仓库的情况下,检测当前输入周期内输入的所述当前数据集合的当前数据结构与前一输入周期内输入的所述历史数据集合的历史数据结构存在的差异;或者,
27.报错检测单元,被配置为在针对所述当前数据集合的数据任务报错的情况下,检测所述数据仓库中当前数据集合的当前数据结构与历史数据集合的历史数据结构存在的差异。
28.可选的,所述差异确定模块,还包括:
29.日志检测单元,被配置为在通过协议缓冲区机制对来自所述数据源的数据进行序列化和反序列化处理的情况下,获取所述数据源对应的数据结构定义文件的变更日志,并从所述变更日志中读取所述当前数据结构与所述历史数据结构存在的差异;或者,
30.结构解析单元,被配置为在通过可扩展标记语言机制或js对象简谱机制对数据源中的原始数据进行序列化和反序列化处理的情况下,解析当前输入周期内输入的原始数据构成的所述当前数据集合的当前数据结构,以及前一输入周期内输入的历史数据构成的所述历史数据集合的历史数据结构;通过比较所述当前数据结构与所述历史数据结构确定二
者存在的差异。
31.可选的,所述字段确定模块,包括:
32.变更字段确定单元,被配置为按照所述当前数据结构相对于所述历史数据结构的差异信息确定相应的变更字段;
33.目标字段确定单元,被配置为将所述变更字段中所含的预定义的必备字段、与业务相关的业务核心字段和/或业务执行过程中的高频使用字段确定为目标字段。
34.可选的,所述数据更新模块,包括:
35.结构体创建单元,被配置为利用所述目标字段创建当前结构体字段,使所述当前结构体字段包含对应于所述目标字段的嵌套字段;
36.结构体替换单元,被配置为将所述数据仓库中定义的历史结构体字段替换为所述当前结构体字段。
37.根据本公开实施例的第三方面,提出一种电子设备,包括:
38.处理器;
39.用于存储所述处理器可执行指令的存储器;
40.其中,所述处理器被配置为执行所述指令,以实现如上述任一实施例所述的更新数据的方法。
41.根据本公开实施例的第四方面,提出一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一实施例所述的更新数据的方法。
42.根据本公开实施例的第五方面,提供一种计算机程序产品,所述计算机程序产品被配置为执行上述任一实施例所述的更新数据的方法。
43.本公开的实施例提供的技术方案至少带来以下有益效果:
44.根据本公开的实施例,因为原始数据的数据结构随业务发生变化后会相应的影响数据仓库中当前数据集合的数据结构,所以通过检测当前数据结构与历史数据结构之间的差异能够及时获知原始数据的数据结构变化,并基于上述差异更新当前的结构体,保证了在原始数据的数据结构发生变化后的当前数据结构能够满足下游数据任务对当前数据集合中的当前数据的调用需求,从而有效保证了数据仓库的持续稳定产出,一定程度上提升了数据仓库的整体业务能力。
45.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
46.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
47.图1是包含数据仓库的数据中心架构示意图;
48.图2是根据本公开的实施例示出的一种更新数据的方法流程图;
49.图3是根据本公开的实施例示出的另一种更新数据的方法流程图;
50.图4是根据本公开的实施例示出的一种周期性更新结构体字段的时间轴示意图;
51.图5-图9分别是根据本公开的一个或多个实施例示出的一种或多种更新数据的装
置的示意框图;
52.图10是根据本公开的实施例示出的一种电子设备的结构图。
具体实施方式
53.为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
54.需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
55.作为为企业的决策制定过程提供数据支持的战略集合,数据仓库被广泛用于对多种业务数据进行筛选和整合,以便于数据集市执行数据分析、数据挖掘、数据报表等下游数据任务。数据仓库通常将与其相连的数据库等存储对象作为自身的数据源,以从数据源处获取与业务相关的原始数据。通常,数据仓库及与其相连的数据库和数据集市构成数据中心,常见的数据中心架构示意图可参见图1。如图1所示,作为数据仓库的数据来源,数据源中的原始数据通常具有确定的数据结构,而且数据源可以有多个,如图中的db1-bdn。数据源中的原始数据经过etl(extract-transform-load,抽取-转换-加载)处理后按照预定义的数据结构存储在数据仓库中,当与其相连的多个数据集市dm1-dmm需要调用数据仓库中的某些数据执行数据任务时,通常会由数据仓库按照对应于原始数据的当前数据结构的结构体(struct)对这部分数据进行组织后提供给数据集市。
56.当与数据源相连的目标应用发生软件更新、功能调整或人为对目标应用中原始数据的数据结构进行更改时,都可能导致原始数据的数据结构发生变化。此时,为保证数据仓库的下游数据任务正常运行,即保证数据仓库的持续稳定输出,需要按照变化后的数据结构相应的更新数据仓库中的结构体,以保证按照正确格式构造当前数据集合中的数据并提供给数据集市执行下游数据任务。
57.为此,本公开提出了一种更新数据的方法,以解决上述技术问题。图2是根据本公开的实施例示出的一种更新数据的方法流程图;所述方法应用于数据仓库,可以包括:
58.步骤202,获取数据仓库中来自数据源的当前数据集合的当前数据结构与来自所述数据源的历史数据集合的历史数据结构存在的差异。
59.对于本公开方案所涉及到的数据源,其对应的存储对象可以有多种形式,例如,可以为oracle、db2、microsoft sql server、microsoft access、mysql等关系型数据库,也可以为nosql、cloudant、mongodb、redis、hbase等非关系性数据库,还可以为其他形式的外部数据,本公开对此并不进行限制。
60.在一实施例中,对上述当前数据结构与历史数据结构之间差异的检测时机可以有多种可能。作为一示例性实施例,在数据源中的原始数据周期性输入数据仓库的情况下,可以检测当前输入周期内输入的当前数据集合的当前数据结构与前一输入周期内输入的历史数据集合的历史数据结构存在的差异。对于周期性输入原始数据的数据仓库,在每次输
入新的原始数据之后都能够对当前数据集合的当前数据结构与历史数据集合的历史数据结构之间的差异进行及时的检测,实现对机构数据仓库内结构体的及时调整,从根本上避免了仍按照原有结构体组织数据结构发生变化后的当前数据集合中的数据可能导致的下游数据任务报错,从而有效保证了数据仓库的稳定性。
61.作为另一示例性实施例,在针对当前数据集合的数据任务报错的情况下,可以检测数据仓库中当前数据集合的当前数据结构与历史数据集合的历史数据结构存在的差异。此时,虽然已经出现数据任务报错,但能够根据报错及时更新当前结构体以避免后续数据任务继续报错,一定程度上保证了数据仓库的稳定性。
62.在一实施例中,可以采用多种机制对来自数据源的原始数据进行序列化和反序列化处理。作为一示例性实施例,可以通过protocol buffer(pb,协议缓冲区)机制对来自所述数据源的数据进行序列化和反序列化处理,此时,需要通过数据结构定义文件预先定义数据格式。因此,可以获取数据源对应的数据结构定义文件的变更日志,并从变更日志中读取当前数据结构与历史数据结构存在的差异。因为采用protocol buffer机制的待处理数据与数据结构定义文件相互分离,所以仅读取数据量较少的数据结构定义文件的变更日志即可获取数据结构的差异信息;而且对数据结构定义文件的解析效率较高,从而对当前数据结构与历史数据结构所存在差异的检测效率也较高。
63.作为另一示例性实施例,可以通过xml(extensible markup language,可扩展标记语言)机制或json(javascript object notation,js对象简谱)机制对数据源中的原始数据进行序列化和反序列化处理,此时,数据结构的相关信息即包含在序列化之后的数据中。因此,可以解析当前输入周期内输入的原始数据构成的当前数据集合的当前数据结构,以及前一输入周期内输入的历史数据构成的历史数据集合的历史数据结构;然后通过比较当前数据结构与历史数据结构确定二者存在的差异。在上述xml或json机制下,可以通过解析数据集合直接获取当前数据结构和历史数据结构,再对二者进行比较有助于得到更加准确的差异比较结果,从而有助于提高数据结构差异检测的准确性。
64.步骤204,按照所述当前数据结构相对于所述历史数据结构的差异信息确定相应的目标字段。
65.在一实施例中,可以根据当前数据结构相对于历史数据结构的差异信息确定相应的变更字段;然后将变更字段中所含的预定义的必备字段、与业务相关的业务核心字段和/或业务执行过程中的高频使用字段确定为目标字段。此时,上述必备字段、业务核心字段和目标字段可以认为是数据仓库的重要字段,仅将数据仓库的全部变更字段中的部分重要字段作为目标字段用于更新结构体字段,在保证有效更新的基础性上减少了被更新结构体字段的数据量,相应的减少了更新结构体字段的工作量。
66.在另一实施例中,可以将全部的变更字段均确定为目标字段,进而更新全部变更字段对应的结构体字段,此时能够实现对结构体字段的全面更新,更新后的结构体字段能够完全反映原始数据发生变化后的当前数据结构,便于对数据仓库的结构体字段进行更新溯源和后期维护。
67.步骤206,根据所述目标字段更新所述数据仓库中定义的结构体字段,更新后的所述结构体字段中包含所述当前数据结构的结构信息,所述当前数据集合中的数据在按照所述结构信息构造后被所述数据仓库的下游数据任务调用。
68.在一实施例中,可以利用目标字段创建当前结构体字段,使当前结构体字段包含对应于目标字段的嵌套字段,再将数据仓库中定义的历史结构体字段替换为当前结构体字段。此时,创建的当前结构体字段中的嵌套字段即对应于目标字段,而且替换后的当前结构体字段能够满足下游数据任务对当前数据集合中数据的特定调用需求。
69.通过本公开的上述实施例,检测当前数据结构与历史数据结构之间的差异以及时获知原始数据所对应当前数据集合的当前数据结构,并基于上述差异更新数据仓库中的结构体字段,保证了在原始数据的数据结构发生变化后,对应于当前数据结构的当前结构体字段能够满足下游数据任务对当前数据集合中的当前数据的调用需求,从而有效保证了数据仓库的持续稳定产出,一定程度上提升了数据仓库的整体业务能力。
70.将原始数据输入数据仓库的过程可以是周期性进行的,相应的,对结构体字段进行更新也可以是周期性进行的。下面结合图3所示实施例的一种周期性更新结构体字段的时间轴示意图,对某一目标应用运行过程中产生的原始数据周期性输入数据仓库并更新结构体的过程进行详细说明。在该实施例中,以数据仓库采用protocol buffer机制对来自所述数据源的数据进行序列化和反序列化处理为例进行说明。
71.如图3所示,首先,在目标应用上线时会预先定义protocol buffer机制的原始pb定义文件,用于将数据源中的原始数据序列化为二进制数据流以输入至数据仓库,并将相应的二进制数据流反序列化为原始数据。在目标应用的整个生命周期中对目标应用进行的软件更新、功能调整或人为对目标应用的产生原始数据的数据结构进行的更改,都可能导致pb定义文件发生相应的变化,因此可以通过检测当前pb定义文件与前一周期的历史pb定义文件之间是否存在差异来确定当前原始数据的数据结构是否发生变更。
72.在目标应用上线一段时间后的第一输入时刻进行第一次数据输入,即将应用上线时刻至第一输入时刻这一时间段内产生的原始数据统一经过etl处理后输入数据仓库。然后在第一次数据输入完成后的第一检测时刻,检测当前pb定义文件与原始pb定义文件是否存在差异:若存在差异,则对数据仓库内的当前结构体字段进行相应的更新;否则,若不存在差异,则继续沿用当前结构体字段。
73.在第一输入时刻之后经过预设时间段的第二输入时刻进行第二次数据输入,即将上述第一输入时刻至第二输入时刻这一时间段内产生的原始数据统一经过etl处理后输入数据仓库。值得说明的是,上述第二输入时刻与第一输入时刻之间的时间间隔(即第一输入周期)的大小可以根据业务类型、业务需求、数据仓库性能以及下游数据任务的需求等具体情况确定,如可以为1小时、12小时、1天、1星期、1月等,本身申请对此并不进行限制。在第二次数据输入完成后的第二检测时刻,检测当前pb定义文件与第一检测时刻后的pb定义文件(可能为原始pb定义文件,也可能为更新后的pb定义文件)是否存在差异:若存在差异,则对数据仓库内的当前结构体字段进行相应的更新;否则,若不存在差异,则继续沿用当前结构体字段。
74.同样的,在第二输入时刻之后经过预设时间段的第三输入时刻进行第三次数据输入,第三次数据输入及第三检测时刻进行的第三次pb定义文件检测的具体过程同第二次并无本质区别,不再赘述。
75.由上述分析可见,在第i(其中,i为正整数)输入周期内的第i检测时刻检测的是第i次输入的原始数据对应的当前pb定义文件与第i-1检测时刻后的历史pb定义文件之间的
差异,因此只要在第i 1次输入时刻之前完成第i次检测并在必要时对结构体字段进行相应的更新,即可保证第i 1输入周期内下游数据任务所需的数据能够被数据仓库使用最新的结构体字段进行组织得到,而不会影响下游数据任务的正常进行。因此,第i检测时刻只需要位于第i输入时刻和第i 1输入时刻之间(即第i输入周期内)即可,至于从第i此数据输入完成至进行第i此检测之间的时间间隔,可以根据实际应用场景及需求进行调整。例如,第i检测时刻可以为与第i输入时刻间隔预设时间段的时间点,如第i检测时刻后的1小时;第i检测时刻也可以为与第i输入时刻间隔第i输入周期的预设比例的时间点,如第i输入时刻和第i 1输入时刻的中间时刻等,本公开对此并不进行限制。
76.对应于图3所示的周期性输入原始数据并进行检测pb定义文件差异检测的实施例,下面结合图4所示的另一种更新数据的方法交互流程图,对数据仓库在第i输入周期(下称当前输入周期)内通过本公开的技术方案对结构体进行更新的过程进行详细描述。该方法应用于数据仓库,如图3所示,可以包括以下步骤:
77.步骤402,将数据源的原始数据输入数据仓库。
78.数据仓库接收数据源输入的原始数据的过程,即为数据仓库将第i-1输入时刻至第i输入时刻这一时间段内产生的原始数据统一经过etl处理后输入数据仓库的过程,具体的etl处理及输入过程可以参见相关技术中公开的内容,此处不再赘述。
79.步骤404,判断当前数据结构相对于历史数据结构是否存在结构变更。
80.因为该实施例采用protocol buffer机制对来自所述数据源的数据进行序列化和反序列化处理,因此可以先获取数据源对应的pb定义文件的变更日志,然后从更日志中读取当前数据结构与历史数据结构存在的差异。
81.在一实施例中,上述pb定义文件的变更日志可以仅在当前数据结构与历史数据结构存在差异的情况下生成,以便降低当前数据结构与历史数据结构不存在差异时的日志生成及维护成本。此时,可以先确定在第i输入周期内是否生成了变更日志:若生成了变更日志,则说明当前数据结构与历史数据结构存在差异,此时,可以解析该变更日志以获取有效的差异信息并转入步骤406;若未生成变更日志,则说明当前数据结构与历史数据结构不存在差异,转入步骤414。另外,因为通常数据结构变更并不频繁,因此只需要查看有无变更日志自产生即可获知当前数据结构与历史数据结构是否存在差异,有效减少了差异检测的无效操作。
82.在另一实施例中,上述pb定义文件的变更日志可以在第i输入时刻的第i次数据输入完成后生成。此时可以在确定出当前输入周期内的变更日志后解析该变更日志,以获取相应的差异信息:若解析获取的差异信息为有效差异信息,则说明当前数据结构与历史数据结构存在差异,转入步骤406;否则,若解析出的差异信息为空信息或无效信息,则说明当前数据结构与历史数据结构不存在差异,转入步骤414。
83.当然,在数据仓库通过xml机制或json机制对数据源中的原始数据进行序列化和反序列化处理的情况下,可以直接解析当前输入周期内输入的原始数据构成的当前数据集合的当前数据结构,并解析前一输入周期内输入的历史数据构成的历史数据集合的历史数据结构;然后通过比较当前数据结构与历史数据结构确定二者存在的差异,具体过程不再赘述。此时,通过直接解析数据集合直观的获知当前数据结构和历史数据结构,有助于得到更加准确的差异比较结果。
84.步骤406,判断是否存在对应于差异信息的重要字段。
85.已知第i输入时刻输入原始数据构成的当前数据集合的当前数据结构与第i-1输入时刻输入原始数据构成的历史数据集合的历史数据结构存在差异。此时,可以先利用前述步骤404解析变更日志得到的差异信息先确定相应的变更字段。该变更字段即为第i输入时刻输入的原始数据相对于第i-1输入时刻输入的原始数据发生变化的字段。例如,第i-1输入时刻输入的原始数据对应的字段为stu_i-1[name,num,score],而第i输入时刻输入的原始数据对应的字段为stu_i[name,age,num,score],则此时的变更字段即为“age”。
[0086]
在一实施例中,可以判断确定出的变更字段中是否存在重要字段,其中,重要字段可以包括数据仓库自身运行过程中需要的字段,如数据仓库中预定义的必备字段等;也可以包括业务运行过程中需要的字段,如与业务相关的业务核心字段、业务执行过程中的高频使用字段等。此时,上述必备字段、核心字段和目标字段可以认为是数据仓库的重要字段,仅将这部分重要字段作为目标字段用于更新结构体字段,在保证更新有效的基础性上减少了被更新结构体的数据量,相应的减少了更新结构体字段的工作量。
[0087]
在上述变更字段中确定出的重要字段可以有一个或多个,在确定出多个重要字段的情况下,各个重要字段可以为相同类型的字段,也可以为不同类型的字段,本公开对于重要字段的个数及类型并不进行限制。重要字段是会对数据仓库或下游数据任务正常运行产生影响的字段,按照此时的重要字段进行后续结构体字段的更新,能够在尽量少的更新基础上保证数据仓库和业务的正常运行。若确定出存在对应于差异信息的重要字段,则转入步骤408;否则,若确定出不存在对应于差异信息的重要字段,则转入步骤414。
[0088]
在另一实施例中,可以直接将确定出的全部变更字段确定为重要字段,然后转入步骤408。此时,后续更新过程中会相应的将变更字段对应的结构体字段全部更新,从而使更新后的结构体更加详细的反映原始数据的数据结构变化,便于对数据仓库的结构体进行更新溯源和后期维护。
[0089]
步骤408,抽取重要字段创建新的结构体字段。
[0090]
在确定出差异信息对应的重要字段后,可以在数据仓库的所有字段中抽取上述重要字段。例如,可以根据差异信息确定重要字段的开始位置和结束位置,然后按照预设的抽取规则将开始位置和结束位置之间的字段抽取出来构成新的字段,即被抽取的字段。
[0091]
例如,可以使用python语言中的字段截取函数slice(start,stop)抽取字段,对大于等于start的位置至小于stop的位置的字段进行抽取。其他编程语言的具体抽取过程可以参见相关技术中公开的内容,本公开对于重要字段的具体抽取方式并不进行限制。
[0092]
抽取出重要字段后,基于抽取的重要字段创建新的结构体字段。可以理解的是,若重要字段为上述差异信息对应的全部变更字段,则创建的新的结构体字段对应于发生变更的全部原始数据的数据结构;若重要字段为上述差异信息对应的全部变更字段中的部分重要字段,则创建的新的结构体字段对应于发生变更的部分重要原始数据的数据结构。
[0093]
仍以上述变更字段为“age”的场景为例:在变更发生之前,上述原始数据在数据仓库中对应的结构体字段stu1的创建过程如下,
[0094]
struct stu{
[0095]
char*name;//姓名
[0096]
int num;//学号
[0097]
float score;//成绩
[0098]
};
[0099]
struct stu stu1;
[0100]
当上述变更发生后,原始数据中新增了年龄“age”字段,相应的,针对变更后的原始数据可以在数据仓库中创建对应的新的结构体字段stu11,过程如下,
[0101]
struct stu{
[0102]
char*name;//姓名
[0103]
int age;//年龄
[0104]
int num;//学号
[0105]
float score;//成绩
[0106]
};
[0107]
struct stu stu11;
[0108]
需要说明的是,上述新创建的结构体字段命名为“stu11”是为了与原有结构体字段“stu1”加以区分以便说明,在实际应用中,可以将新创建的结构体字段命名为与需要替换的历史结构体字段相同的结构体字段名称,以便直接替换原有结构体字段的同时不需要更改数据仓库中与该结构体字段相关的其他代码,从而简化结构体字段的更新操作。例如该实施例中可以将新创建的结构体字段命名为“stu1”。原有结构体字段stu1包含三个成员:name、num和score,而新创建的结构体字段stu11包含4个成员:name、age、num和score。可见,新创建的结构体字段stu11体现了上述第i输入时刻输入的原始数据相对于第i-1输入时刻输入的原始数据新增了年龄“age”字段这一更新。
[0109]
步骤410,利用新创建的结构体替换历史结构体字段。
[0110]
在使用更新后的重要字段创建新的结构体字段后,可以使用新的结构体字段替换原有的历史结构体字段,可以理解的是,上述替换过程是具有针对性的,即新创建的结构体字段用于替换与其对应的历史结构体字段。
[0111]
由针对图3的上述分析可知,结构体字段的替换过程也是结构体字段周期性迭代的过程。因为软件更新、业务功能调整或数据结构更改等变化存在不确定性,所以对于第i输入周期新创建的结构体字段而言,被其替换的历史结构体字段可以有多种可能。例如,在当前输入周期内被替换的历史结构体字段可以为前一输入周期内更新的结构体字段,也可以为在前一输入周期之前的其他输入周期内更新的结构体字段,还可以为前i-1个输入周期内均未被更新的对应于原始pb定义文件的结构体字段。也就是说,只要是当前输入周期之前的最新结构体字段,都可能在当前输入周期内被替换以实现更新。例如,可以使用上述新创建的结构体字段stu11替换历史结构体字段stu1,从而实现对历史结构体字段stu1的更新。
[0112]
上述替换过程可以为实际存储空间及逻辑关系的替换,即删除历史结构体字段stu1,并在历史结构体字段对应的存储空间内创建新的结构体字段stu11;上述替换过程也可以仅为逻辑关系的替换,即在新的存储空间内创建新的结构体字段stu11后实现stu11与关联结构体字段之间的逻辑关系,并将历史结构体字段stu1删除以回收相应的存储空间。
[0113]
步骤412,使用当前结构体字段组织当前数据集合中的数据。
[0114]
在上述替换完成后,前一输入周期对应的历史结构体字段中需要被更新的结构体
字段被相应的替换为当前输入周期内利用上述重要字段新创建的结构体字段,此时,替换后的新的结构体字段和未替换的历史结构体字段共同构成当前结构体字段。数据仓库可以使用当前结构体字段对当前数据集合中的数据进行合理组织,并提供给数据集市用于下游数据任务。
[0115]
步骤414,使用历史结构体字段组织当前数据结合中的数据。
[0116]
此时,当前数据结构与历史数据结构不存在差异,或者存在差异但差异信息对应的变更字段中不存在会对数据仓库或下游数据任务正常运行产生影响的重要字段,因此可以继续沿用前一输入周期对应的历史结构体字段。此时可以认为历史结构体字段即为当前输入周期的当前结构体字段,即在当前输入周期输入原始数据后不需要对历史结构体字段进行更新操作。
[0117]
在上述步骤412-步骤414中,无论使用更新后的当前结构体字段还是沿用前一输入周期对应的历史结构体字段,使用结构体字段将当前数据集合中的数据组织成当前结构体字段对应的预设格式并提供给数据集市用于下游数据任务的过程,与相关技术中公开的常规组织过程并不存在本质区别,因此上述具体组织过程可以参见相关技术中公开的内容,本公开对此并不进行限制。
[0118]
与前述更新数据的方法的实施例相对应地,本公开还提出了更新数据的装置的实施例。
[0119]
图5-图9分别是根据本公开的一个或多个实施例示出的一种或多种更新数据的装置的示意框图。本实施例所示的更新数据的装置可以适用于数据仓库,例如,数据仓库可以包括数据库服务器、etl服务器、调度服务器、报表服务器、bi(business intelligence,商业智能)门户服务器和或接口服务器等部分。
[0120]
如图5所示,所述更新数据的装置可以包括:
[0121]
差异确定模块501,被配置为获取数据仓库中来自数据源的当前数据集合的当前数据结构与来自所述数据源的历史数据集合的历史数据结构存在的差异;
[0122]
字段确定模块502,被配置为按照所述当前数据结构相对于所述历史数据结构的差异信息确定相应的目标字段;
[0123]
数据更新模块503,被配置为根据所述目标字段更新所述数据仓库中定义的结构体字段,更新后的所述结构体字段中包含所述当前数据结构的结构信息,所述当前数据集合中的数据在按照所述结构信息构造后被所述数据仓库的下游数据任务调用。
[0124]
可选的,如图6所示,所述差异确定模块501,可以包括:
[0125]
周期性检测单元501a,被配置为在所述数据源中的原始数据周期性输入所述数据仓库的情况下,检测当前输入周期内输入的所述当前数据集合的当前数据结构与前一输入周期内输入的所述历史数据集合的历史数据结构存在的差异;或者,
[0126]
报错检测单元501b,被配置为在针对所述当前数据集合的数据任务报错的情况下,检测所述数据仓库中当前数据集合的当前数据结构与历史数据集合的历史数据结构存在的差异。
[0127]
可选的,如图7所示,所述差异确定模块501,还可以包括:
[0128]
日志检测单元501c,被配置为在通过协议缓冲区机制对来自所述数据源的数据进行序列化和反序列化处理的情况下,获取所述数据源对应的数据结构定义文件的变更日
志,并从所述变更日志中读取所述当前数据结构与所述历史数据结构存在的差异;或者,
[0129]
结构解析单元501d,被配置为在通过可扩展标记语言机制或js对象简谱机制对数据源中的原始数据进行序列化和反序列化处理的情况下,解析当前输入周期内输入的原始数据构成的所述当前数据集合的当前数据结构,以及前一输入周期内输入的历史数据构成的所述历史数据集合的历史数据结构;通过比较所述当前数据结构与所述历史数据结构确定二者存在的差异。
[0130]
可选的,所述字段确定模块502,可以包括:
[0131]
变更字段确定单元502a,被配置为按照所述当前数据结构相对于所述历史数据结构的差异信息确定相应的变更字段;
[0132]
目标字段确定单元502b,被配置为将所述变更字段中所含的预定义的必备字段、与业务相关的业务核心字段和/或业务执行过程中的高频使用字段确定为目标字段。
[0133]
可选的,如图9所示,所述数据更新模块503,可以包括:
[0134]
结构体创建单元503a,被配置为利用所述目标字段创建当前结构体字段,使所述当前结构体字段包含对应于所述目标字段的嵌套字段;
[0135]
结构体替换单元503b,被配置为将所述数据仓库中定义的历史结构体字段替换为所述当前结构体字段。
[0136]
本公开的实施例还提出一种电子设备,包括:
[0137]
处理器;
[0138]
用于存储所述处理器可执行指令的存储器;
[0139]
其中,所述处理器被配置为执行所述指令,以实现如上述任一实施例所述的更新数据的方法。
[0140]
本公开的实施例还提出一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一实施例所述的更新数据的方法。
[0141]
本公开的实施例还提出一种计算机程序产品,所述计算机程序产品被配置为执行上述任一实施例所述的更新数据的方法。
[0142]
图10是根据本公开的实施例示出的一种电子设备的示意框图。例如,电子设备1000可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
[0143]
参照图10,电子设备1000可以包括以下一个或多个组件:处理组件1002,存储器1004,电源组件1006,多媒体组件1008,音频组件1010,输入/输出(i/o)的接口1012,传感器组件1014,以及通信组件1018。
[0144]
处理组件1002通常控制电子设备1000的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件1002可以包括一个或多个处理器1020来执行指令,以完成上述更新数据的方法的全部或部分步骤。此外,处理组件1002可以包括一个或多个模块,便于处理组件1002和其他组件之间的交互。例如,处理组件1002可以包括多媒体模块,以方便多媒体组件1008和处理组件1002之间的交互。
[0145]
存储器1004被配置为存储各种类型的数据以支持在电子设备1000的操作。这些数据的示例包括用于在电子设备1000上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器1004可以由任何类型的易失性或非易失性存储设备
或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
[0146]
电源组件1006为电子设备1000的各种组件提供电力。电源组件1006可以包括电源管理系统,一个或多个电源,及其他与为电子设备1000生成、管理和分配电力相关联的组件。
[0147]
多媒体组件1008包括在电子设备1000和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件1008包括一个前置摄像头和/或后置摄像头。当电子设备1000处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
[0148]
音频组件1010被配置为输出和/或输入音频信号。例如,音频组件1010包括一个麦克风(mic),当电子设备1000处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器1004或经由通信组件1018发送。在一些实施例中,音频组件1010还包括一个扬声器,用于输出音频信号。
[0149]
i/o接口1012为处理组件1002和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
[0150]
传感器组件1014包括一个或多个传感器,用于为电子设备1000提供各个方面的状态评估。例如,传感器组件1014可以检测到电子设备1000的打开/关闭状态,组件的相对定位,例如所述组件为电子设备1000的显示器和小键盘,传感器组件1014还可以检测电子设备1000或电子设备1000一个组件的位置改变,用户与电子设备1000接触的存在或不存在,电子设备1000方位或加速/减速和电子设备1000的温度变化。传感器组件1014可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件1014还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件1014还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
[0151]
通信组件1018被配置为便于电子设备1000和其他设备之间有线或无线方式的通信。电子设备1000可以接入基于通信标准的无线网络,如wifi,运营商网络(如2g、3g、4g或5g),或它们的组合。在一个示例性实施例中,通信组件1018经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件1018还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
[0152]
在本公开一实施例中,电子设备1000可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可
编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述更新数据的方法。
[0153]
在本公开一实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器1004,上述指令可由电子设备1000的处理器1020执行以完成上述更新数据的方法。例如,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
[0154]
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
[0155]
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
[0156]
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0157]
以上对本公开实施例所提供的方法和装置进行了详细介绍,本文中应用了具体个例对本公开的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本公开的方法及其核心思想;同时,对于本领域的一般技术人员,依据本公开的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本公开的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献