我是第一次学习SSIS。我正在尝试将多个表从我的临时数据库加载到数据仓库中的多个表。我的临时数据库只是一个数据库,我的所有源数据库中的所有表都被复制到它。我发现每个数据流任务只允许将一个源表连接到一个目标表。我是否必须使用与源数据库中的表数一样多的数据流任务?有没有一种简单而有效的方法来做到这一点?
根据我的理解,我需要一个空的数据库,其中包含在SQL Server中创建的空Dim和Fact表,它们将充当目标数据仓库并从登台数据库接收数据。因此我已经创建了这个空数据仓库。请帮忙。
答案 0 :(得分:4)
在DFT(数据流任务)中,没有任何惯例需要只有1个源和1个目标。
您可以在DFT中拥有多个源和目标组件。但是,如果在单个DFT中有太多源到目标组件,则可能会耗尽内存。在预执行阶段,SSIS必须决定为各个S2D组件分配的内存,如果内存消耗过高,则服务器可能无法为所有组件授予足够的内存。这可能导致漫长的等待。
但是,DFT有一个名为EngineThreads
的属性,它定义了数据流引擎可以并行创建和运行的线程数。根据MSDN:
要了解此属性的工作原理,请考虑使用三个示例包 数据流任务。每个数据流任务都包含十个源到目标 执行树。如果在每个数据流任务上将EngineThreads设置为10, 所有30个执行树都可以同时运行。但是,一般 规则不是并行运行更多线程而不是可用数量 处理器。运行的线程数多于可用处理器数 由于线程之间频繁的上下文切换,可能会影响性能。
因此,最好创建单独的数据流任务并执行操作。
注意:如果要从多个来源获取数据,则可以在单个数据流任务中执行此操作。