最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
开启左侧

漫谈数据仓库之SCD(缓慢变化维度)

[复制链接]
发表于 2017-5-12 20:37:23 | 显示全部楼层 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
作者:dantezhao  原文出处

0x00 前言
本文会分享数据仓库中和缓慢变化维度相关的内容。在看之前建议回顾一下和维度建模相关的知识点,可参考这篇博客:《漫谈数据仓库之维度建模》
为什么会分享这个听起来很奇怪的东西?因为站在的笔者的视角中,只要是做数据仓库的小伙伴们,在工作中基本上都会接触和维度建模相关的内容,而谈到维度建模,就少不了会和维度表打交道。我们要谈的就是维度表相关的知识点。
在正式开始之前,先解释一下什么是缓慢变化维度。笔者个人理解,缓慢变化维度其实就是指在维度表中那些会随着时间变化的字段,比如用户基本资料。
:缓慢是一个相对的概念。与缓慢变化的纬度相比,数据增长快速是事实表
0x01 什么是SCD?
SCD(Slowly Changing Dimensions),中文一般翻译成“缓慢变化维”。
缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。这种随时间发生变化的维度我们一般称之为缓慢变化维,并且把处理维度表的历史变化信息的问题称为处理缓慢变化维的问题,有时也简称为处理SCD的问题。
0x02 如何处理SCD问题
在《数据仓库工具箱》这本书中一共列举了5中基础缓慢变化维类型和3种混合缓慢变化维类型。
鉴于知识储备有限,在此只分析一下笔者熟悉的4种类型。
TYPE 0:保留原始值
此类型唯独属性值绝不会变化,因此事实始终按照该原始值分组。
比如客户的原始信用度分值,就可以用该类型。
TYPE 1:重写
对于类型一来说,对其相应需要重写维度行中的旧值,以当前值替换。因此其始终反映最近的情况。
注意:这样处理,易于实现,但是没有保留历史数据,无法分析历史变化信息。
TYPE 2:增加新行
数据仓库系统的目标之一是正确地表示历史。当提及缓慢变化维度属性时,类型2就是主要应用于支持这一需求的技术。
类型二的一个典型代表其实就是拉链表,在此,着重强调一下拉链表,它的确是一种非常有效的工具。随着使用的深入,你就越能发现它的魅力。
在这补充几个点:
  • 使用拉链表的时候可以不加t_end_date,即失效日期,但是加上之后,能优化很多查询。
  • 可以加上当前行状态标识,能快速定位到当前状态。
  • 在拉链表的设计中可以加一些内容,因为我们每天保存一个状态,如果我们在这个状态里面加一个字段,比如如当天修改次数,那么拉链表的作用就会更大。

TYPE 3:增加新属性
尽管类型2能够区分历史情况,但它无法保证能够将新属性值和过去的历史事实关联,反之亦然。
这时候就可以用到类型3。
注意:这种类型使用哪种场景呢?它比较适合需要根据先后顺序来得出某种结论的场景。
举个例子,这个例子很恰当的哦。
还是以电商为背景,我们有一个商品表,里面有一个字段是商品价格。如果我们现在想知道这个商品的上一个价格是多少。
这个问题有两种方式:
  • 我们在一张历史状态表中找到上一个商品的价格状态,但是这样会比较麻烦,可能会扫描很多的数据。
  • 就是我们现在讲的这种方式,加一个字段,就方便很多了。

商品名
商品价格
先前商品价格
宇宙飞船一号
100
150
宇宙飞船二号
120
250

这种方式的优点是可以同时分析当前及前一次变化的属性值,缺点是只保留了最后一次变化信息。


楼主热帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-3-28 17:14

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表