此种方式是缓慢变化维中较为折中的做法,但需要表结构随之适应。它的原理是把目标表字段扩充一倍,其中一组用来记录最新的记录信息,另一组用来记录上一次的历史记录。新记录插入时,将其插入到最新记录的位置,一旦记录发生改变,修改后的记录变为最新记录,则把修改后记录替换原来的记录,放在最新记录位置,同时把原记录移至旧记录位置。
3.3.3 记录最新记录及上一次历史( Type 3 Dimension -- keep the current and previous values in the target )此种方式是缓慢变化维中较为折中的做法,但需要表结构随之适应。它的原理是把目标表字段扩充一倍,其中一组用来记录最新的记录信息,另一组用来记录上一次的历史记录。新记录插入时,将其插入到最新记录的位置,一旦记录发生改变,修改后的记录变为最新记录,则把修改后记录替换原来的记录,放在最新记录位置,同时把原记录移至旧记录位置。
这种方式,对于那些不是需要所有历史信息的表可以适用,但同时带来的是表结构需要相应的调整,增加相同的一组字段,在字段本身就多的情况下,其新表的字段数将是源表字段数 *2 ,故使用此种方式需要斟酌。同时采用此方法对于 OLAP中维度的建模并没有太大的益处,因为这两套数据只是前后版本的区别,并不存在层次的差别。
代码
CREATE TABLE t_dem_xxx
(
ID VARCHAR(20) NOT NULL,
Name1 VARCHAR(50),
Name2 VARCHAR(50),
PreName1 VARCHAR(50),
PreName2 VARCHAR(50),
CONSTRAINT PK_t_dem_xxx PRIMARY KEY (ID)
)
go

CREATE TABLE t_tmp_xxx
(
ID VARCHAR(20) NOT NULL,
Name1 VARCHAR(50),
Name2 VARCHAR(50),
CONSTRAINT PK_t_tmp_xxx PRIMARY KEY (ID)
)
go

CREATE PROCEDURE p_dem_xxx
AS
-- 维度抽取存储过程
BEGIN
DECLARE
@num NUMERIC(10,0)
SELECT @num = COUNT(*) FROM t_dem_xxx

-- 如果原表为空,构造缺省值
IF @num = 0
BEGIN
INSERT INTO t_dem_xxx (ID,Name1,Name2) SELECT '-2','NULL 值 ',''
INSERT INTO t_dem_xxx (ID,Name1,Name2) SELECT '-1',' 缺失外键 ',''
END

-- 根据主键插入在维度表中找不到的基础数据
INSERT INTO t_dem_xxx
(
ID ,
Name1 ,
Name2
)
SELECT a.ID,a.Name1,a.Name2
FROM t_tmp_xxx a LEFT OUTER JOIN t_dem_xxx b
ON a.ID = b.ID
WHERE b.ID IS NULL

-- 根据主键更新在维度表中找到但是已经发生变化的的基础数据,重新设置数据
UPDATE t_dem_xxx
SET Name1 = a.Name1,
Name2 = a.Name2,
PreName1 = b.Name1,
PreName2 = b.Name2
FROM t_tmp_xxx a,t_dem_xxx b
WHERE a.ID = b.ID
AND (a.Name1<>b.Name1 or a.Name2<>b.Name2)
END 
 
备注:
文档中所有代码均可执行,且执行步骤均相同,以下附调用代码
-- 第一次执行插入操作
INSERT INTO t_tmp_xxx VALUES ('1','AA','')
INSERT INTO t_tmp_xxx VALUES ('2','BB','')
EXEC p_dem_xxx
SELECT * FROM t_dem_xxx
SELECT * FROM t_tmp_xxx
-- 更新数据后的变化
UPDATE t_tmp_xxx SET Name2 = 'A' WHERE ID = '1'
EXEC p_dem_xxx
SELECT * FROM t_dem_xxx
SELECT * FROM t_tmp_xxx
 
本文转自baoqiangwang51CTO博客,原文链接:http://blog.51cto.com/baoqiangwang/310375,如需转载请自行联系原作者

