拉链表处理方法、装置、电子设备及存储介质与流程

文档序号:33039186发布日期:2023-01-24 20:56阅读:165来源:国知局
拉链表处理方法、装置、电子设备及存储介质与流程

1.本发明涉及数据处理技术领域,具体而言,涉及一种拉链表处理方法、装置、电子设备及存储介质。


背景技术:

2.拉链表,记录每条信息的声明周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当前日期作为生效开始日期。拉链表适用于大部分数据不发生变化的应用场景,若小部分数据发生变化时,需要对拉链表进行重跑,目前的重跑方式从数据变化的日期起到拉链表中最新日期之间的所有数据需要利用游标循环重跑多次,才能得到更新后的拉链表,因此,拉链表重跑时的更新效率较低。


技术实现要素:

3.本发明的目的在于提供了一种拉链表处理方法、装置、电子设备及存储介质,其能够提高拉链表重跑时的更新效率。
4.为了实现上述目的,本发明采用的技术方案如下:
5.第一方面,本发明提供一种拉链表处理方法,所述方法包括:
6.获取当前数据表、拉链表及辅助表,所述当前数据表存储有预设账期内待更新至所述拉链表中的数据,所述拉链表最近一次更新是基于最近待更新数据更新的,所述辅助表包括所述最近待更新数据中未发生变化的数据;
7.将所述当前数据表中的数据、所述拉链表中除与所述预设账期相同的数据之外的数据及所述辅助表中除与所述预设账期相同的数据之外的数据进行合并,得到临时表;
8.根据所述临时表更新所述拉链表。
9.可选地,所述临时表中包括多条记录,每一所述记录包括当前账期,所述根据所述临时表更新所述拉链表的步骤包括:
10.将所述临时表中的所有记录按照当前账期进行升序排序;
11.根据所述临时表中每一记录的上个账期及记录值,确定所述每一记录是否发生变化,所述每一记录的上个账期为与所述每一记录的上一条记录的当前账期;
12.根据所有发生变化的记录更新所述拉链表。
13.可选地,所述根据所述临时表中每一记录的上个账期及记录值,确定所述每一记录是否发生变化的步骤包括:
14.对于所述临时表中的任一目标记录,若所述目标记录的上个账期不为预设空值、且所述目标记录的记录值与所述目标记录的前一个记录的记录值相同,则判定所述目标记录未发生变化,否则,判定所述目标记录发生变化,最终确定所述每一记录是否发生变化。
15.可选地,所述根据所有发生变化的记录更新所述拉链表的步骤包括:
16.将所有发生变化的记录按照当前账期的升序排序,得到记录序列;
17.确定所述记录序列中每一记录的开始账期和结束账期;
18.清空所述拉链表;
19.将所述记录序列中每一记录的当前账期、开始账期、结束账期及记录值更新至所述拉链表。
20.可选地,所述确定所述记录序列中每一记录的开始账期和结束账期的步骤包括:
21.获取所述每一记录的下个账期,所述每一记录的下个账期为所述每一记录的下一条记录的当前账期;
22.将所述每一记录的开始账期设置为所述每一记录的当前账期;
23.若所述每一记录的下个账期不为无效值,则根据所述每一记录的下个账期及预设粒度确定所述每一记录的结束账期;
24.若所述每一记录的下个账期为无效值,则将所述每一记录的结束账期设置为预设最大值。
25.可选地,所述根据所述每一记录的下个账期及预设粒度确定所述每一记录的结束账期的步骤包括:
26.获取所述预设粒度包括的预设天数;
27.根据所述每一记录的下个账期及所述预设天数,得到所述每一记录的结束账期,所述每一记录的结束账期在所述每一记录的下个账期之前、且与所述预设天数间隔所述预设天数。
28.可选地,所述方法还包括:
29.清空所述辅助表;
30.将所有未发生变化的记录更新至所述辅助表中。
31.第二方面,本发明提供一种拉链表处理装置,所述装置包括:
32.获取模块,用于获取当前数据表、拉链表及辅助表,所述当前数据表存储有预设账期内待更新至所述拉链表中的数据,所述拉链表最近一次更新是基于最近待更新数据更新的,所述辅助表包括所述最近待更新数据中未发生变化的数据;
33.合并模块,用于将所述当前数据表中的数据、所述拉链表中除与所述预设账期相同的数据之外的数据及所述辅助表中除与所述预设账期相同的数据之外的数据进行合并,得到临时表;
34.更新模块,用于根据所述临时表更新所述拉链表。
35.第三方面,本发明提供一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上述的拉链表处理方法。
36.第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述的拉链表处理方法。
37.与现有技术相比,本发明通过包括用于最近一次更新拉链表的最近待更新数据中未变化的数据的辅助表,根据当前数据表中的数据、拉链表中除与预设账期相同的数据之外的数据、及辅助表中除与预设账期相同的数据之外的数据进行合并得到的临时表,更新拉链表,使得拉链表只需要重跑一次,极大地提高了拉链表重跑时的更新效率。
附图说明
38.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附
图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
39.图1为本发明实施例提供的拉链表处理方法的流程示例图一。
40.图2为本发明实施例提供的拉链表处理方法的流程示例图二。
41.图3为发明实施例提供的拉链表处理方法的流程示例图三。
42.图4为本发明实施例提供的拉链表处理装置的方框示意图。
43.图5为本发明实施例提供的电子设备的方框示意图。
44.图标:10-电子设备;11-处理器;12-存储器;13-总线;100-拉链表处理装置;110-获取模块;120-合并模块;130-更新模块。
具体实施方式
45.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
46.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
47.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
48.在本发明的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
49.此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
50.需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
51.现有技术中,拉链表重跑历史数据特别复杂,且局限性很大,比如拉链表数据含有数据账期2022-01-01~2022-12-01的数据,其中的2022-03-01数据需要重跑,按目前的处理方式,需要用到存储过程及游标循环的方式,依次将2022-03-01~2022-12-01之间的数据均重跑一次,最终得到更新后的拉链表,这样的处理方式需要重跑多次,因而效率极低。
52.有鉴于此,本实施例提供了一种拉链表处理方法、装置、电子设备及存储介质,只需要一次重跑,即得到更新后的拉链表,极大地提升了效率,下面将对其进行详细描述。
53.请参照图1,图1为本发明实施例提供的拉链表处理方法的流程示例图一,该方法包括以下步骤:
54.步骤s100,获取当前数据表、拉链表及辅助表,当前数据表存储有预设账期内待更新至拉链表中的数据,拉链表最近一次更新是基于最近待更新数据更新的,辅助表包括最
近待更新数据中未发生变化的数据。
55.在本实施例中,账期为数据的批次,例如,2022-08-25有一批数据需要更新到拉链表中,那么这个批次的数据账期就是2022-08-25,预设账期为当前数据表中数据的批次。
56.在本实施例中,当前数据表中的数据可以是新的账期数据也可能是历史数据需要更正拉链表的数据,例如,拉链表中的数据的账期为2021-01-01~2021-12-01,当前数据表中的数据可以是2022-1-1的数据,也可以2021-03-01的数据,若拉链表最近一次更新基于的最近待更新数据为2021年12月的数据,则辅助表中的数据为2021年12月的数据中未发生变化的数据,若拉链表中的2021-03-01账期的数据有问题,则要先获取没有问题的2021-03-01账期的数据,将其放入当前数据表中,再根据当前数据表、拉链表及辅助表更新拉链表。
57.步骤s101,将当前数据表中的数据、拉链表中除与预设账期相同的数据之外的数据及辅助表中除与预设账期相同的数据之外的数据进行合并,得到临时表。
58.在本实施例中,当前数据表、拉链表及辅助表均至少包括一个记录,每一记录包括各自的当前账期,当前数据表中的每一记录的当前账期为预设账期,拉链表和辅助表中既可能存在当前账期与预设账期相同的数据,也可能存在当前账期与预设账期不相同的数据,拉链表和辅助表与预设账期相同的数据为有问题的数据,不需要参与合并。
59.步骤s102,根据临时表更新拉链表。
60.在本实施例中,由于临时表包括了当前数据表中的数据、拉链表及辅助表中的正确数据,因此,根据临时表就可以直接对拉链表进行更新,且更新后的拉链表是根据当前数据表中的数据对拉链表进行正确更新后的表。
61.本实施例提供的上述方法,通过包括用于最近一次更新拉链表的最近待更新数据中未变化的数据的辅助表,根据当前数据表中的数据、拉链表中除与预设账期相同的数据之外的数据、及辅助表中除与预设账期相同的数据之外的数据进行合并得到的临时表,更新拉链表,使得拉链表只需要重跑一次,极大地提高了拉链表重跑时的更新效率。
62.在图1的基础上,本实施例还提供了更新拉链表的一种实现方式,请参照图2,图2为本发明实施例提供的拉链表处理方法的流程示例图二,步骤s102包括以下子步骤:
63.子步骤s1021,将临时表中的所有记录按照当前账期进行升序排序。
64.在本实施例中,临时表中包括多条记录,每一记录包括当前账期,将所有记录按照当前账期从早到晚进行升序排序。
65.子步骤s1022,根据临时表中每一记录的上个账期及记录值,确定每一记录是否发生变化,每一记录的上个账期为与每一记录的上一条记录的当前账期。
66.在本实施例中,每一记录的记录值表征每一记录表示的信息字段,例如,临时表记录的是同一个基站的经度和纬度的信息,临时表中每一个记录的信息字段是基站的经度字段和纬度字段,每一记录的当前账期为该记录的经度字段和纬度字段的获取时间,例如,表1为临时表的示例:
67.表1
68.序号基站id经度纬度当前账期11116.439.32022-08-2021116.439.12022-08-25
31116.439.12022-09-0141116.439.12022-09-03
69.表1中的信息都是基站id为1的基站的经度和纬度的信息,记录1在2022-8-20获取的经度和纬度分别是:116.4、39.3,记录2在2022-8-25获取的经度和纬度分别是:116.4、39.1。记录2的上个账期为记录1的当前账期,即:2022-08-20,由于记录1不存在上个账期,则可以将记录1的上个账期用一个特殊符号或者特殊值表示,例如,用“null”标识。
70.在本实施例中,每一记录的上个账期可以采用sql中的lag()函数得到。
71.作为一种实现方式,确定每一记录是否发生变化可以按照如下方式进行:
72.对于临时表中的任一目标记录,若目标记录的上个账期不为预设空值、且目标记录的记录值与目标记录的前一个记录的记录值相同,则判定目标记录未发生变化,否则,判定目标记录发生变化,最终确定每一记录是否发生变化。对于表1而言,每一记录上个账期及每一记录是否发生变化的标志可以用表2示例说明:
73.表2
[0074][0075]
在本实施例中,发生变化,则用1表示,否则用0表示,预设空值用null表示,对于记录1而言,上个账期为null,则判定记录1发生变化,对于记录2而言,上个账期不为null,记录2的经度和纬度与记录1的经度和纬度不同,则记录2发生变化,对于记录3而言,上个账期不为null,且记录3的经度和纬度与记录2的经度和纬度相同,则记录3未变化,记录4和记录3类似。
[0076]
在本实施例中,作为一种实现方式,当记录值包括多个字段的值时,为了便于记录值的比较,还可以将多个字段合并为一个字段,表1中的经度和纬度字段合并为一个字段,例如,记录1的经纬度为:116.439.3。
[0077]
子步骤s1023,根据所有发生变化的记录更新拉链表。
[0078]
在本实施例中,只有发生变化的记录才会影响拉链表,作为一种实现方式,可以按照如下方式进行更新拉链表:
[0079]
首先,将所有发生变化的记录按照当前账期的升序排序,得到记录序列。
[0080]
在本实施例中,将所有发生变化的记录按照当前账期从早到晚进行升序排序,得到有序的记录序列。
[0081]
其次,确定记录序列中每一记录的开始账期和结束账期。
[0082]
在本实施例中,每一记录的记录值在该记录对应的开始账期和结束账期之间未被
更新,一种确定开始账期和结束账期的实现方式为:
[0083]
(1)获取每一记录的下个账期,每一记录的下个账期为每一记录的下一条记录的当前账期。
[0084]
在本实施例中,每一记录的下个账期可以通过sql的head()函数得到。
[0085]
(2)将每一记录的开始账期设置为每一记录的当前账期。
[0086]
由于记录序列中的记录都是发生变化的记录,因此,每一记录的开始账期为该记录的当前账期。
[0087]
(3)若每一记录的下个账期不为无效值,则根据每一记录的下个账期及预设粒度确定每一记录的结束账期。
[0088]
在本实施例中,预设粒度用于表征拉链表更新粒度,例如,拉链表是按月更新,则每获取一个月的数据,就对应更新拉链表,拉链表还可以按照天、周、季度等粒度进行更新,具体可以根据实际场景需要进行设置。一种实现方式为:
[0089]
获取预设粒度包括的预设天数;根据每一记录的下个账期及预设天数,得到每一记录的结束账期,每一记录的结束账期在每一记录的下个账期之前、且与预设天数间隔预设天数。
[0090]
在本实施例中,若预设天数为1天,下个账期为2022-8-24,则结束账期为2022-8-23。
[0091]
需要说明的是,若预设粒度为月,下个账期为2022-8-1,则结束账期为2022-7-1,预设粒度为周、季度与之类似,此处不再赘述。
[0092]
(4)若每一记录的下个账期为无效值,则将每一记录的结束账期设置为预设最大值。
[0093]
在本实施例中,若记录的下个账期为无效值,则认为该记录从开始账期起一直未被更新,预设最大值可以根据实际需要进行设置,例如,预设最大值设置为9999-12-31。
[0094]
第三,清空拉链表。
[0095]
第四,将记录序列中每一记录的当前账期、开始账期、结束账期及记录值更新至拉链表。
[0096]
在本实施例中,例如,预设粒度为天,记录序列如表3所示:
[0097]
表3
[0098][0099]
对于记录1而言,下个账期不为空,则其结束账期为2022-08-25的前一天即:2022-08-24,对于记录2而言,下个账期为空,则其结束账期为9999-12-31,最后得到的拉链表如表4所示:
[0100]
表4
[0101][0102]
在本实施例中,为了方便后续对拉链表进行正确地更新,还需要对辅助表进行更新,请参照图3,图3为本发明实施例提供的拉链表处理方法的流程示例图三,该方法包括以下步骤:
[0103]
步骤s103,清空辅助表。
[0104]
步骤s104,将所有未发生变化的记录更新至辅助表中。
[0105]
辅助表中的数据是有用的,例如拉链表中已具备(2021-01-01~2021-12-31)账期的数据,其中2021-06-30账期数据需要重新跑批,那么就要将上次更新拉链表运算中未发生变化的数据拉出来重新计算,其原因是2021-06-30数据发生了变化,对于基站经纬度而言,可能原本经纬度字段不变的基站发生了改变,原本改变的字段又没发生变化,这样会导致后面账期的数据错乱,所以每次计算的时候要辅助表重新参与计算。
[0106]
为了执行上述实施例及各个可能的实施方式中的相应步骤,下面给出一种拉链表处理装置100的实现方式。请参照图4,图4为本发明实施例提供的拉链表处理装置100的方框示意图。需要说明的是,本实施例所提供的拉链表处理装置100,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及指出。
[0107]
拉链表处理装置100包括获取模块110、合并模块120及更新模块130。
[0108]
获取模块110,用于获取当前数据表、拉链表及辅助表,当前数据表存储有预设账期内待更新至拉链表中的数据,拉链表最近一次更新是基于最近待更新数据更新的,辅助表包括最近待更新数据中未发生变化的数据。
[0109]
合并模块120,用于将当前数据表中的数据、拉链表中除与预设账期相同的数据之外的数据及辅助表中除与预设账期相同的数据之外的数据进行合并,得到临时表。
[0110]
更新模块130,用于根据临时表更新拉链表。
[0111]
可选地,临时表中包括多条记录,每一记录包括当前账期,更新模块130具体用于:将临时表中的所有记录按照当前账期进行升序排序;根据临时表中每一记录的上个账期及记录值,确定每一记录是否发生变化,每一记录的上个账期为与每一记录的上一条记录的当前账期;根据所有发生变化的记录更新拉链表。
[0112]
可选地,更新模块130在用于根据临时表中每一记录的上个账期及记录值,确定每一记录是否发生变化时具体用于:对于临时表中的任一目标记录,若目标记录的上个账期不为预设空值、且目标记录的记录值与目标记录的前一个记录的记录值相同,则判定目标记录未发生变化,否则,判定目标记录发生变化,最终确定每一记录是否发生变化。
[0113]
可选地,更新模块130具体用于:将所有发生变化的记录按照当前账期的升序排
序,得到记录序列;确定记录序列中每一记录的开始账期和结束账期;清空拉链表;将记录序列中每一记录的当前账期、开始账期、结束账期及记录值更新至拉链表。
[0114]
可选地,更新模块130在具体用于确定记录序列中每一记录的开始账期和结束账期时具体用于:获取每一记录的下个账期,每一记录的下个账期为每一记录的下一条记录的当前账期;将每一记录的开始账期设置为每一记录的当前账期;若每一记录的下个账期不为无效值,则根据每一记录的下个账期及预设粒度确定每一记录的结束账期;若每一记录的下个账期为无效值,则将每一记录的结束账期设置为预设最大值。
[0115]
可选地,更新模块130在具体用于根据每一记录的下个账期及预设粒度确定每一记录的结束账期时,具体用于:获取预设粒度包括的预设天数;根据每一记录的下个账期及预设天数,得到每一记录的结束账期,每一记录的结束账期在每一记录的下个账期之前、且与预设天数间隔预设天数。
[0116]
可选地,更新模块130还用于:清空辅助表;将所有未发生变化的记录更新至辅助表中。
[0117]
请参照图5,图5为本发明实施例提供的电子设备10的方框示意图,电子设备10包括处理器11、存储器12、总线13。处理器11、存储器12通过总线13连接。
[0118]
处理器11可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器11中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器11可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0119]
存储器12用于存储程序,例如本发明实施例中的拉链表处理装置100,拉链表处理装置100均包括至少一个可以软件或固件(firmware)的形式存储于存储器12中的软件功能模块,处理器11在接收到执行指令后,执行所述程序以实现本发明实施例中的拉链表处理方法。
[0120]
存储器12可能包括高速随机存取存储器(ram:random access memory),也可能还包括非易失存储器(non-volatile memory)。可选地,存储器12可以是内置于处理器11中的存储装置,也可以是独立于处理器11的存储装置。
[0121]
总线13可以是isa总线、pci总线或eisa总线等。图5仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0122]
本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述的拉链表处理方法。
[0123]
综上所述,本发明实施例提供了一种拉链表处理方法、装置、电子设备及存储介质,所述方法包括:获取当前数据表、拉链表及辅助表,所述当前数据表存储有预设账期内待更新至所述拉链表中的数据,所述拉链表最近一次更新是基于最近待更新数据更新的,所述辅助表包括所述最近待更新数据中未发生变化的数据;将所述当前数据表中的数据、所述拉链表中除与所述预设账期相同的数据之外的数据及所述辅助表中除与所述预设账期相同的数据之外的数据进行合并,得到临时表;根据所述临时表更新所述拉链表。与现有技术相比,本发明实施例通过包括用于最近一次更新拉链表的最近待更新数据中未变化的
数据的辅助表,根据当前数据表中的数据、拉链表中除与预设账期相同的数据之外的数据、及辅助表中除与预设账期相同的数据之外的数据进行合并得到的临时表,更新拉链表,使得拉链表只需要重跑一次,极大地提高了拉链表重跑时的更新效率。
[0124]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1