2012-11-01 35 views
8

我正在SQL 2008/SSIS中构建我的第一个数据仓库,我正在寻找一些加载事实表的最佳实践。SQL/SSIS DataWareHouse事实表加载,最佳实践?

目前在我的DW中,我有大约20个尺寸(办公室,员工,产品,客户等)属于1型SCD。在我的DW结构,还有我已经应用了几件事情:

  • 没有空值填充每个维度(SK ID 0
  • 未知的主要成员(空白的文本或0分期中的数字代替) )
  • UPSERT为SCD 1型加载从舞台到生产表
  • SELECT DISTINCT为我的尺寸

在我的事实加载SSIS项目,目前的方法我有装载尺寸是装载对每个DIM有多个查找(20+),然后用数据填充FACT表。

对于我查找我设置:

  • 完全缓存
  • 忽略了 “不匹配的条目” 失败
  • 派生转型与 “ISNULL(surrogate_idkey)?0:surrogate_idkey” 每个SK使如果查找失败,他们将默认为SK ID 0(未知成员)。
  • 我的一些维度查找的有一个以上的业务重点更多

这是最好的方法?附上的图片可以帮助我完成上面的描述。

enter image description here enter image description here enter image description here

回答

5

看起来不错。如果开始遇到性能问题,可以选择一些选项,但是如果这是稳定的(在数据加载时间窗口内完成,源系统不会耗尽资源等),那么我认为没有理由改变。

一些潜在的问题,以保持眼睛上的...

  1. 有20+完全缓存查找,变换可能会带来一个问题,如果你的尺寸大小增加......由于在SSIS内存限制系统......但由于他们是第一类,我不会担心。
  2. 完全缓存查找“水合物”执行前...让他们的20+可能会减慢你的速度

一种常见的替代(你有什么以上)是提取从事实表数据源系统并在通过单个SQL语句执行维度键查找之前将其归入临时区域。有些人甚至专门为此目的在临时区域保留了一组维度键映射表。这可以减少源系统上的锁定/阻塞......如果每次加载都有大量数据,并且在抽取数据并通过20多种查找转换运行数据时必须阻止源系统。

当您拥有大量数据,大尺寸,复杂的密钥映射(通常是由于多个源系统)以及短的数据加载时间窗口时,拥有良好的分段区域策略变得更加重要。

+0

感谢Banton,目前我们正在加载(全部转储)4m记录,其中包含大约200列;每天约有2千行新纪录;装载阶段相当快。感谢您的反馈。 – exxoid

+0

[请关注,使用和分享关于专用BI站点的倡议。](http://area51.stackexchange.com/proposals/70503/business-intelligence?referrer=EPHSm8-3avvaMxLjdRIeNg2)。我首先提出这个问题[元当没有商业智能网站的建议。](http://meta.stackexchange.com/q/232414/201662) – bonCodigo