SSIS - 将 Fact 与查找表匹配两次时重用 Ole DB 源
Posted
技术标签:
【中文标题】SSIS - 将 Fact 与查找表匹配两次时重用 Ole DB 源【英文标题】:SSIS - Reuse Ole DB source when matching Fact against lookup table twice 【发布时间】:2016-02-01 21:38:59 【问题描述】:我对@987654324@ 和 BI 很陌生,所以如果这是一个新手问题,首先很抱歉。
我在 csv 中有事实表的源数据,因此我想将 id 与查找表中的代理键进行匹配。
csv中的数据结构是这样的
... userId, OriginStationId, DestinyStationId,..
我想要完成的是将数据与我的查找表进行匹配。所以我正在做的是
-
使用 OLE DB 源读取查找数据
读取我的 csv 文件
按同一字段对两个输入进行排序
通过 Id 进行左连接,以获得 SK
这样,如果没有匹配项(也就是找不到代理键),我可以将其重定向到被拒绝的 csv 并稍后处理。
类似这样的:
(对不起西班牙语!)
我对每个维度都这样做,所以我可以用不同的错误代码处理每个维度。
由于OriginStationId
和DestinyStationId
是来自同一维度的两个值(它们都与同一个查找表匹配),我想知道是否有办法避免从表中读取两倍的数据(我的意思是,而不是使用两个 ole db 源从同一个表中读取两次数据)。
我尝试在排序中添加第二个输出,但不允许这样做。从OLE DB Source
添加另一个输出也是如此。
我看到有一个“缓存选项”,这是最好的方法吗? (尽管这意味着创建另一个 OLE DB source
.. 对吗?)
我想到的第三个选项是通过这两个字段加入,但由于查找表中只有一个字段(同一字段),当我尝试将我的 csv 中的两个列映射到相同的列时出现错误我的查找表中的列
有些列的排序顺序为 2 到 2
最好的方法是什么? 还是我想错了? 如果有不清楚的地方告诉我,我会更新我的问题
【问题讨论】:
您可以在任何组件之后使用多播来创建多个输出。 我还没有听说过那个组件,但现在我正在阅读它,它似乎可以实现我想要实现的目标。我会在晚上检查它,但根据这个mssqltips.com/sqlservertip/2047/… 它似乎适合我的情况。您应该将其发布为答案 【参考方案1】:任何时候您希望您可以从一个只允许一个的组件获得多个输出,您所要做的就是在该组件之后使用 Multicast 组件,其唯一目的是将数据流流拆分为多个输出。
【讨论】:
【参考方案2】:贡萨洛
我刚刚使用了这篇关于如何为数据仓库构建派生列的文章:- How to Populate a Fact Table using SSIS (part 1)。
使用这个我构建了一个简单的包,它读取一个包含两列的 CSV 文件,这些列用于从同一个 CodeTable 派生不同的值。 CodeTable 有两个字段 Id 和 Description。
数据流有两个“查找”任务。第一个将属性 Lookup1 与描述相结合,以派生其 Id。第二个将属性 Lookup2 与 Description 连接起来以派生不同的 Id。
这是数据流:-
请注意,需要“数据转换”才能将 CSV 文件中的字符串属性转换为“Unicode 字符串 [DT_WSTR]”,以便将它们连接到表中的 nvarchar(50) 描述属性。
这是数据转换:-
这是第一个查找(第二个将“Lookup2 的副本”加入到描述中):-
这是数据查看器的输出,其中包含两个派生 ID CodeTableFirstId 和 CodeTableSecondId:-
希望我能理解您的问题,这对您有用。
干杯约翰
【讨论】:
以上是关于SSIS - 将 Fact 与查找表匹配两次时重用 Ole DB 源的主要内容,如果未能解决你的问题,请参考以下文章