如何在 Sql Server Data Tools (Integration Services) 中订购 ETL 任务?

How to order ETL tasks in Sql Server Data Tools (Integration Services)?

我是 ETL 处理的新手。我正在尝试通过 ETL 填充数据集市,但遇到了困难。我有 4 个 ETL 任务(每个任务在 Mart 中填充一个特定的 table),问题是我需要按特定顺序执行它们,以避免违反外键约束等约束。我怎样才能做到这一点?非常感谢任何帮助。

这是我当前 ETL 的快照:

为您在控制流中填充的每个 table 创建一个单独的数据流任务,然后简单地将它们按照您需要的顺序连接到 运行 中。您应该能够 copy/paste 将当前数据流中的组件转移到您创建的新组件中。

控制流中任务之间的连接称为优先约束,如果您双击其中一个,您会看到它们为您提供了一些关于如何控制 ETL 包流的选项。不过现在,您可能最好将其保留为默认值 - 这意味着每个数据流任务都将等待前一个任务成功完成。如果一个失败,下一个将无法启动,包将失败。

如果你想要一些 tables 并行加载,但稍后有一些 tables 等待所有这些完成,我建议添加一个序列容器并将那些需要并行加载到其中的。然后从序列容器连接到您的下一个数据流任务——甚至从一个序列容器连接到另一个。例如,您可能希望一个序列容器包含所有维度加载过程,然后是另一个序列容器包含所有事实加载过程。

通用模式比使用单独的数据流任务更进一步。如果您为每个要填充的 table 创建一个单独的包,则您可以创建一个父包,并使用执行包任务以正确的顺序调用每个子包。这对于可重用性来说非常棒,并且让您可以轻松地在需要时手动填充单个 table。当您进行测试时,这也非常好,因为当您想要测试单个 table 时,您不需要继续禁用某些任务或重新 运行 加载整个负载。我建议尽早采用这种模式,这样您以后就不需要做很多返工了。