数据仓库缓慢变化维介绍

缓慢变化维(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.mzph.cn/web/23621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试成功的不二法门:详解Vue3答题章法

前言 面试题在网络上有如海洋之深,对于同一知识点,每个人的理解也各有千秋。我们在面试中常常会遇到一个瞬息间脑海里一片空白的情况,其实这并不是因为我们不懂,而是因为我们在回答的时候缺乏一个清晰的思路。那么问题来了&#x…

《魔法与科技的融合:SpringBoot运维的现代传说》

揭开了SpringBoot应用部署的神秘面纱。从云平台的选型到Docker的容器化魔法,再到Kubernetes的集群力量,每一步都充满了奇幻色彩。文章以轻松幽默的笔触,带领读者穿梭于现代应用部署的各个角落,探索自动化部署的奥秘,学…

关于图像过曝问题的排查思路

1、问题背景 读者提问,图像在室外遇到过曝的问题,有什么排查思路和改善方法。 2、问题分析 1)先检查一下sensor驱动,对照 sensor datasheet 确认下最小曝光行设置的是否正确, 因为室外高亮场景一般曝光行走的都比较…

【深度学习】PuLID: Pure and Lightning ID Customization via Contrastive Alignment

论文:https://arxiv.org/abs/2404.16022 代码:https://github.com/ToTheBeginning/PuLID 文章目录 AbstractIntroductionRelated WorkMethods Abstract 我们提出了一种新颖的、无需调整的文本生成图像ID定制方法——Pure and Lightning ID customizatio…

微信好友朋友圈的三天、半年可见怎么破?方法拿走不谢

『Code掘金』问大家,有没有这种经历,当你想去翻某人的朋友圈时,对方设置成了3天可见,之前的内容没法看到了。 不过没关系!今天『Code掘金』给大家分享一款导出朋友圈的工具,让大家留住痕迹。 WechatMomen…

PostgreSQL中有没有类似Oracle的dba_objects系统视图

PostgreSQL中有没有类似Oracle的dba_objects系统视图 在PostgreSQL中,没有一个完全集成了所有对象信息的视图(类似于Oracle中的DBA_OBJECTS)。但是,PostgreSQL提供了一些系统目录表和视图,可以用来获取数据库对象的信…

初探沁恒CH32V307VCT6评估板 1-1外部中断EXTI

旋转编码器计次 1,创建 .C .H 文件 Count_Sonser.c Count_Sonser.h 2,包含头文件 #include "ch32v30x.h" //#include "debug.h" #include "Count_Sonser.h" 注意:如果不包含第一第二个头文件uint、int这…

如何掌握 Java 正则表达式 的基本语法及在 Java 中的应用

正则表达式是一种用于匹配字符串的模式,在许多编程语言中广泛使用。Java 正则表达式提供了强大的文本处理能力,能够对字符串进行查找、替换、分割等操作。 一、正则表达式的基本语法 正则表达式由普通字符和特殊字符组成。普通字符包括字母、数字和标点…

通过 echo 命令向 /sys/class/gpio/export 写入一个GPIO编号,但遇到 “Device or resource busy

通过 echo 命令向 /sys/class/gpio/export 写入一个GPIO编号,但遇到 "Device or resource busy" 错误时,这通常意味着该GPIO引脚已经被其他驱动或用户空间程序导出并使用了。 要解决这个问题,可以尝试以下步骤: 检查GP…

SpEL表达式使用方法

1 SpEL简介 SpEL(Spring Expression Language)是一种用于在Spring框架中进行数据绑定和执行业务逻辑的表达式语言。Spring EL提供了一种简洁、灵活和强大的方式来访问对象的属性、调用方法、执行运算和逻辑判断等操作。 官方文档:https://d…

C# 多线程:并发编程的利器

在现今日益复杂的软件开发环境中,多线程编程已经成为提升应用程序性能和响应速度的关键技术。C# 作为一种现代、功能强大的编程语言,提供了丰富的多线程支持,使开发者能够充分利用多核处理器和并行计算的优势。本文将深入探讨C#中的多线程编程…

网络协议三

数据中心 一、DNS 现在网站的数目非常多,常用的网站就有二三十个,如果全部用 IP 地址进行访问,恐怕很难记住 根 DNS 服务器 :返回顶级域 DNS 服务器的 IP 地址 顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址 …

汇凯金业:贵金属交易规则有哪些

贵金属投资目前非常火热,许多投资者从中获得了可观的收益。新手投资者在进入贵金属市场及其交易之前,务必要了解清楚贵金属的交易规则。了解规则和差异能帮助新手更好地进行贵金属投资交易。下面我们以现货类贵金属为例,详细说明贵金属的交易…

一周学会Django5 Python Web开发 - Django5内置Auth认证系统-用户修改密码实现

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计59条视频,包括:2024版 Django5 Python we…

关于在 Ubuntu 下安装配置和调优 FTP 服务器

今天我在阿贝云的免费服务器上部署测试FTP服务器,这个阿贝云真是个不错的免费云服务器啊,配置虽然不高,但完全足够搭建一个FTP服务器使用了。1核CPU、1G内存、10G硬盘、5M带宽,对我这个喜欢折腾的家伙来说可太好用了。 首先,让我简单介绍下今天要用到的FTP服务器软…

Mybatis杂记

group by查询返回map类型 1,2 List<Map<String, Object>> getCount();xml: <select id"getCount" resultType"java.util.HashMap">SELECT company_id, ifnull(sum(count_a count_b),0) ctFROM test.com_countWHERE is_del 0 GROUP BY…

天气数据集2-应用RNN做天气预测

二、用循环神经网络做天气(温度)预测 本项目是基于Pytorch的 RNN&GRU模型&#xff0c;用于预测未来温度 数据集: https://mp.weixin.qq.com/s/08BmF4RnnwQ-jX5s_ukDUA 项目代码: https://github.com/disanda/b_code/tree/master/Weather_Prediction RNN 模型本质是用于预…

MySQL(四)查询

1、MySQL限性约束 —非空、唯一(自增)、主外键、检查(MySQL存在但是不能用)。 约束主要完成对数据的校验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被删除。 1)常用五类约束 not null :非空约束,指定某列不为空。 unique:唯一约束,指定某列和几列组…

基于springboot的-仓库 管理系统【附:资料➕文档】

前言&#xff1a;我是源码分享交流Coding&#xff0c;专注JavaVue领域&#xff0c;专业提供程序设计开发、源码分享、 技术指导讲解、各类项目免费分享&#xff0c;定制和毕业设计服务&#xff01; 免费获取方式--->>文章末尾处&#xff01; 项目介绍&#xff1a; 管理员…

【VUE】el-table表格 实现滚动到底部加载更多数据

废话不多说&#xff0c;直接上代码 <template></template>部分代码 <!-- 表格 --> <el-tableid"mytable"v-loading"listLoading"highlight-current-rowrow-key"project_id":data"tableData"border:reload"…