维度建模的数据仓库中,有一个概念叫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. java78_c

    import java.util.*; public class Main { public static void main(String args[]){ Scanner cin=new Scan ...

  2. 'ModelOptions' object has no attribute 'get_field_names

    peewee安装时随意了点.装了2.8.0的. 倒回到2.6.0就好了. sudo pip uninstall peewee sudo pip install peewee==2.6.0

  3. EXT Grid 默认展开所有行

    grid.getStore().load({ //默认展开所有行. callback:function() { var expander = grid.plugins[0]; var count = ...

  4. MySQL 查看最大连接数, 当期连接数.

    查看最大连接数 select VARIABLE_VALUE from information_schema.GLOBAL_VARIABLES where VARIABLE_NAME='MAX_CONN ...

  5. Arp攻击实战

    hyddd原创,转载请说明出处. 现在网上很多关于ARP攻击的文章,但多数是描述其原理,少数会以某个工具作为例子展开说明,但感觉说的还是不够详细,今天写个文章以实战介绍一个叫"WinArpA ...

  6. POJ 3009

    http://poj.org/problem?id=3009 一个搜索的题目: 大意就是一个冰球,在冰面上滑动,你打击一次,就沿一个反向滑动,知道碰到墙就会停下,而墙则会破碎. 求从起点到终点的最短的 ...

  7. 如何用 Robotframework 来编写优秀的测试用例

    介绍 这篇文档将会是一篇在「高层面」的怎么用 Robotframework 来编写优秀测试用例的原则.至于如何使用 Robotframework 来与您的待测试系统相作用这样的细节讨论是不包含在这篇文 ...

  8. VS2010调试速度很慢

    1.使用vs2010,感觉速度越来越慢.重新设置了vs2010的环境(在vs2010命令提示符下,执行devenv.exe /resetuserdata),居然解决了这个问题,速度跑的很好.网上有人说 ...

  9. 常见web错误码 404 500

    404表示文件或资源未找到java WEB常见的错误代码1.1xx-信息提示:这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应.100-继续.101-切换协议.2. ...

  10. h5页面的公共css

    /*reset*/body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,tex ...