数据仓库之缓慢变化维

2024-06-07 10:20
文章标签 变化 缓慢 数据仓库

本文主要是介绍数据仓库之缓慢变化维,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

缓慢变化维(Slowly Changing Dimensions, SCD)是数据仓库设计中的一个重要概念,用于处理维度表中随时间缓慢变化的属性。维度表中的数据通常描述业务实体(如客户、产品、员工等),而这些实体的某些属性(如地址、名称、职位等)会随时间变化。根据处理这些变化的策略,缓慢变化维通常分为以下几种类型:

SCD 类型

  1. SCD Type 0(固定维度)

    • 描述:属性值一旦加载到维度表中,就不会发生变化。
    • 用途:用于那些不应该被更新的数据,如历史记录或监管要求的数据。
    • 优点:实现简单,不需要处理数据变化。
    • 缺点:不能反映任何属性变化,使用场景有限。
  2. SCD Type 1(覆盖更新)

    • 描述:每当维度属性发生变化时,直接用新值覆盖旧值。
    • 用途:适用于不需要保留历史记录的情况。
    • 优点:实现简单,查询性能好。
    • 缺点:无法追踪历史变化,旧数据会丢失。
    • 示例
      • 旧记录:客户ID: 123, 地址: "旧地址"
      • 新记录:客户ID: 123, 地址: "新地址"(覆盖旧地址)
  3. SCD Type 2(增加版本)

    • 描述:当维度属性发生变化时,为该维度创建一个新版本记录,同时保留历史记录。
    • 用途:适用于需要追踪历史变化的情况。
    • 优点:能够完整记录历史变化,适合分析数据随时间的变化趋势。
    • 缺点:需要额外的存储空间,查询复杂度增加。
    • 实现
      • 添加新列:开始日期(Start Date)、结束日期(End Date)或增加一个版本号列。
    • 示例
      • 旧记录:客户ID: 123, 地址: "旧地址", 开始日期: 2020-01-01, 结束日期: 2021-01-01
      • 新记录:客户ID: 123, 地址: "新地址", 开始日期: 2021-01-01, 结束日期: NULL(当前版本)
  4. SCD Type 3(增加字段)

    • 描述:为属性的每次变化增加新的字段来存储旧值和当前值。
    • 用途:适用于只需要追踪最近一次变化的情况。
    • 优点:查询简单,能够反映最近一次变化。
    • 缺点:只能保留有限的历史记录,不适合频繁变化的属性。
    • 示例
      • 记录:客户ID: 123, 当前地址: "新地址", 旧地址: "旧地址"
  5. SCD Type 4(外部历史表)

    • 描述:将历史变化存储在一个独立的历史表中,而维度表中只存储当前值。
    • 用途:适用于需要完整历史记录,但不影响查询性能的情况。
    • 优点:当前值查询性能好,历史记录完整。
    • 缺点:需要维护额外的历史表,查询历史数据较复杂。
    • 实现
      • 两个表:主维度表(存储当前值),历史表(存储所有历史变化)。
    • 示例
      • 主维度表:客户ID: 123, 当前地址: "新地址"
      • 历史表:客户ID: 123, 地址: "旧地址", 有效日期: 2020-01-01 至 2021-01-01
  6. SCD Type 6(混合类型)

    • 描述:结合 Type 1、Type 2 和 Type 3 的特点,综合应用。
    • 用途:适用于需要部分覆盖更新、部分历史追踪的情况。
    • 优点:灵活性高,能够根据业务需求灵活选择处理策略。
    • 缺点:实现复杂,维护成本高。
    • 示例
      • 记录:客户ID: 123, 当前地址: "新地址", 旧地址: "旧地址", 版本号: 2, 开始日期: 2021-01-01, 结束日期: NULL

