维度建模的数据仓库中,有一个概念叫Slowly Changing Dimensions,中文一般翻译成“缓慢变化维”,经常被简写为SCD。缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。这种随时间发生变化的维度我们一般称之为缓慢变化维,并且把处理维度表的历史变化信息的问题称为处理缓慢变化维的问题,有时也简称为处理SCD的问题。

个人感觉wiki上对缓慢变化维的定义比较详细,所以翻译此文并加入个人的观点看法。原文请参照 :https://en.wikipedia.org/wiki/Slowly_changing_dimension

Type 0:

类型0是被动的 ,如果维度值变化了它也不会有任何的操作。维度值只会保留第一次插入的值。现在很少会用到了。

Type 1:

这种方法将覆盖旧与新的数据,并因此不会跟踪历史数据。

例如表supplier

Supplier_Key

Supplier_Code

Supplier_Name

Supplier_State

123

ABC

Acme Supply Co

CA

在上面的示例中,Supplier_Code 是默认的主键,Supplier_Key 是代理键。从技术上讲,代理键不是必要的因为存在独特的主键 (Supplier_Code) 。但是,为了优化联接的性能使用整数而不是字符键 (除非中字符的密钥的字节数小于整数键中的字节数)。

假设Supplier_State从CA调整到了IL,这条记录将会被覆盖:

Supplier_Key

Supplier_Code

Supplier_Name

Supplier_State

123

ABC

Acme Supply Co

IL

类型 1 方法的缺点是在数据仓库中就没有历史记录。然而它也有优势,它很容易维护。

如果你的事实表中存在着对State的聚合计算,那就需要在status变化时重新计算。

Type 2:

假设Supplier_State从CA调整到了IL,将会新建一条递增的version。

Supplier_Key

Supplier_Code

Supplier_Name

Supplier_State

Version.

123

ABC

Acme Supply Co

CA

0

124

ABC

Acme Supply Co

IL

1

 
另外一种实现方式是增加一个生效日期段。

Supplier_Key

Supplier_Code

Supplier_Name

Supplier_State

Start_Date

End_Date

123

ABC

Acme Supply Co

CA

2001-12-1

2015-4-2

124

ABC

Acme Supply Co

IL

2015-4-3

NULL

第二行中的结束日期为NULL,用来表示当前的版本。但是更为推荐的是使用一个不可及的日期作为结束日期,比如9999-12-31。 这样可以为该字段添加索引而提高查询性能,更不用在查询的过程中替换NULL值。

使用特定的代理键(Supplier_Key )的事务可以永久的绑定在维度表中的特殊时间段内。如果你的事实表中存在着对State的聚合计算,不需要重新更新。

Type 3

此方法跟踪使用单独的列的更改来保留有限的历史记录。类型 3 保留有限的历史,因为它仅限于指定用于存储历史数据的列数。在 1 型和 2 型的原始的表结构是相同的,但类型 3 添加了额外的列。在以下示例中,一个附加的列添加到表来记录Supplier_State的原始状态 。

Supplier_Key

Supplier_Code

Supplier_Name

Previous_Supplier_State

Effective_Date

Current_Supplier_State

123

ABC

Acme Supply Co

CA

2015-4-3

IL

这个用来记录当前的和最近一次的历史记录,不能记录更早值。

Type 4

Type4是使用历史表来储存历史记录。一个表用来存储现有的数据而添加一个历史表来记录变化数据。它们使用相同的代理键。

比如上面的例子,原来的表名为Supplier,历史表为Supplier_History.

Supplier表

Supplier_Key

Supplier_Code

Supplier_Name

Supplier_State

123

ABC

Acme Supply Co

IL

Supplier_History表

Supplier_Key

Supplier_Code

Supplier_Name

Supplier_State

Create Date

123

ABC

Acme Supply Co

CA

2015-4-3

此方法类似于数据库审计表和捕获更改数据技术功能。

缓慢变化维 (Slowly changing dimension)的更多相关文章

  1. 缓慢变化维 (Slowly Changing Dimension) 常见的三种类型及原型设计(转)

    开篇介绍 在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库 ...

  2. 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计

    在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据 ...

  3. 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式

    开篇介绍 关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型 ...

  4. DataStage系列教程 (Slowly Changing Dimension)缓慢变化维

    BI中维表的增量更新一般有2种: Type 1:覆盖更改.记录的列值发生变化,直接update成最新记录. Type 2:历史跟踪更改.记录值发生变化,将该记录置为失效,再insert一条新的记录. ...

  5. ODI 11g & 12c中缓慢变化维(SCD)的处理机制

    缓慢变化维(Slowly changing Dimensions)指的是维表中的维度字段值会随着时间或业务调整,而在后续的分析中,历史数据仍然要使用旧的维度值,新的数据会使用当前维度值.在数据仓库建设 ...

  6. 如何用SQL语句处理缓慢变化维(渐变维,拉链表)SCD-2?

    假设有一张居民维表,需要记录居民状态的变更历史,根据Kimball建模理论,设计居民维表如下: 另外在ODS中有居民信息的每日快照表(每天都记录一份居民的全量信息):O_USERINFO 如何将ODS ...

  7. HIVE- SCD缓慢变化

    SCD缓慢变化维,比如一个用户维表,用户属性会变化,但是不会变化很剧烈,可能一年只会变化一两次,也不会所有用户的属性都会有变化,只有少量的数据发生变化,所以叫缓慢变化维.这种问题就是由于维度的变化所造 ...

  8. Data Flow ->> Slow Changing Dimension

    这里简单讲下SCD 在讲之前贴上两个有用的链接地址.作者的两篇文件讲解了SCD是什么以及应用 http://www.cnblogs.com/biwork/p/3363749.html http://w ...

  9. DIV宽度自动缓慢变化

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

随机推荐

  1. 7.5---两个正方形分成对半的直线(CC150)

    最主要的思路:1,这条直线就是要把两个正方形的中点链接. 2,注意的特殊情况:中心点重合. 答案: public class Solution { public static void main(St ...

  2. 【转】【编码】ASCII 、UNICODE和UTF-8之二

    字符发展 1. 美国 ASCII-(American standard code information interchange) 美国信息互换标准代码 范围:1-127 ; 单字 备注:前部用作控制 ...

  3. C#的contextMenuStrip右键没反应的可能原因

    contextMenuStrip设置右键菜单,但是新手常常忽略一个问题,我要遇到了,即没有设置contextMenuStrip所在控件的contextMenuStrip属性,需要把contextMen ...

  4. yum安装所需要的开发库

    yum groupinstall "Development tools" -y yum install zlib-devel bzip2-devel openssl-devel n ...

  5. centos6.5 tomcat开机启动

    可参考:centos6.5 nginx开机启动 /etc/init.d/下添加tomcatd文件,内容如下: #!/bin/sh # # chkconfig: - # # Licensed to th ...

  6. android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令

    android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令. 'gradle' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 设 ...

  7. Django~Models1

    不用数据库不用Models 省却 --------------- startapp urls +链接 view以下 ---------------- 添加Model 在project/settings ...

  8. 【python】入门学习(四)

    函数: 定义函数 #area.py from math import pi def area(radius): """Return the area of a circl ...

  9. 怎么查询电脑ip地址

    方法一:本地连接查看法 方法二:命令行法 摘自:http://jingyan.baidu.com/article/870c6fc3d509a1b03fe4be06.html

  10. win7自动登录桌面

    control userpasswords2 在开始菜单中搜索“运行”,回车打开,或者Win+R打开运行窗口. 键入“control userpasswords2”或者“rundll32 netplw ...