当前位置: 首页 > 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 类型,可以有效地管理数据变化,提供高效的数据分析和决策支持。

相关文章:

数据仓库之缓慢变化维

缓慢变化维(Slowly Changing Dimensions, SCD)是数据仓库设计中的一个重要概念,用于处理维度表中随时间缓慢变化的属性。维度表中的数据通常描述业务实体(如客户、产品、员工等),而这些实体的某些属性&…...

跑mask2former(自用)

1. 运行docker 基本命令: sudo docker ps -a (列出所有容器状态) sudo docker run -dit -v /hdd/lyh/mask2former:/mask --gpus "device0,1" --shm-size 16G --name mask 11.1:v6 (创建docker容器&…...

Linux日志服务rsyslog深度解析(上)

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、日志在Linux系统中的作用 2、rsyslog历史背景 …...

python的df.describe()函数

一、初识describe()函数 在数据分析和处理的过程中,我们经常需要了解数据的基本统计信息,如均值、标准差、最小值、最大值等。pandas库中的describe()函数为我们提供了这样的功能,它可以快速生成数据集的描述性统计信息。 二、describe()函数的基本用法 describe()函数是pan…...

Feign的介绍与说明

Feign是Spring Cloud提供的一个声明式、模板化的HTTP客户端,旨在使编写Java HTTP客户端变得更容易。它的设计目标是让Web服务调用变得更加简单,无论是在本地还是在远程。使用Feign,开发者可以像调用本地服务一样调用远程服务,提供…...

【Linux】用户和组的管理、综合实训

目录 实训1:用户的管理 实训2:组的管理 实训3:综合实训 实训1:用户的管理 (1)创建一个新用户userl,设置其主目录为/home/user 1。 (2)查看/etc/passwd 文件的最后一行,看看是如何记录的。 (3)查看文件/etc/shadow文件的最后一…...

B=2W,奈奎斯特极限定理详解

一直没搞明白奈奎斯特极限定理的含义,网上搜了很久也没得到答案。最近深思几天后,终于有了点心得。顺便吐槽一下,csdn的提问栏目,有很多人用chatgpt秒回这个事,实在是解决不了问题,有时候人的问题大多数都是…...

【Pytorch 】Dataset 和Dataloader制作数据集

文章目录 Dataset 和 Dataloader定义Dataset定义Dataloader综合案例1 导入两个列表到Dataset综合案例2 导入 excel 到Dataset综合案例3 导入图片到Dataset导入官方数据集Dataset 和 Dataloader Dataset指定了数据集包含了什么,可以是自定义数据集,也可以是以及官方数据集Data…...

[Algorithm][动态规划][两个数组的DP][正则表达式匹配][交错字符串][两个字符串的最小ASCII删除和][最长重复子数组]详细讲解

目录 1.正则表达式匹配1.题目链接2.算法原理详解3.代码实现 2.交错字符串1.题目链接2.算法原理详解3.代码实现 3.两个字符串的最小ASCII删除和1.题目链接2.算法原理详解3.代码实现 4.最长重复子数组1.题目链接2.算法原理详解3.代码实现 1.正则表达式匹配 1.题目链接 正则表达…...

Ffmpeg安装和简单使用

Ffmpeg安装 下载并解压 进入官网 (https://ffmpeg.org/download.html),选择 Window 然后再打开的页面中下滑找到 release builds,点击 zip 文件下载 环境变量配置 下载好之后解压,找到 bin 文件夹,里面有3个 .exe 文件 然后复制…...

29、matlab算数运算汇总2:加、减、乘、除、幂、四舍五入

1、乘法:times, .* 语法 C A.*B 通过将对应的元素相乘来将数组 A 和 B 相乘。 C times(A,B) 是执行 A.*B 的替代方法, 1)将两个向量相乘 代码及运算 A [1 0 3]; B [2 3 7]; C A.*BC 2 0 212) 将两个数组相乘 代码及运算 A [1 0 3;…...

<Rust><iced>基于rust使用iced库构建GUI实例:动态改变主题色

前言 本专栏是Rust实例应用。 环境配置 平台:windows 软件:vscode 语言:rust 库:iced、iced_aw 概述 本篇构建了这样的一个实例,可以动态修改UI的主题,通过菜单栏来选择预设的自定义主题和官方主题&#…...

k8s——安全机制

一、安全机制说明 Kubernetes作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server是集群内部各个组件通信的中介, 也是外部控制的入口。所以Kubernetes的安全机制基本就是围绕保护API Server来设计的。 比如 kubectl 如果想…...

Linux驱动应用编程(三)UART串口

本文目录 前述一、手册查看二、命令行调试串口1. 查看设备节点2. 使用stty命令设置串口3. 查看串口配置信息4. 调试串口 三、代码编写1. 常用API2. 例程线程优化 前述 在开始实验前,请一定要检查测试好所需硬件是否使用正常,不然调试过程中出现的问题&am…...

【设计模式深度剖析】【4】【行为型】【策略模式】

文章目录 策略模式定义英文原话直译 角色类图策略接口Strategy:具体策略类上下文类Context测试类 策略模式的应用策略模式的优点策略模式的缺点策略模式的使用场景 策略模式 策略模式(Strategy Pattern) Strategy策略也称作Policy政策。 想…...

opencv dnn模块 示例(26) 目标检测 object_detection 之 yolov10

文章目录 1、yolov10简要介绍1.1、双标签分配策略1.2、架构改进1.3、性能1.4、预训练模型1.5、网络有关层说明 2、测试2.1、官方测试2.2、opencv dnn2.2.1、仅运行到内部"NMS"步骤之前的层2.2.2、完整代码2.2.2、完整实现所有层 2.3、onnxruntime测试2.4、tensorrt 1…...

【python进阶】python图形化编程之美--tkinter模块初探

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

discuz点微同城源码34.7+全套插件+小程序前端

discuz点微同城源码34.7全套插件小程序前后端 模板挺好看的 带全套插件 自己耐心点配置一下插件 可以H5可以小程序...

ActiveMQ 介绍、下载、安装和控制台

ActiveMQ 介绍 Apache ActiveMQ 是一款非常成熟且功能全面的开源消息中间件,由Apache软件基金会维护。它遵循 Java Message Service (JMS) 规范,这意味着它提供了一组标准的 API,允许 Java 应用程序以一种标准化的方式发送和接收消息。 以下…...

MacOS M系列芯片一键配置多个不同版本的JDK

第一步:下载JDK。 官网下载地址:Java Archive | Oracle 选择自己想要下载的版本,一般来说下载一个jdk8和一个jdk11就够用了。 M系列芯片选择这两个,第一个是压缩包,第二个是dmg可以安装的。 第二步:编辑…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"&#xff0…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

Kafka入门-生产者

生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...