实施 SCD 的步骤

  1. 识别维度变化:确定哪些维度表的哪些属性会发生变化。
  2. 选择 SCD 类型:根据业务需求选择合适的 SCD 类型。
  3. 设计表结构:根据选择的 SCD 类型设计维度表结构,包括必要的字段(如版本号、开始日期、结束日期等)。
  4. 实现 ETL 过程:编写 ETL 脚本处理数据变化,确保数据按照设计的 SCD 类型更新。
  5. 测试和验证:验证数据变化的处理是否符合预期,确保历史记录的准确性和完整性。
  6. 持续监控和维护:定期监控数据变化,维护 ETL 脚本,确保数据仓库的稳定运行。

例子:SCD Type 2 的实现

假设我们有一个客户维度表,需要追踪客户地址的历史变化。

初始客户维度表
客户ID(Customer ID)客户姓名(Customer Name)地址(Address)开始日期(Start Date)结束日期(End Date)
123张三旧地址2020-01-01NULL
地址变更后的客户维度表
客户ID(Customer ID)客户姓名(Customer Name)地址(Address)开始日期(Start Date)结束日期(End Date)
123张三旧地址2020-01-012021-01-01
123张三新地址2021-01-01NULL

通过上述表结构和数据更新方式,可以实现对客户地址历史变化的完整记录。

总结来说,缓慢变化维(SCD)是数据仓库设计中的关键技术,用于处理维度表中属性的变化。根据业务需求选择合适的 SCD 类型,可以有效地管理数据变化,提供高效的数据分析和决策支持。

这篇关于数据仓库之缓慢变化维的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038906

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

c++的静态变化!

静态成员   对于非静态成员,一个类的每个对象都自己存有一个副本,每个对象根据自己拥有的非静态的数据成员来区别于其他对象。而静态成员则解决了同一个类的多个对象之间数据和函数的共享问题。   静态数据成员   静态数据成员的作用是:实现同一类的不同对象之间的数据共享。   #include<IOSTREAM>   using namespace std;   class Po

数据仓库理论知识

1、数据仓库的概念          数据仓库(英文:Date Warehouse,简称数仓、DW),是一个用于数据存储、分析、报告的数据系统。数据仓库的建设目的是面向分析的集成化数据环境,其数据来源于不同的外部系统,其结果开放给不同外部应用使用,为企业提供决策支持; 2、数据仓库的主要特征 数据仓库是面向主题性(Subject-Oriented )、集成性(Integrated)、非易

2409atl,atl3.0到7.0的变化

原文 本文不介绍新的ATL7服务器类和属性.这不是一个完整的列表,只是我目前找到的. 串 串转换宏有一些限制.它从栈中分配内存,可能会在大串时溢出栈.函数退出时,释放该串,而不是在函数内引入的域内释放. 它使用过时OLE2ANSI定义.如果你查看MSDN上对_alloca(来转换)的注意,它说它在SEH或C++EH中使用时有限制. 如,看一下ATL3的串转换宏: USES_CONVER

包拯断案 | 数据库从库GTID在变化 为何没有数据写入@还故障一个真相

提问:作为DBA运维的你是否遇到过这些烦恼 1、数据库从库复制链路如何正确配置表过滤信息? 2、数据库从库的GTID在变化,实际却没有数据写入,究竟是什么原因? 心中有章,遇事不慌 作为DBA的你,遇到问题无从下手,除了在问题面前徘徊,还能如何选择?如果你一次或多次遇到该问题还是 无法解决,又很懊恼,该如何排忧呢?关注公众号,关注《包拯断案》专栏,让小编为你排忧解难~ #包拯秘籍#

2020年SEO行业发展变化和趋势分析!

一、搜索引擎算法发展轨迹 第一阶段:人工目录(1997年-2001年“雅虎早期搜索模式”); 第二阶段:文本分析(2001年-2004年“以关键词和背景颜色一样,堆积大量关键词,就会有非常好的排名; 第三阶段:链接分析(2004年-2009年“以反向链接为核心算法的阶段”),这时行业内有句话是内容为王,外链为皇; 第四阶段:智能分析(2009年-现在“以满足用户人性化需求的用户浏览行为分析