在存储过程中使用SSIS包的优点?

时间:2009-11-20 21:49:10

标签: sql-server ssis

如果我可以使用存储过程执行所需的ETL要求,那么使用SSIS包的任何优点是什么?我的ETL没什么大不了的。

我觉得使用旧技术。我喜欢SQL。 旧技术不等于过时,因为存储过程不会很快消失。

12 个答案:

答案 0 :(得分:25)

我住在存储过程ETL的土地上,用于多TB的SQL Server数据仓库。这个决定是在2001年当.NET为1.0时做出的,所以VB6是编程语言的替代品,而SSIS还没有 - 它是DTS。我可以告诉你,有任何优点和缺点。

一些注意事项:

  1. 如果团队中的每个人都理解SQL,那么很容易深入了解存储过程。 SQL是一项众所周知的技能,如果你有很多ETL编写者/读者,这可能是一个好处。您必须不仅仅是SSIS的临时用户才能理解它正在做什么。高级图形流程对文档很有帮助,但是如果有人需要深入了解,那么他们就能更好地了解SSIS。
  2. SQL是模块化的痛苦。如果使用UDF,则会产生巨大的性能损失。您将在多个地方编写类似的代码并且您会讨厌自己这样做,但通常在ETL场景中,性能是王道。 SSIS将帮助您模块化和分解您的任务。
  3. 不要期望能够轻松地使用SSIS进行源代码控制。 SQL - 没问题。 SSIS使用了可以检入的糟糕的XML文件,但是好运与以前的版本不同,看看发生了什么变化以及何时发生了变化。
  4. 您需要以模块化的方式考虑您的SP,即使很难将它们视为您想要的模块化。使用临时表来处理您的处理。在使用它们之前将索引放在这些临时表上。不要试图一次做太多。评论一切。
  5. 如果您正在使用游标,那么您做错了。不要害怕链接你用你选择的语言编写的一些外部控制台应用程序来做一些事情,而SQL并没有被删除。
  6. BTW - 在我离开那家公司之后,他们最终将数据库从SQL 2000升级到2008,并慢慢从存储过程转移到SSIS。在我的新公司,我们拥有SSIS,但在使用它之后,我们都同意我们的自定义编写的.NET ETL更适合我们的目的。每个人都走自己的路。决定必须平衡维护和绩效与团队的技能和您所在地区的工作池技能。

答案 1 :(得分:6)

我正在摆脱我们的SSIS包并使用存储过程。对我们来说,存储过程非常好: 1)它们更容易维护,我们不需要出价,不需要创建项目并将包导入出价,到目前为止,简单存储过程更改的步骤更少。 2)我们当前的所有软件包基本上都会截断表中的数据,然后使用直接映射从同一服务器上的其他几个表重新填充。非常容易插入/选择要编写的SQL。 3)他们跑得快得多。我们没有游标,没有循环结构,只是直接的SQL。 4)我们不必花费所有时间右键单击并在小型出价窗口中尝试遵循逻辑流程。我们都知道基本的TSQL,这对我们的任务来说已经足够了。

答案 2 :(得分:5)

我想说这取决于你在做什么。但是,根据我的经验,SSIS包的改进空间是巨大的。当我们采用一些重要的存储过程并将它们放入SSIS包中时,我们在数据仓库环境中看到了10倍的改进。 SSIS的内存利用率(在这种情况下无论如何)都有所不同。

我想重申,知道自己在做什么很重要。例如,当数据转换在同一服务器上是一对一表时,SQL语句通常会胜过SSIS数据流。

最好选择一两个SP并在SSIS中创建它们并对它们进行测试。

似乎所有SQL问题的答案都是开头的,这取决于......

答案 3 :(得分:2)

我已经看到使用SSIS带来了一些令人瞩目的性能提升,如果你有使用链接服务器的存储过程,这是特别好的,因为这会使用更多的处理能力,链接的服务器往往会在限制行之前将整个表拉到内存中加入需要。我们有一个存储过程需要7个小时才能运行,我将其分解为每个服务器的数据,然后为SSIS中的每个服务器设置一个本地数据源,允许通过链接服务器对每个数据源进行本地处理,这项工作现在需要6分钟才能完成,我认为这是一个巨大的收获。

