当前位置: 首页 > news >正文

数据仓库之缓慢变化维

缓慢变化维(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.lryc.cn/news/365575.html

相关文章:

  • 跑mask2former(自用)
  • Linux日志服务rsyslog深度解析(上)
  • python的df.describe()函数
  • Feign的介绍与说明
  • 【Linux】用户和组的管理、综合实训
  • B=2W,奈奎斯特极限定理详解
  • 【Pytorch 】Dataset 和Dataloader制作数据集
  • [Algorithm][动态规划][两个数组的DP][正则表达式匹配][交错字符串][两个字符串的最小ASCII删除和][最长重复子数组]详细讲解
  • Ffmpeg安装和简单使用
  • 29、matlab算数运算汇总2:加、减、乘、除、幂、四舍五入
  • <Rust><iced>基于rust使用iced库构建GUI实例:动态改变主题色
  • k8s——安全机制
  • Linux驱动应用编程(三)UART串口
  • 【设计模式深度剖析】【4】【行为型】【策略模式】
  • opencv dnn模块 示例(26) 目标检测 object_detection 之 yolov10
  • 【python进阶】python图形化编程之美--tkinter模块初探
  • discuz点微同城源码34.7+全套插件+小程序前端
  • ActiveMQ 介绍、下载、安装和控制台
  • MacOS M系列芯片一键配置多个不同版本的JDK
  • 源码文章上传无忧,论坛小程序支持
  • Docker面试整理-如何优化Docker容器的性能?
  • list(二)和_stack_queue
  • 查询SQL02:寻找用户推荐人
  • 2、Tomcat 线程模型详解
  • 对硬盘的设想:纸存、执行存
  • 最新付会进群多群同时变现社群系统V3.5.3版本 详细教程+源码下载
  • python tk实现标签切换页面
  • 引擎:UI
  • Redis常见异常及优化方案
  • YOLOV5 图像分割:利用yolov5进行图像分割