我必须使用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查找。有没有更好的方法呢。
答案 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组件推断/过期维度)。
然后加载了事实表,使用业务键在每个维度(串联)上进行一次查找以查找代理键。