Caralyn

答案 4 :(得分:2)

我们采用组合方法来获得两个世界的最佳效果: 我们使用SSIS从外部源获取数据并将其并行加载到Staging数据库中 然后我们使用SSIS包来编排流水线并在控制流中触发适当的SP。

由于数据流难以管理/修改,并且没有任何显着优势,因此任何转换逻辑都无法进入SP: 1)修改和排除SP比包更容易 2)除了调用外部包之外,没有办法轻松地重用SSIS中的组件 3)SP的SVN差异工作,SSIS包的差异很糟糕:))

此外,我们使用SSIS并行运行SP以提升整体性能。

答案 5 :(得分:1)

我没有看到任何明显的技术限制。对于复杂的ETL操作,存储过程可能比SSIS包更难以遵循 - 但对于每个场景都不会如此。我还发现软件包(SSIS和DTS)更容易被识别为“作业” - 开发人员经常忽略由预定作业执行的存储过程,因为他们看不到预定的作业。

也就是说,我已经看到ETL由存储过程和DTS / SSIS包执行,只要存储过程不是一堆混乱的纠结代码似乎是合适的。我没有看到一种方法比另一种方法执行得更好或更可靠(但后来我没有看到执行复杂ETL的存储过程)。

答案 6 :(得分:1)

我在SSIS中尝试了一些功能,但我对所有功能都不满意。 我说数据流很不错,我对我看到的性能并不满意。 我最终做的是开发一个SSIS包,它有一个sql任务的控制流,每个包执行一个存储过程。

这确保了SQL服务器完成了E,T和L的大部分工作。我认为当你使用数据流组件时,数据实际上是从sql server移动到运行包的机器,这使得效率不高。

话虽如此,我想如果我不得不与第三方应用程序/数据库/ DW系统进行交互,我会尝试优化Dataflow的东西(自从我工作以来已经有一段时间了)。

答案 7 :(得分:1)

SSIS缺少一些基本功能,它没有Informatica类型包,允许使用SQL语句进行开发以对抗原始文本文件,SQL服务器严重缺乏像Oracle这样的错误记录DML。我真的认为当微软宣布添加Merge语句时,他们当然会实现错误桶,这是其最重要的功能之一,再次猜测。在行级别上处理错误很重要,如果您使用SQL语句添加批量数据,如果一个记录失败则回滚整个批次。

答案 8 :(得分:0)

  1. 性能将比普通sp快。不需要为检索数据创建复杂的临时表,Cursor,索引。

  2. 数据清理是SSIS的优势。

  3. 只能在ssis中进行增量处理。

  4. 我们可以创建包配置文件并将其部署到任何服务器。用户可以提供服务器详细信息和登录信息。

  5. 图形用户界面。

  6. 记录,错误处理最好在ssis。

答案 9 :(得分:0)

对于小项目,如果你有扎实的sql技能,并且了解业务需求,请继续!

否则,如果你将面临复杂的数据提取,繁重的转换任务。 SSIS或其他ETL工具就足够了。

欢呼声

答案 10 :(得分:0)

对于SQL服务器之间的数据传输,请在SP之上使用SSIS 如上所述,您可以轻松地面对10倍的改进 我们通过将SP嵌入到SSIS包中,从6-7小时的转移到更易于管理的时间框架

旁注:SSIS基本上是一堆XML文件,可以以不同的方式操作/使用(例如用于文档)

答案 11 :(得分:0)

自6.5版以来,我一直在使用SQL Server - 这已经很久了!根据我的经验,大多数ETL都很简单,T-SQL工作得很好,不仅有效,而且工作得非常好 - 快速,可靠,简单的结构化编程。我相信任何可以在SSIS中完成的事情都可以由知道他们正在做什么的人在T-SQL中完成。

根据我的经验,大多数重度支持SSIS的人都是缺乏经验的开发人员,他们使用图形工具长大,并且不知道如何编程。