ssis专家教程事实表的ETL - 图文

发布时间 : 星期三 文章ssis专家教程事实表的ETL - 图文更新完毕开始阅读

5.4 事实表ETL的基础知识

事实表ETL过程中主要包括了获取维度代理键、管理度量计算和标识记录的变化。 5.4.1 获取维度代理键(1)

在处理事实源记录(如事务或库存)时,必须从维度中拉出代理键。要实现这一点,事务源中的业务键必须与维度表中的业务键相对应。加载维度表的过程涉及从匹配的业务键中查找代理键。

1.类型2历史变化和迟到事实

如果您是在维度上查询历史,那重要的是拉出当前代理键。有时,甚至当前代理键也不是最精确相关联的。尤其像迟到维度,有一种名为迟到事实 (late-arriving fact)的情形。一些系统会保持用于报表的事务,直到遇到预定义的情况。在这种情况下,事务可能会比大部分记录早进入ETL过程。由于相关维度记录自该 事务日期后已经历类型2变化,所以当前维度代理键不再与事实记录的事务日期一致。

2. 缺少维度记录或推断成员

回想一下第4章有关加载维度的讨论,那里回顾了在推断成员存在的情况下对更新维度记录的支持。不过,这只是一方面。在加载事实记录时,有可能维度表 中缺少匹配记录。换句话说,维度表中不存在业务键。如果出现这种情况,必须向维度中添加推断成员,从而生成新的代理键用于事实表加载。 在大部分情况下,获取代理键都是很简单的,但正如您所见,其中也会有例外。 3. 使用SSIS标识维度代理键

获取代理键的最好的SSIS方法是利用数据流和使用下列某种转换。

查找转换(Lookup transformation)是可用的基本方法,因为当维度表适合转换缓存时,它可以很好地执行。 如果维度较大且不适合于缓存内存,那应使用Merge Join转换(Merge Join- transformation)。

模糊查找转换(Fuzzy Lookup transformation)用于脏数据。如果在维度上执行查找时没有匹配的,那Fuzzy Lookup会作出\最佳猜测\。它索引和缓存数据;也要求一些启动时间和开销,因此最好的方法是联合利用模糊查找和查找转换来处理缺少的记录。

另一种方法就是使用控制流,通过Execute SQL Task处理与事实表的维度关联性。这要求分段事实数据,使用SQL连接获取代理键。不过,这一方法是同步的--要求一次一步:

(1) 将事实源数据移至中间表

(2) 跨所有相关维度表执行连接(同时对中间表执行UPDATE或采用连接结果并加载事实表) (3) 加载事实表

通过降低对数据库的影响(消除昂贵的连接)和减少维度相关中涉及的步骤,可使数据流方法的伸缩性更好。 4. 使用Lookup转换获取维度键

作为对维度键使用Lookup转换的一个示例,图5-5显示了货币汇率事实表程序包,它配置了一个包含OLE DB Source的数据流,从货币汇率源表中拉数据;以及一个从时间维度中获取代理键的Lookup转换。

货币汇率事实表定义了一家公司(该公司在美国境内和境外销售产品)与U.S.美元(USD)匹配的货币的变化。销售货币汇率源跟踪 AdventrueWorks的每日货币转换。因此OLE DB Source配置为引用AdventureWorks连接,指向Sales.CurrencyRate表。图5-6显示了引用时间维度的Lookup Transformation Editor。

(点击查看大图)图5-5 货币汇率事实表程序包

联系合同范文客服:xxxxx#qq.com(#替换为@)