SSIS2012 渐变维度转换控件(Slowly Changing Dimension Transformation)加载简单维度表

浏览: 1951

开篇介绍

先了解下什么是缓慢渐变维,为什么要渐变维?

公司员工信息可能发生变化,比如:电话号码,基本薪资,邮箱等都可能会发生变化。数据仓库中记录员工信息的维度表对应的属性做相应的更改才能保证数据一致。

案例介绍

                  示例数据库AdventureWorksDW,AdventureWorks。在此示例中,DimSaleTerritory表来源于Sale.SaleTerritory,源的变化都会引起维度表中三列的变化,                       这些变化 的列将作为维度属性来引用。可能说的有点抽象,具体看实际案例步骤。

        a.新建一个包,名为ETL_DimSaleTerritory,新建两个OLEDB项目连接,分别指向新建的连接管理器AdventureWorksDW,AdventureWorks。

Clipboard Image.png

        b.在控制流中拖入一个数据流任务控件,转到数据流设计器。OLEDB源的配置如图

Clipboard Image.png

                       b.1 只勾选DimSaleTerritory需要的列即可,点确定,如图所示。

                      Clipboard Image.png

                c.拖一个查找转换控件,设置缓存模式为‘完全缓存’,连接方式‘OLEDB连接管理器’如图所示

Clipboard Image.png

    c1.连接配置如图所示

    Clipboard Image.png

             c2.列配置:以CountryRegionCode列在查找转换中找到Person.CountryRegion中的name,并将name输出别名命名为SalesTerritoryCountry

              Clipboard Image.png

以上步骤目的:使源数据与目标维度表相对齐,下面步骤将是处理维度的核心部分,使用渐变维转换控件。

       d.拖入渐变维度控件,接入查找转换控件蓝色数据路径。此时会弹出消息框,选择查找’匹配输出‘。

          d1.双击渐变控件维,需要确定维度表与哪个数据源关联。连接管理器选择‘AdventureWorksDW’,选择维度表DimSalesTerritory。

          再将SalesTerritoryAlternateKey键类型改为业务键。

          目的:1.确定源与目标之间匹配的行。

                    2.将源中的列与维表属性匹配,下一步将会使用该匹配来确定更改跟踪类型。

                    注意:源与维度之间的列是根据名称相同自动匹配的。如果名称不同,将要手动匹配。

          如图所示。

Clipboard Image.png

      e.在向导下一步中,需要将每个匹配列被标识为一种更改类型。此案例所有列都更改了属性,来匹配DimSalesTerritory维度。所以更改类型选择‘变化的属性’

      三种更改类型的说明,如图所示。

         Clipboard Image.png

   f.继续下一步中,会出现‘固定属性选项和变化属性选项‘。

     固定属性选项:此时灰色,因为之前更改类型没有固定属性。

     变化属性选项:可以更改候选键匹配所有记录,也可以只更新最近变化的属性。此案例选择哪一种不重要,因为每个候选键只有唯一记录,因为没有历史属性产生新记录。此处取消复选框。

    Clipboard Image.png

   g.继续下一步,会出现启用推断维度成员复选框。

     推断维度成员:当运行事实表加载,维度成员不存在时。在加载期间会添加占位符记录。该案例没涉及到,此处不勾选,不详细说明了。

     Clipboard Image.png

   f.继续下一步,渐变维控件会有六个输出。

     1.NewOutput(新输出) 

     2.Changing Attribute Updates Output(改变属性更新输出) 

     3.Fixed Attribute Output(固定属性输出)

     4.Historical Attribute Inserts Output(历史属性插入输出)

     5.Inferred Member Updates Output(推断成员更新输出)

     6.Unchanged Output(无改变输出)

     此处只涉及两个输出

     一.NewOutput:来自源的候选键在维度中没有匹配项,该输出将插入新的维度记录。

     二.Changing Attribute Updates Output:源候选键在维度中有一个匹配,且源中属性与维度中的属性不匹配的时候使用。

      a. OLEDB目标如图所示,向DimSalesTerritory插入新数据

      Clipboard Image.png

      b.OLEDB命令配置,如图所示,更新DimSalesTerritory中匹配的源候选键对应属性。

      此处理解:通过匹配的SalesTerritoryAlternateKey候选键,根据源表中的输入列,来更新维表中对应的属性。

       Clipboard Image.png

      Clipboard Image.png

               c.执行状态结果,如图所示

                Clipboard Image.png


总结

SCD是可以满足大多数维度ETL需求的工具,但是本身也存在缺点。在某些情况并不适合处理维度ETL。

主要缺点:

1.每一行的输入,每一行的更新都要向关系引擎发送新的查找。不能在内存中缓存维度表。可想而知,如果维度表以万计的话,性能问题很大。

2.插入目标没有被设置为快速加载,因为更新和插入之间可能会发生死锁。所以插入时,每次直插入一行,导致包执行慢。

3.设置好SCD后,如果再次打开向导并进行更改,将会自动丢失之前自定义设置。

优化:

1.在维度表中,给业务键创建索引。

2.如果不需要OLEDB命令转换控件,那么可以将插入目标更改为快速加载,而不是每行插入。

          除了用SCD控件以外,还可以使用Sql Server 的Merge语句来实现渐变维度。

------------------------------------------------------------------------蠢萌分割线------------------------------------------------------------------------

推荐个公众号“IT海贼船”,以动漫海贼王为主题。内容:职业规划,工作,面试经验分享,多方向实战案例分享的文章,视频资源等等。

(PS:绝对没收啥好处)

黑胡子: 人的梦想,永远不会结束!



              

        

推荐 1
本文由 粽子job 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册