数仓缓慢变化维SCD深度讲解
维度缓慢变化维SCD(Slowly Changing Dimensions)一些维度表的数据不是静态的,而是会随着时间而缓慢地变化(这里的缓慢是相对事实表而言,事实表数据变化的速度比维度表快,如果还不知道什么是事实表和维度表请看→数仓模型设计详细讲解)把处理维度表数据历史变化的问题,称为缓慢变化维问题,简称SCD问题。 |
举例说明
例如:用根据用户维度,统计不同出生年份的消费金额占比。(80后、90后、00后)。而期间,用户可能去修改用户数据,例如:将出生日期改成了 1992年。此时,用户维度表就发生了变化。当然这个变化相对事实表的变换要慢。但这个用户维度表的变化,就是缓慢变化维。
这个用户的数据不是一直不变,而是有可能发生变化。例如:用户修改了出生日期、或者用户修改了住址。
一、SCD问题的几种解决方案
以下为解决缓慢变化维问题的几种办法:
- 保留原始值
- 改写属性值
- 增加维度新行
- 增加维度新列
- 添加历史表
1.1 保留原始值
某一个属性值绝不会变化。事实表始终按照该原始值进行分组。例如:出生日期的数据,始终按照用户第一次填写的数据为准
1.2 改变属性值
对其相应需要重写维度行中的旧值,以当前值替换。因此其始终反映最近的情况。
当一个维度值的数据源发生变化,并且不需要在维度表中保留变化历史时,通常用新数据来覆盖旧数据。这样的处理使属性所反映的中是最新的赋值。
用户维度表 修改前:
修改后:
这种方法有个前提,用户不关心这个数据的变化
这样处理,易于实现,但是没有保留历史数据,无法分析历史变化信息
1.3 增加维度新行
数据仓库系统的目标之一是正确地表示历史。典型代表就是拉链表
保留历史的数据,并插入新的数据。
用户维度表 修改前:图片修改后:
1.4 增加维度新列
用不同的字段来保存不同的值,就是在表中增加一个字段,这个字段用来保存变化后的当前值,而原来的值则被称为变化前的值。总的来说,这种方法通过添加字段来保存变化后的痕迹。
用户维度表 修改前:
修改后
1.5 使用历史表
另外建一个表来保存历史记录,这种方式就是将历史数据与当前数据完全分开来,在维度中只保存当前最新的数据。用户维度表
用户维度历史表
这种方式的优点是可以同时分析当前及前一次变化的属性值,缺点是只保留了最后一次变化信息。
思考
我在这里给大家提个场景题,比如我们在淘宝上购买一件商品,从下单-支付-发货-配送-确认收货这个几步流。需求:统计出在发送到配置过程中转了几次?
小结
今天给大家分享了SCD解决方案,但是其实以上的解决方案不是很好,其实数仓有一个非常好的解决缓慢变化维拉链表既保留了历史数据又不会造成数据冗余,拉链表我们下期讲。信自己,努力和汗水总会能得到回报的。我是大数据老哥,我们下期见。
本文地址:https://www.linuxprobe.com/data-changes-slowly.html
数仓缓慢变化维SCD深度讲解相关推荐
- 数据仓库(9)数仓缓慢变化维度数据的处理
数据仓库的重要特点之一是反映历史变化,所以如何处理维度的变化是维度设计的重要工作之一.缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流逝发生缓慢的变化,与数据增长较为快 ...
- 吴乙己的数仓指南_5.1维度建模技巧之SCD2类型缓慢变化维搭建
目录 0.引言 1.SCD类型 2.举个栗子 3.SCD2 3.1 什么是SCD2 3.2 如何使用SCD2 3.3 如何实现SCD2 3.3.1 获取维度基准 3.3.2 按情况分治打标 3.3.3 ...
- blog-数据仓库维度建模系列--缓慢变化维(SCD)的思考(一)
缓慢变化维(Slowly Changing Dimensions) 缓慢变化维是维度技术中用于描述维度变化情况的一种分类. 什么是SDC? 在现实的实施中 先说一下缓慢变化维的概念.缓慢变化维(Slo ...
- 【数据仓库】缓慢变化维介绍及其解决SCD问题
目录 介绍 举例说明 SCD问题的几种解决方案 保留原始值(不推荐) 改写属性值(不推荐) 增加维度新行(推荐) 增加维度新列(不推荐) 添加历史表(不推荐) 使用拉链表保存历史快照思路 拉链表 12 ...
- 缓慢变化维解决方案——拉链表实现详解
缓慢变化维--拉链表实现 1.概述 1 缓慢变化维简介 缓慢变化维,简称SCD(Slowly Changing Dimensions) 一些维度表的数据不是静态的,而是会随着时间而缓慢地变化(这里的缓 ...
- 解决缓慢变化维—拉链表
什么是缓慢变化维(SCD). 1.缓慢变化维简介 缓慢变化维,简称SCD(Slowly Changing Dimensions) 一些维度表的数据不是静态的,而是会随着时间而缓慢地变化(这里的缓慢是相 ...
- 数据仓库缓慢变化维度SCD?你想知道的都在这里
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据真好 ...
- 6 关于数据仓库维度数据处理的方法探究系列——缓慢变化维处理——记录最新记录及上一次历史...
此种方式是缓慢变化维中较为折中的做法,但需要表结构随之适应.它的原理是把目标表字段扩充一倍,其中一组用来记录最新的记录信息,另一组用来记录上一次的历史记录.新记录插入时,将其插入到最新记录的位置,一旦 ...
- Kettle使用_22 维度更新 缓慢变化维 拉链表
Kettle使用_22 维度更新 Type2 拉链表 需求:通过Kettle实现对员工维度数据的更新和插入. 解决方法:通过维度查询更新组件实现. 注:补充部分有SQL版Type2实现代码. Prev ...
最新文章
- 非计算机专业想学习Python,有哪些问题需要注意?
- seafile安装教程mysql密码_Seafile安装踩坑
- Array Elimination 运算,gcd,思维
- 学习《css世界》笔记之使用overflow做文字溢出点点点效果
- 阿里云AHAS Chaos:应用及业务高可用提升工具平台之故障演练
- 835 由于安全层无法对远程计算机进行身份验证_vscode 插件Remote-ssh远程wsl调试python
- datagridview列 值提取_Excel学校如何提取教职工员工名单-Leo老师
- 测试点击屏幕次数的软件_软件测试工程师面试如何回答登录功能怎么进行测试?...
- apache java cache-control,Tomcat: Cache-Control
- 如何利用Pspice仿真C-V特性
- 自己怎么做网站,个人做网站的步骤
- 使用美图秀秀批量处理照片
- 【reverse】buu-[WUSTCTF2020]level4——二叉树+IDA动态调试
- [转]Maven查看当前生效配置、pom、环境变量等命令(mvn help用法)
- 绵阳python培训_绵的繁体字怎么写_绵字有几笔、五行属性-幸运吧起名网
- 2D和3D的对比,不用犹豫,三维设计是行业未来必然趋势!
- gerrit的第一次提交记录
- 2023湖北大学考研分析
- 订单23系统服务器,《死亡搁浅》攻略——第3节:芙拉吉尔 订单23.寻物:系统服务器...
- nc-服务器间文件传输