数仓拉链表(Slowly Changing Dimension, SCD)

news/2024/10/19 6:16:41/

目录

一、数仓拉链表的定义

二、拉链表的关键特点

三、拉链表的设计

四、数仓拉链表的构建

1.创建维度表

2.创建拉链表

3.设计ETL流程

4.执行ETL任务


数仓拉链表是数据仓库中常用的一种数据结构,用于记录维度表中某个属性的历史变化情况。在实际应用中,数仓拉链表可以帮助企业更好地进行数据分析和决策。

一、数仓拉链表的定义

数仓拉链表(Slowly Changing Dimension, SCD)是一种用于处理维表中数据变化的技术,特别是在数据仓库中。维表通常用于存储描述性信息,如客户、产品、时间等,这些信息可能会随时间发生变化。拉链表提供了一种机制来跟踪这些变化,以便可以进行历史数据分析和报告。

在实际应用中数仓拉链表有着广泛的应用场景,可以帮助企业更好地管理各种类型的信息。通常情况下,每个维度记录都会对应一个或多个拉链记录,每个拉链记录包含了该维度在某个时间段内的所有属性值。

例如,在一个销售数据仓库中,可以使用数仓拉链表来记录产品信息的历史变化情况。假设某个产品在2023年1月1日上市,并且在2024年1月1日进行了一次改版,则可以使用数仓拉链表来记录该产品在不同时间段内的版本信息。

二、拉链表的关键特点

1.历史保留

拉链表保留数据的历史记录,包括数据的当前状态和所有历史变更。

2.版本控制

每个记录可能包含一个开始日期(当记录首次创建或变更时)和一个结束日期(当记录再次变更或被标记为非活动状态时)。

3.类型标记

Type 1(Overwrite):直接覆盖旧记录。

Type 2(Track Historical Changes):为每个变更创建新记录,保留历史。

Type 3(Add New and Mark Old):为新记录添加新行,同时标记旧行为非活动状态。

4.数据完整性

通过保留历史数据,确保数据的完整性和一致性,支持时间维度的分析。

5.查询支持

可以查询特定时间点的数据状态,或者查看数据随时间的变更历史。

6.业务规则

拉链表的设计和实现需要考虑业务规则,以确定如何处理数据变更。

三、拉链表的设计

为了保证数仓拉链表能够正确地反映维度属性的历史变化情况,需要遵循以下几个设计原则:

1. 每条记录都有一个起始时间:每条拉链记录都需要包含该维度属性值生效的开始时间和结束时间。开始时间表示该属性值生效的起始日期,结束时间表示该属性值生效的截止日期。通常情况下,结束时间为NULL表示该属性值目前仍然有效。

2. 每条记录都有一个唯一标识符:每条拉链记录都需要包含一个唯一标识符,用于区分不同的记录。通常情况下,唯一标识符可以是维度表中的主键或者是自动生成的序列号。

3. 每个维度只有一个当前有效的记录:为了保证数仓拉链表能够正确地反映维度属性的当前有效值,需要保证每个维度只有一个当前有效的记录。通常情况下,可以通过结束时间为NULL来判断某个维度是否为当前有效。

4. 每次变化都需要插入新记录:当某个维度属性发生变化时,需要插入一条新的拉链记录来记录该属性值的变化情况。同时,需要更新之前的拉链记录的结束时间为新纪录开始时间减1天。

四、数仓拉链表的构建

使用数据治理工具可以帮助企业构建数仓拉链表。FineDataLink是一款专业的数据治理工具,可以帮助企业快速构建数据仓库和数据集成方案。在FineDataLink中,可以通过以下步骤来构建数仓拉链表:

1.创建维度表

首先需要创建维度表,并在维度表中添加需要记录历史变化的属性字段。通常情况下,每个属性字段都需要包含开始时间和结束时间两个字段。

2.创建拉链表

在FineDataLink中,可以使用“拉链表”组件来创建数仓拉链表。在创建拉链表时,需要指定源数据和目标数据的连接信息,并设置好拉链表的主键、开始时间和结束时间等信息。

3.设计ETL流程

在FineDataLink中,可以使用“任务流”组件来设计ETL流程。在设计ETL流程时,需要将源数据连接到拉链表组件,并根据具体需求进行数据转换和清洗操作。

4.执行ETL任务

完成ETL流程设计后,可以通过FineDataLink提供的调度功能来执行ETL任务。在执行任务时,FineDataLink会自动将源数据转换为数仓拉链表格式,并将结果写入目标数据库中。

通过这些步骤,FineDataLink可以快速构建高效可靠的数仓拉链表,为企业数据分析和决策提供有力支持。

免费试用、获取更多信息,点击了解更多>>>体验FDL功能

了解更多数据仓库与数据集成关干货内容请关注>>>FineDataLink官网

往期推荐:

花10个小时,写出了小白也能看懂的数据分层方法-CSDN博客

什么是数据对接的关键?数据对接有哪些工具?-CSDN博客

全面解析ETL:数据仓库架构中的关键处理过程-CSDN博客


http://www.ppmy.cn/news/1514213.html

相关文章

CANoe.DiVa的应用——Diva进行诊断自动化测试执行过程详解(三)

🙋‍♂️【Vector CANdelastudio配置CDD】文章合集💁‍♂️点击跳转 ——————————————————————————————————–—— 从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 目录 1.工程导入2.查看用…

开关电源测试系统方案:系统结构功能、特点、测试项目

为了应对开关电源测试中的复杂挑战,我们推出了NSAT-8000系列开关电源ate测试系统,它以其全面的功能和灵活性,适应了电源产品测试场景,解决了测试难题。 开关电源测试系统 NSAT-8000系列之开关电源测试系统适用于AC/DC和DC/DC开关电…

[数据集][目标检测]集装箱缺陷检测数据集VOC+YOLO格式4127张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4127 标注数量(xml文件个数):4127 标注数量(txt文件个数):4127 标注…

Java实现三方登录---微信登录

三方登录介绍 Java 中的三方登录,通常指的是使用第三方服务(如 Google、Facebook、Twitter 等)进行用户身份验证的一种机制。这种机制允许用户使用他们已有的第三方账户登录到你的应用程序或服务,而无需创建新的账户。以下是三方…

Jenkins 2.346.1完整搭建及项目部署安装

java version "1.8.0_202" 1.安装 官网下载war包直接启动,比较简单, linux命令 : wget https://mirrors.jenkins.io/war-stable/2.346.1/jenkins.war 2.启动命令 nohup java -jar jenkins.war --httpPort8777 --prefix/jenkin…

python非交互连接mysql+mycat读写分离实现

python非交互连接mysql >>>import pymysql >>>connpymysql.connect(host"192.168.118.57",port3306,database"test",user"root",password"root") >>> cursorconn.cursor() >>> cursor.execut…

前端数据存在什么地方,刷新页面之后依旧存在

在前端开发中,如果你希望在刷新页面之后数据仍然存在,可以使用以下几种方法来存储数据: 1. **Cookies**: - 优点:兼容性好,所有浏览器都支持。 - 缺点:存储空间有限(大约4KB)…

设计模式反模式:UML图示与案例分析

设计模式反模式:UML图示与案例分析 在软件开发中,设计模式是解决问题的有效工具,它们通过提供经过验证的、可复用的解决方案来优化软件设计。然而,当设计模式被误用、滥用或在不适当的情况下应用时,就会形成设计模式反…