主页 | 专题新闻 | 杂志期刊 | 订阅杂志 | 申请赠阅 | 技术活动 | 技术社区 | FAQ | 招聘信息 | 客户服务
WinITPro首页> 新闻浏览

渐变维度Type2进化三部曲


2008-11-5 11:25:08 作者:李晓东

      在ETL过程中,对于渐变维度的处理,一直是大家比较关注的问题。关于渐变维度的概念,我们在2007年8月的“渐变维度转换及其实现”一文中有所介绍。本文将在实际应用的对比中,提供三种处理渐变维度的方法,并比较其效率。

      第一代:SSIS控件时代
      对于一些会在原业务系统中进行修改/添加维度,不需要记录记录历史属性的维度,我们通常会选择SSIS中控件“渐变维度”来完成这项工作。应对这种情况我们选用Type2。

Type2:变化的属性
说明:如果更改后的值应当覆盖现有值,则选择该类型。
解析:既需要更改又不用记录历史属性的类型。

      选择好数据源,设置好“业务键”和“非键列”之后(如图1),我们再对需要进行更新的“非键列”设置“更改类型”即可,如图2。

 
图1

 
图2

之后SSIS会帮我们生成数据流。简单快捷,3分钟完成一张表格,如图3。

 
图3

      第二代:SQL语句时代
      但是,对于稍微大一些的数据量,源1万条,目标几万条的时候就会非常的慢。对于这种情况,我们可以采用自己手写渐变维度的方式完成。需要分为两部分——更新原有数据和添加新增数据。如表1、表2所示。

Table Name

SS_Team

Column

Type

NULL?

Description

Team_InternalName

Nvarchar(50)

NOT NULL

业务建

Team_DisplayName

Nvarchar(50)

NULL

显示名

Sort_ID

int

NULL

排序ID


表1

Table Name

Dim_Team

Column

Type

NULL?

Description

PK_Team

int

NOT NULL

自增列

Team_InternalName

Nvarchar(50)

NOT NULL

业务建

Team_DisplayName

Nvarchar(50)

NULL

显示名

Sort_ID

int

NULL

排序ID


表2

1、更新原有数据
使用控件“执行SQL任务”。直接实行SQL语句:

以下是代码片段:

Update Dim_Team set Team_DisplayName = ss. Team_DisplayName

, Sort_ID = ss. Sort_ID

From Dim_Team dim inner join SS_Team ss

  On ss. Team_InternalName = dim. Team_InternalName

2、添加新增数据
使用控件“数据流任务”。数据源使用如下语句:

以下是代码片段:

Select Team_InternalName , Team_DisplayName , Sort_ID

  from SS_Team

 Where Team_InternalName not in (

select distinct Team_InternalName from Dim_Team )

然后将结果输入到Dim_Team即可。
插曲:有的表格业务建不止一个,并且not in的效率也不够高,所以采用not exists
则使用如下语句作为数据源:

以下是代码片段:

Select Team_InternalName , Team_DisplayName , Sort_ID ,a

from SS_Team ss

Where not exists ( select distinct Team_InternalName

      第三代:Lookup时代
      虽然上述语句可以高效地完成渐变维度Type2的运行,但是在实际运行中,发现由于目标表被用在了数据源表中,导致数据流产生了死锁。
解决方法1:在目标表中去掉表锁。选择“数据访问模式”为“表或试图-快速加载”,将“检查约束”钩选去掉,如图4。

 
图4

解决方法2:利用lookup的错误输出,如图5。
 


图5

SS_Dimteam:

以下是代码片段:

Select Team_InternalName , Team_DisplayName , Sort_ID

from SS_Team

Lookup:

以下是代码片段:

Select distinct  Team_InternalName from Dim_Team


设置Lookup错误输出为重新定向,如图6。
 


图6

输入目标:Dim_Team
至此,完成了渐变维度Type2的“进化”。效率也提高了不少。


     上述内容选自《Windows IT Pro Magazine国际中文版》2008年第11期,更多精彩内容,敬请参阅这儿,订阅《Windows IT Pro Magazine国际中文版》,请点击这儿

      关于作者
      李晓东,北京迈思奇科技有限公司BI 工程师。

全文共38892字节  

 
新闻更新
·WindowsITPro杂志2008年12月刊目录及文中脚本
·Reporting Service实用技巧之用背景图美化报表
·不要让活动目录脚本在你的手上挂起
·当前的信息安全趋势
·利用EMS管理Exchange:基本概念
·获得与Exchange Server 2007 Journaling的遵从性
·探秘Microsoft Online Service
·Windows Vista部署回顾
·还在为桌面排错而烦恼?试试MDOP吧
·MDOP管理企业桌面环境的利器
[more...]  
© <<Windows IT Pro Magazine 国际中文版>> All Rights Reserved. 京ICP证05037048
联系地址:北京市朝阳区曙光西里甲6号时间国际A座1206室┊邮编:100028
电话:010-58677341 58677342 58677343┊传真:58677400
发行部:Readers#winitpro.com.cn┊市场部:AE#winitpro.com.cn┊编辑部:Editor#winitpro.com.cn (使用时,请将#换成@)