问题:目前我们有许多存储过程(很长达10,000行),这些存储过程是由各种开发人员在过去10年中针对各种要求编写的。现在很难管理那些复杂/长期存储过程(没有适当的文档)。
我们计划将这些存储过程移动到SSIS ETL包中。
有人这样做过去了吗?如果是,应该采取什么方法。
感谢是否有人可以就将存储过程转换为SSIS ETL包的方法提供建议。
由于
答案 0 :(得分:5)
之前我已经完成了这项工作,对我的团队来说效果很好的是从原始源开始逐步重构,然后迭代重构工作。
第一步是尝试将存储过程逻辑模块化为我们链接在一起的执行SQL任务。每项任务都经过测试和批准,然后我们整合并确保新流程与遗留流程的结果相匹配。
在此之后,我们可以在整个团队中划分单独的执行SQL任务,并对我们是否可以将执行SQL任务中的SQL进一步重构为本机SSIS任务进行负载平衡。
每个重构都经过单独的单元测试,然后进行集成测试,以确保整个流程输出仍然像传统过程一样。
答案 1 :(得分:3)
我建议采取以下步骤:
分析存储过程以识别源和目标列表。例如:如果存储过程dbo.TransferOrders
将数据从表dbo.Order
移动到dbo.OrderHistory
。然后,您的来源将为dbo.Order
,目的地为dbo.OrderHistory
。
列出源和目标后,尝试按源/目标按照您的偏好对存储过程进行分组。
尝试查看存储过程中是否发生任何数据转换。 SSIS中提供了良好的数据转换任务。您可以评估这些功能并将其中的一些功能从存储过程移动到SSIS。由于SSIS是一种工作流类型的工具,我觉得更容易理解包内的内容,而不是滚动多行代码来理解功能。但是,那只是我。偏好因人而异。
尝试识别存储过程中的依赖项并准备层次结构。这将有助于以适当的顺序将任务放入包中。
如果您有一个名为dbo.Table1
的表填充5个不同的表。我建议将它们放在一个包装中。即使这个数据填充由5个不同的存储过程执行,您也不需要使用5个包。不过,这又取决于您的业务情况。
SSIS项目解决方案可以在其中包含多个包并重新使用数据源。您可以使用控制流任务上的Execute SQL task
来运行现有查询,但我建议您还要查看SSIS中可用的一些不错的转换任务。我在我的项目中使用它们,它们在ETL操作中运行良好。
这些步骤可以通过一次查看一个存储过程来完成。您不必一次完成所有这些操作。
请查看我在其他Stack Overflow问题中给出的一些示例。这些应该可以帮助您了解使用SSIS可以实现的目标。
Copying data from one SQL table to another
Logging feature available in SSIS
Loading a flat file with 1 million rows into SQL tables using SSIS
希望有所帮助。