| Type2:变化的属性 说明:如果更改后的值应当覆盖现有值,则选择该类型。 解析:既需要更改又不用记录历史属性的类型。 |
图1
图2
之后SSIS会帮我们生成数据流。简单快捷,3分钟完成一张表格,如图3。
图3
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 |
2、添加新增数据
使用控件“数据流任务”。数据源使用如下语句:
| 以下是代码片段: Select Team_InternalName , Team_DisplayName , Sort_ID 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 |
解决方法1:在目标表中去掉表锁。选择“数据访问模式”为“表或试图-快速加载”,将“检查约束”钩选去掉,如图4。
图4
解决方法2:利用lookup的错误输出,如图5。

图5
SS_Dimteam:
| 以下是代码片段: Select Team_InternalName , Team_DisplayName , Sort_ID from SS_Team |
Lookup:
| 以下是代码片段: __select distinct |
设置Lookup错误输出为重新定向,如图6。

图6
输入目标:Dim_Team
至此,完成了渐变维度Type2的“进化”。效率也提高了不少。
本文介绍了在ETL过程中处理渐变维度Type2的三种方法:使用SSIS控件、SQL语句以及Lookup组件,并对比了它们的效率。从简单的SSIS控件配置到SQL语句的手动编写,再到利用Lookup组件避免死锁问题,逐步优化了处理流程。
555

被折叠的 条评论
为什么被折叠?



