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

数据仓库拉链表存储方法、刷新方法及可读存储介质

文献发布时间:2023-06-19 11:32:36


数据仓库拉链表存储方法、刷新方法及可读存储介质

技术领域

本发明属于数据仓库技术领域,具体为一种数据仓库拉链表存储方法与刷新方法。

背景技术

数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合。拉链表是数据仓库中的一种数据模型,用来存储一个事物从起始到当前状态的所有变化的信息,是处理缓慢变化数据的一种方式。仅当源端业务数据发生变化时,拉链表才相应地变更,既保留了历史数据的变化信息,又不浪费存储空间。

数据仓库拉链表的每条记录包含开始时间(dw_start_date)与结束时间(dw_end_date)两个额外的字段,代表该条记录的状态在数据仓库的生命周期。截至当前有效的记录的dw_end_date则设置为一个较大的未来时间点(例如3999-12-31),作为“当前状态”的标识。

一个典型的数据仓库拉链表如表1所示:

表1 数据仓库拉链表示例

如果需要从上表中的拉链表查询最新的订单状态,则需限定dw_end_date =3999-12-31;如果需要查询2020-06-20日订单的历史状态,则需限定dw_start_date <=2020-06-20 且 dw_end_date >= 2020-06-20。

数据仓库拉链表刷新的一般方法如下:

1. 源端业务系统按日抽取前一日(记为ETLDATE日)的新增、变化记录并传递给数据仓库(记为增量表)。

2. 拉链表中dw_end_date = 3999-12-31的记录与增量表关联(按照用户ID、订单ID等对象的唯一标识关联),关联上的记录为需要封链的记录,将 dw_end_date更新为ETLDATE-1。

3. 将增量表中的记录插入拉链表,dw_start_date 置为 ETLDATE,dw_end_date置为3999-12-31。

目前数据仓库拉链表将截至当前有效的记录则存储在3999-12-31日分区中,但3999-12-31分区保存的是全量的当前有效的记录,是数据量最大的分区,拉链表的查询和刷新时间较长,浪费计算资源。

发明内容

本发明旨在解决目前拉链表对截至当前有效的记录的存储方式导致拉链表的查询和刷新时间较长的技术问题,提供一种数据仓库拉链表的存储方法与刷新方法。

为实现上述技术目的,本发明采用以下技术方案。

一方面提供一种数据仓库拉链表存储方法,包括:将历史封链数据存储于历史表,所述历史表中的数据按照结束时间的日期范围分区存储历史日的记录;将当前有效数据存储于当前表,所述当前表中的数据按照开始时间的日期范围分区存储相应开始日期生效的记录,所述历史表和所述当前表的结构相同且合并为整体的拉链表。

进一步地,所述历史表中的数据按照结束时间的日期范围分区存储历史日的记录具体为每个历史日日期的封链数据单独作为一个分区存储。

进一步地,所述当前表中的数据按照开始时间的日期范围分区存储相应开始日期生效的记录具体为每个开始日日期的有效数据单独作为一个分区存储。

第二方面,针对目前拉链表的刷新方法刷新效率不高的技术问题,本发明提供一种数据仓库拉链表刷新方法,所述拉链表采用以上技术方案任意一种可能的实施例提供的数据仓库拉链表存储方法进行存储,所述数据仓库拉链表刷新方法包括创建临时表,所述临时表的结构与所述拉链表结构相同,所述临时表包括当前分区和历史分区,所述当前分区用于保存当前有效数据,所述历史分区用于保存历史封链数据;

从系统抽取当前日期增量数据保存于增量表中,将拉链表的当前表与所述增量表进行关联匹配获取关联数据,将关联数据的结束时间设置为当前日期的前一日并插入临时表的历史分区;

非关联数据的结束时间仍为未来时间并插入临时表的当前分区,将增量表中记录的开始时间设置为当前日期,结束时间设置为未来时间,并插入临时表的当前分区,

将临时表历史分区的记录按照结束时间的日期范围插入拉链表历史表的最新分区,将临时表的当前分区的所有记录按照开始时间的日期范围覆盖插入拉链表的当前表的所有分区。

