2013-04-15 49 views
0

我正在学习SSIS第一次。我试图从暂存数据库中将多个表加载到数据仓库中的多个表中。我的暂存数据库不过是一个数据库,其中所有源数据库中的所有表都已复制到该数据库中。我发现每个数据流任务只允许将一个源表连接到一个目标表。我是否必须使用与我的源数据库中的表数量一样多的数据流任务?有没有一个简单而有效的方法来做到这一点?SSIS多表加载

从我的理解,我需要一个空的数据库,并在SQL Server中创建空Dim和Fact表,它将充当目标数据仓库并从暂存数据库接收数据。因此我已经创建了这个空的数据仓库。请帮忙。

回答

3

没有约定,您需要在DFT(数据流任务)中只有1个源和1个目标。

您可以在DFT内部拥有多个源组件和目标组件。但是,如果在单个DFT中源到目标组件数过多,则可能会耗尽内存。在预执行阶段,SSIS必须决定为单个S2D组件分配的内存,并且如果内存消耗太高,则服务器可能无法为所有组件分配足够的内存。这可能导致长时间等待

但是,DFT有一个名为EngineThreads的属性,它定义了数据流引擎可并行创建和运行的线程数。根据MSDN:

要了解此属性如何工作,请考虑包含三个 数据流任务的示例包。每个数据流任务包含十个源到目标 执行树。如果在每个数据流任务中将EngineThreads设置为10,则所有30个执行树都可能同时运行。但是,通用规则 不是并行运行的线程数量多于可用的处理器数量。由于线程之间的频繁上下文切换,运行比可用处理器数量更多的线程可能会妨碍性能。

因此,最好创建单个数据流任务并执行操作。

注意:如果您从多个来源获取数据,则可以在单个数据流任务中执行此操作。

+0

所以,如果我只有7个SQL表,我可以使用相同的DFT所有7个S2D线程?有没有其他的方式来做到这一点,而不是有7个单独的线程7个表? – Gayu

+0

我认为你没有正确阅读我的答案。如果你有2个S2D组件,那么SSIS可能无法并行运行所有组件,并且很少有S2D可能永远挂起。对每个'S2D'最好都有单独的DFT。但是,然后再次需要测试 – praveen

+0

谢谢。我认为会有其他有效的方式,而不是每个S2D都有一个DFT。由于MSDN说组件会挂起,我会一个接一个地做。 – Gayu