加载事实表+查找/ UnionAll用于SK查找

时间:2010-04-29 04:59:20

标签: sql-server ssis lookup surrogate-key fact-table

我必须使用12个查找来填充FactTable到维度表以获得SK,其中6个是不同的Dim表,其余6个是查找相同的DimTable(类型II)查找相同的自然键。

例如:

PrimeObjectID =>查找到DimObject.ObjectID =>获取ObjectSK

并获得了其他相同的列

OtherObjectID1 =>查找到DimObject.ObjectID =>获取ObjectSK

OtherObjectID2 =>查找到DimObject.ObjectID =>获取ObjectSK

OtherObjectID3 =>查找到DimObject.ObjectID =>获取ObjectSK

OtherObjectID4 =>查找到DimObject.ObjectID =>获取ObjectSK

OtherObjectID5 =>查找到DimObject.ObjectID =>获取ObjectSK

对于这样的多重查找应该如何进入我的SSIS包。

现在使用lookup / unionall foreach查找。有没有更好的方法呢。

2 个答案:

答案 0 :(得分:1)

我假设您正在执行的是查找,将错误重定向到派生列以设置失败查找的默认值,然后为每个查找/派生列值添加union all。这种模式相当普遍,我在早期阶段使用它来帮助调试。但是,由于union all是一个部分阻塞组件(即Union All在执行时创建一个新的缓冲区,但在SSIS进入后立即传递数据)这会降低整个包的效率,因为在数据流中创建新缓冲区的开销。通常,我会编写一系列查找以忽略错误,然后在最后一个之后,我将包含一个派生列组件,它对作为查找目标包含的所有列的默认值进行替换。这样可以通过数据流实现最高效的数据流。有关哪些数据流组件阻止或半阻止的详细信息,请参阅以下帖子:http://sqlblog.com/blogs/jorg_klein/archive/2008/02/12/ssis-lookup-transformation-is-case-sensitive.aspx

答案 1 :(得分:0)

我不明白你为什么每个维度进行2次查找。

通常我们首先处理所有维度(使用TableDifference组件推断/过期维度)。

然后加载了事实表,使用业务键在每个维度(串联)上进行一次查找以查找代理键。