进一步地,所述临时表的历史分区中的数据按照结束时间的日期范围分区存储历史日的记录。

进一步地,所述临时表的当前分区中的数据按照开始时间的日期范围分区存储相应开始日期生效的记录。

进一步地,所述历史分区中的数据按照结束时间的日期范围分区存储历史日的记录具体为每个历史日日期的封链数据单独作为一个分区存储。

进一步地,所述当前分区中的数据按照开始时间的日期范围分区存储相应开始日期生效的记录具体为每个开始日日期的有效数据单独作为一个分区存储。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如以上技术方案任意一种可能的实施方式所提供的所述方法的步骤。

本发明所取得的有益技术效果:本发明将拉链表拆分为当前表与历史表两个子表,并组成查询视图。当前表按开始时间分区,历史表按结束时间分区,从拉链表视图中查询记录的指定日期的历史状态,仅需要扫描拉链表当前表指定日期之前的分区与拉链表历史表指定日期之后的分区,提高了检索效率。

本申请提案中的拉链表分为历史表与当前表两个子表后,在拉链表刷新过程中,仅需关联当前表,避免了现有方案中的整表关联、全表扫描。因此,本申请提案中的拉链表的刷新效率不会随着拉链表中的历史数据的增加而变慢。

附图说明

图1为本发明具体实施提供的数据仓库拉链表刷新方法流程示意图。

具体实施方式

为了使本申请的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。并且在不冲突的情况下,本说明中的实施例及实施例中的特征可以互相结合。

旨在解决目前拉链表对截至当前有效的记录的存储方式导致拉链表的查询和刷新时间较长的技术问题,提供一种数据仓库拉链表刷新与存储的方法。

实施例1:一种数据仓库拉链表存储方法,包括:将历史封链数据存储于历史表,所述历史表中的数据按照结束时间的日期范围分区存储历史日的记录;将当前有效数据存储于当前表,所述当前表中的数据按照开始时间的日期范围分区存储相应开始日期生效的记录,所述历史表和所述当前表的结构相同且合并为整体的拉链表。

由于本发明将拉链表拆分为当前表与历史表两个子表,并组成查询视图。当前表按开始时间分区,历史表按结束时间分区,从拉链表视图中查询记录的指定日期的历史状态,仅需要扫描拉链表当前表指定日期之前的分区与拉链表历史表指定日期之后的分区,提高了检索效率。本实施例如图1中的拉链视图表所示,将拉链表拆分为两个表结构相同的子表(历史表、当前表),并组成拉链表视图,包括:1、拉链表历史表:保存已经封链的历史记录。对表中的记录按dw_end_date字段的日期范围分区,每个分区保存历史日的记录,例如PE20200401分区保存的是dw_end_date = 2020-04-01的历史记录。

2、拉链表当前表:保存当前状态最新的记录,即dw_end_date=3999-12-31(本实施例中用3999-12-31表示未来时间)。对表中的记录按dw_start_date字段的日期范围分区,每个分区保存相应日期生效的记录,例如PS20200401分区保存的是dw_start_date =2020-04-01的记录。

历史表和当前表的实现可采用现有技术实现,本发明不再详细描述。历史表中的数据按照结束时间的日期范围分区存储历史日的记录,当前表中的数据按照开始时间的日期范围分区存储相应开始日期生效的记录,除本实施例提供的方式外本领域技术人员能够知晓其他按照日期范围分区存储的方式。

实施例2:一种数据仓库拉链表刷新方法,所述拉链表采用以上技术方案所提供的所述的数据仓库拉链表存储方法进行存储,所述数据仓库拉链表刷新方法包括创建临时表,所述临时表的结构与所述拉链表结构相同,所述临时表包括当前分区和历史分区,所述当前分区用于保存当前有效数据,所述历史分区用于历史封链数据;

从系统抽取当前日期增量数据保存于增量表中,将拉链表的当前表与所述增量表进行关联匹配获取关联数据,将关联数据的结束时间设置为当前日期的前一日并插入临时表的历史分区;