6 关于数据仓库维度数据处理的方法探究系列——缓慢变化维处理——记录最新记录及上一次历史...相关推荐

  1. 3 关于数据仓库维度数据处理的方法探究系列——缓慢变化维概述和原理

    缓慢变化维 Slowly Changing Dimensions( A typical slowly changing dimension is a product dimension in whic ...

  2. 5 关于数据仓库维度数据处理的方法探究系列——缓慢变化维处理——全历史记录...

    全历史记录是缓慢变化维中最为强大的一种加载方式.它将可以完全实现覆盖方式能实现的加载方式,且可以实现对数据的历史记录,可以记录下每一个数据的细微变化. 3.3.2 全历史记录( Type 2 Dime ...

  3. 2 关于数据仓库维度数据处理的方法探究系列——无变化维度处理

    无变化维度一般都是比较简单的维度,都是经过一次性处理后就不再变化的数据:通常这些维度都是一些常识数据 (如性别,重要程度 )和分段数据 (为了减少单层维度的数量,按照一定业务标准进行的人为分组 ). ...

  4. 1 关于数据仓库维度数据处理的方法探究系列——维的概述

    在数据仓库中,维度是数据仓库概念的一个重要基础,因此维度的抽取和处理是一个重要的环节,对于不同的维度根据业务需求以及客观原因有许多不同的处理方式,以下将以SQLServer2000语法为例展开. 1 ...

  5. 8 关于数据仓库维度数据处理的方法探究系列——父子维

    父子维度通俗的话来讲,这个表是自反的,即外键本身就是引用的主键:类似这样的关系,如公司组织结构,分公司是总公司的一部分,部门是分公司的一部分,当然如果定义得好的话员工是部门的一部分:通常公司的组织架构 ...

  6. blog-数据仓库维度建模系列--缓慢变化维(SCD)的思考(一)

    缓慢变化维(Slowly Changing Dimensions) 缓慢变化维是维度技术中用于描述维度变化情况的一种分类. 什么是SDC? 在现实的实施中 先说一下缓慢变化维的概念.缓慢变化维(Slo ...

  7. 吴乙己的数仓指南_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 ...

  8. Kettle使用_22 维度更新 缓慢变化维 拉链表

    Kettle使用_22 维度更新 Type2 拉链表 需求:通过Kettle实现对员工维度数据的更新和插入. 解决方法:通过维度查询更新组件实现. 注:补充部分有SQL版Type2实现代码. Prev ...

  9. 大数据学习(三十一)数据仓库如何处理缓慢变化维

    以下内容结合了<大数据之路-阿里巴巴大数据实践>书中的内容,就如何处理缓慢变化维话题进行展开. 前言:维度的属性也是会发生变化的,只不过相较于事实表而言,变化的速度是极其缓慢的,那我们是否 ...

最新文章

  1. BZOJ.3257.树的难题(树形DP)
  2. (转)字典树原理+实现
  3. mysql 举例_MySQL 语句举例(一)
  4. android 端口进程号,Android中如何根据端口号寻找对应的进程
  5. Qt creator5.7 OpenCV249之pyrUp函数(含源码下载)
  6. butterfly配置 hexo_Hexo博客之butterfly主题优雅魔改系列(持续更新)
  7. CentOS下安装实时检测网络带宽的小工具bmon
  8. 太阳花图片_花是大自然给予人类的礼物 你知道石斛花的花语是什么吗
  9. sqlite如何与mysql连接数据库连接_c#中怎么连接到sqlite数据库?
  10. Exchange 2010升级到Exchange 2016汇总
  11. BootStrap自定义小图标
  12. 阿拉伯数字转中文数字
  13. BGP Aggregation – Suppress Map
  14. 网页整体放大/缩小的实现
  15. Spark环境搭建Standalone模式
  16. 最全小布老师所有视频推荐--oracle视频资料库
  17. Pytorch1.1.0 入门 自定义op(python)
  18. NDIS开发[网络驱动开发] NDIS开发1
  19. xmind可以画流程图吗_Xmind制作流程图教程 xmind怎么画流程图?xmind画流程图步骤...
  20. Arduino+esp32+blinker第一课点灯

热门文章

  1. HDU 2066-一个人的旅行(最短路Dijkstra)
  2. ListActivity的onListItemClick不响应的解决办法
  3. IDEA中如何彻底删除项目
  4. 数组、哈希以及其他枚举类型
  5. Redux 学习笔记
  6. 2009年2月Windows Mobile Webcast预告
  7. 挖矿的电费自由日——矿工为何每个月总有那么几十天闷闷不乐
  8. BCH将于9月1日进行压力测试
  9. 查询到330TSI 精英版变速箱是DSG七速湿式(DQ380)(国五)DSG七速湿式(DQ381)(国六)...
  10. VIEW登陆故障解决办法。