如果我可以使用存储过程执行所需的ETL要求,那么使用SSIS包的任何优点是什么?我的ETL东西并不重要.
我觉得使用旧技术.我喜欢SQL.旧技术不等于过时,因为存储过程不会很快消失.
如果你的ETL主要是E和L,只有很少的T,如果你可以写你的SP而不依赖游标,那么去SP的路线可能就好了.
对于更复杂的流程,特别是那些涉及重型变换,缓慢变化的维度,数据挖掘查找等的流程,SSIS有三个优点.
首先,它非常有效地管理内存,与单独的T-SQL相比,这可以带来很大的性能提升.
其次,图形界面使您可以比手工制作的T-SQL更轻松地构建大型,复杂和可靠的转换.
第三,SSIS让您可以更轻松地与其他外部资源进行交互,这对于数据清理等事情非常方便.
我已经在存储过程ETL的土地上生活了一个多TB的SQL Server数据仓库.这个决定是在2001年当.NET为1.0时做出的,所以VB6是编程语言的替代品,而SSIS还没有 - 它是DTS.我可以告诉你,有任何优点和缺点.
一些考虑:
如果团队中的每个人都理解SQL,那么很容易深入了解存储过程.SQL是一项众所周知的技能,如果你有很多ETL编写者/读者,这可能是一个好处.您必须不仅仅是SSIS的临时用户才能理解它正在做什么.高级图形流程对于文档很有用,但如果有人需要深入了解,那么他们就能更好地了解SSIS.
SQL是一种模块化的痛苦.如果使用UDF,则会产生巨大的性能损失.您将在多个地方编写类似的代码并且您会讨厌自己这样做,但通常在ETL场景中,性能是王道.SSIS将帮助您模块化和分解您的任务.
不要指望能够轻松地使用SSIS进行源代码控制.SQL - 没问题.SSIS使用可以检入的糟糕的XML文件,但是好运与以前的版本不同,以查看更改的内容和时间.
您需要以模块化的方式考虑您的SP,即使很难将它们视为您想要的模块化.使用临时表来处理您的处理.在使用它们之前将索引放在这些临时表上.不要试图一次做太多.评论一切.
如果你正在使用游标,那你做错了.不要害怕链接你用你选择的语言写的一些外部控制台应用程序来做一些事情,而SQL并没有被删除.
顺便说一句 - 在我离开那家公司之后,他们最终将数据库从SQL 2000升级到2008并慢慢从存储过程转移到SSIS.在我的新公司,我们拥有SSIS,但在使用它之后,我们都同意我们的自定义编写的.NET ETL更适合我们的目的.每个人都走自己的路.决策必须平衡维护和绩效以及团队的技能和您所在地区的工作池技能.
我正在摆脱我们的SSIS包和使用存储过程.对我们来说,存储过程非常好:1)它们更容易维护,我们不需要出价,不需要创建项目并将包导入到出价中,因此用于简单存储过程更改的步骤更少.2)我们当前的所有软件包基本上都会截断表中的数据,然后使用直接映射从同一服务器上的其他几个表重新填充.非常容易插入/选择要编写的SQL.3)他们跑得快得多.我们没有游标,没有循环结构,只是直接的SQL.4)我们不必花费所有时间右键单击并在小型出价窗口中尝试遵循逻辑流程.我们都知道基本的TSQL,这对我们的任务来说已经足够了.
我会说这取决于你在做什么.但是,根据我的经验,SSIS包的改进空间是巨大的.当我们采用一些重要的存储过程并将它们放入SSIS包中时,我们在数据仓库环境中看到了10倍的改进.SSIS的内存利用率(在这种情况下无论如何)都有所不同.
我想重申一点,知道你在做什么很重要.例如,当数据转换在同一服务器上是一对一表时,SQL语句通常会胜过SSIS数据流.
最好选择一两个SP并在SSIS中创建它们并对它们进行测试.
似乎所有SQL问题的答案都是从,它取决于......