非关联数据的结束时间仍为未来时间并插入临时表的当前分区,将增量表中记录的开始时间设置为当前日期,结束时间设置为未来时间,并插入临时表的当前分区,

将临时表历史分区的记录按照结束时间的日期范围插入拉链表历史表的最新分区,将临时表的当前分区的所有记录按照开始时间的日期范围覆盖插入拉链表的当前表的所有分区。

本实施例的刷新流程图如图1所示。将拉链表拆分为两个表结构相同的子表(历史表、当前表),并组成拉链表视图,包括:1、拉链表历史表:保存已经封链的历史记录。对表中的记录按dw_end_date字段的日期范围分区,每个分区保存历史日的记录,例如PE20200401分区保存的是dw_end_date = 2020-04-01的历史记录。

2、拉链表当前表:保存当前状态最新的记录,即dw_end_date=3999-12-31。对表中的记录按dw_start_date字段的日期范围分区,每个分区保存相应日期生效的记录,例如PS20200401分区保存的是dw_start_date = 2020-04-01的记录。

3、临时表:表结构与拉链表一致,包含两个分区,当前分区C保存最新数据,即dw_end_date = 3999-12-31的记录;历史分区H保存需要封链的数据,即dw_end_date =ETLDATE-1的记录。

4、增量表:保存从源端业务系统抽取的当日新增、变化(ETLDATE)的记录。

表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),查询数据时,根据输入的查询日期范围,仅需扫描指定范围的分区,而不必扫描整张表,从而提高查询效率。

本技术方案的拉链表刷新流程如下所述:

1. 从源端业务系统按日抽取前一日(记为ETLDATE日)的新增、变化记录并传递给数据仓库,保存到增量表。

2. 拉链表当前表与增量表关联,如图1所示,包括2.1:关联上的记录为状态发生变化的,需要封链,将dw_end_date置为ETLDATE-1,并插入临时表的历史分区H;还包括2.2:关联不上的记录为状态未变化的,开始时间为当前日期需要保留,dw_end_date仍为未来时间3999-12-31,并插入临时表的当前分区C。

3. 将增量表中的记录dw_start_date 置为 ETLDATE,dw_end_date 置为3999-12-31,并插入临时表的当前分区C。

从图1可以看出,临时表中的数据来源为步骤2.2中关联不上的数据以及步骤3中增量表中新增或变化的记录。

4. 如图1包括4.1:将临时表历史分区H的记录插入拉链表历史表的PD ETLDATE-1分区;

4.2将临时表当前分区C的记录,按dw_start_date覆盖插入重建拉链表当前表的各分区。

可选地,临时表的历史分区中的数据按照结束时间的日期范围分区存储历史日的记录。

可选地,临时表的当前分区中的数据按照开始时间的日期范围分区存储相应开始日期生效的记录。

可选地,历史分区中的数据按照结束时间的日期范围分区存储历史日的记录具体为每个历史日日期的封链数据单独作为一个分区存储。

可选地,当前分区中的数据按照开始时间的日期范围分区存储相应开始日期生效的记录具体为每个开始日日期的有效数据单独作为一个分区存储。

本申请提案将拉链表拆分为两个表结构相同的子表(历史表、当前表),并组成拉链表视图,历史表按dw_end_date分区;拉链表当前表按dw_start_date分区。从拉链表视图中查询记录的指定日期(V_DAY)的历史状态,即dw_start_date <= V_DAY 且 dw_end_date>= V_DAY,仅需要扫描拉链表当前表指定日期之前的分区与拉链表历史表指定日期之后的分区。因此,本申请提案中的拉链表的查询效率比现有方案高。

本申请提案中的拉链表分为历史表与当前表两个子表后,在拉链表刷新过程中,仅需关联当前表,避免了现有方案中的整表关联、全表扫描。因此,本申请提案中的拉链表的刷新效率不会随着拉链表中的历史数据的增加而变慢。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

相关技术
  • 数据仓库拉链表存储方法、刷新方法及可读存储介质
  • 一种多线程链表处理方法、装置及计算机可读存储介质
技术分类

06120112965927