缓慢变化维 (Slowly changing dimension)
维度建模的数据仓库中,有一个概念叫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)的更多相关文章
- 缓慢变化维 (Slowly Changing Dimension) 常见的三种类型及原型设计(转)
开篇介绍 在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库 ...
- 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计
在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据 ...
- 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式
开篇介绍 关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型 ...
- DataStage系列教程 (Slowly Changing Dimension)缓慢变化维
BI中维表的增量更新一般有2种: Type 1:覆盖更改.记录的列值发生变化,直接update成最新记录. Type 2:历史跟踪更改.记录值发生变化,将该记录置为失效,再insert一条新的记录. ...
- ODI 11g & 12c中缓慢变化维(SCD)的处理机制
缓慢变化维(Slowly changing Dimensions)指的是维表中的维度字段值会随着时间或业务调整,而在后续的分析中,历史数据仍然要使用旧的维度值,新的数据会使用当前维度值.在数据仓库建设 ...
- 如何用SQL语句处理缓慢变化维(渐变维,拉链表)SCD-2?
假设有一张居民维表,需要记录居民状态的变更历史,根据Kimball建模理论,设计居民维表如下: 另外在ODS中有居民信息的每日快照表(每天都记录一份居民的全量信息):O_USERINFO 如何将ODS ...
- HIVE- SCD缓慢变化
SCD缓慢变化维,比如一个用户维表,用户属性会变化,但是不会变化很剧烈,可能一年只会变化一两次,也不会所有用户的属性都会有变化,只有少量的数据发生变化,所以叫缓慢变化维.这种问题就是由于维度的变化所造 ...
- Data Flow ->> Slow Changing Dimension
这里简单讲下SCD 在讲之前贴上两个有用的链接地址.作者的两篇文件讲解了SCD是什么以及应用 http://www.cnblogs.com/biwork/p/3363749.html http://w ...
- DIV宽度自动缓慢变化
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
随机推荐
- ubuntu14.04 163sources.list
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.163 ...
- Git打包文件
原文: http://gitbook.liuhui998.com/7_5.html 一.打包文件索引 首先, 我们来看一下打包文件索引, 基本上它只是一系列指向打包文件内位置的书签. 打包文件索引有两 ...
- Oracl各个版本的下载地址
http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/112010-win32soft-098630-z ...
- hibernate xx(tableName) is not mapped
数据库中表名是:book,数据库表名不区分大小写的 之后我在hibernate 使用book, String sql="from book"; Query query=sessio ...
- 18. javacript高级程序设计-JavaScript与XML
1. JavaScript与XML IE采取了下列方式: l 通过ActiveX对象来支持处理XML,而相同的对象也可以用来构建桌面应用程序 l Windows携带了MSXML库,JavaScript ...
- MySQL(MariaDB)的 SSL 加密复制
背景: 在默认的主从复制过程或远程连接到MySQL/MariaDB所有的链接通信中的数据都是明文的,在局域网内连接倒问题不大:要是在外网里访问数据或则复制,则安全隐患会被放大很多.由于项目要求需要直接 ...
- hdu 1556.Color the ball 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 题目意思:有 n 个气球从左到右排成一排,编号依次为1,2,3,...,n.给出 n 对 a, ...
- shiro错误总结
今天在做spring+mybatis+springmvc+shiro的时候,报这个错,刚开始以为是shiro登录验证出错,后来,观看一下错误,发现在别的xml中写错了代码,shiro接连着报错,记录一 ...
- linux 卸载软件
sudo apt-get autoremove --purge 后跟要卸载的软件名称, --purge表示要完全卸载.
- ArtDialog文档
http://www.planeart.cn/demo/artDialog/_doc/API.html#API