ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 4 关于数据仓库维度数据处理的方法探究系列——缓慢变化维处理——覆盖方式

4 关于数据仓库维度数据处理的方法探究系列——缓慢变化维处理——覆盖方式

原创 Linux操作系统 作者:bq_wang 时间:2008-02-13 17:22:41 0 删除 编辑

此种方式是缓慢变化维中最简单的一种,它用于保证数据仓库中的数据为当前的最新值,不保留历史数据,如发现数据仓库中当前数据已为旧数据,则对当前已有记录进行值更新,主键值不变,如发现有新数据,则把新数据加载到数据仓库中,并赋予新的代理主键值。


3.3实现

3.3.1覆盖(Type 1 Dimension -- keep most recent values in target)

3.3.1.1原理

此种方式是缓慢变化维中最简单的一种,它用于保证数据仓库中的数据为当前的最新值,不保留历史数据,如发现数据仓库中当前数据已为旧数据,则对当前已有记录进行值更新,主键值不变,如发现有新数据,则把新数据加载到数据仓库中,并赋予新的代理主键值。通俗地说,就是指对于源表中的同一条数据,目标(数据仓库)中始终只会保留一条,也就是最新的一条,一旦第一次插入后,数据就存在了,其在维表中的ID(代理主键)就不再改变了,发生数据改变时,只对其字段作Update操作。

这种方式在确认数据的历史不需要记录,只需保留当前最新信息的时候使用。

CREATE TABLE t_dem_xxx

(

ID VARCHAR(20) NOT NULL,

Name1 VARCHAR(50),

Name2 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

FROM t_tmp_xxx A,t_dem_xxx B

WHERE a.ID = b.ID

AND b.ID NOT IN ('-1','-2')

END

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/6517/viewspace-145438/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-07

  • 博文量
    445
  • 访问量
    1209436