程序员应该使用SSIS吗?如果是,为什么?[关闭]


94

作为.NET开发人员,由于什么原因我应该比编写代码更喜欢SSIS包?我目前正在工作的工厂中有大量的软件包,它们既是“编写”(也许是平局?)和维护的噩梦。每个程序包看起来像一碗五彩的意大利面条,在抽象分解点混合了C#和VB.NET脚本。为了弄清楚每个“ Execute SQL Task”或“ Foreach Loop”的作用,我必须双击该死的东西,并浏览散布在多个选项卡中的文字值和表达式树。

我态度开放,所以我想知道是否有其他优秀的开发人员发现SSIS比编写一些代码更有生产力。如果您发现SSIS更具生产力,请告诉我原因。


4
不知道它是如何做到的,但是SSIS比我为创建数据仓库编写的任何手动代码要快得多。这是为这项工作设计的工具-尝试将任务分解为从主软件包执行的子软件包
Shoubs先生,2010年

1
链接到一个类似的问题:stackoverflow.com/q/690123/327165
Ilya Berdichevsky

5
刚遇到这个。我正在努力维护一些有问题的SSIS软件包,并编写了一个反编译器以将有用的工作从中提取到C#程序中。 code.google.com/p/csharp-dessist
泰德·斯彭斯

5
根据我的经验,如果您有“长”和/或“复杂”的摘要或许多脚本,SSIS可能会很痛苦。调试控制台应用程序更容易。在SSIS中,您不能自行调试脚本。由于脚本而产生的错误消息是不明确的,您无法看到导致错误的确切行。IMO,如果可以通过标准的SSIS组件满足项目需求,那么SSIS可能是可行的方法。但是,为此,您需要了解SSIS组件的局限性。Eg.This视频节目,你为什么“发送邮件任务”几乎是无用的- youtube.com/watch?v=IlUzkMPYDSk
蒸汽

3
这个问题有7个答案,因此没有征求辩论,争论,民意调查或延伸讨论。为什么不打开它呢?
Michael Freidgeim

Answers:


94

我每天都使用SSIS来维护和管理大型数据仓库和多维数据集。我从事商务智能和数据仓库工作已经两年了100%。在此之前,我是10的.NET应用程序开发人员。

SSIS的价值在于它是一种工作流引擎,可以将数据从一个位置移动到另一个位置,并且在此过程中可能会有一些有限的转换和条件分支。如果您的程序包包含大量脚本,则说明您的团队正在使用SSIS执行错误的任务,或者对SQL不满意或被炒作了。SSIS包很难调试。脚本组件绝对是一场噩梦,应仅用于格式化,循环播放或作为不得已的手段使用。

  1. 使您的程序包保持简单,sql任务和数据流任务。
  2. 在SSIS之外做尽可能多的工作,最好在SQL中做
  3. 将变量保持在单个全局范围内
  4. 将SQL保留在变量或存储过程中,永远不要内联
  5. 将变量值保存在配置存储中,最好是SQL数据库

1
有了SSIS带来的麻烦,我会给出一个更加偏颇的答案(好像您无法从我的问题的语调中看出来:))。很好的答案,凯文。
查尔斯

6
如果.NET于2002年发布,您如何使用它十年了?
布雷迪·霍尔特 Brady Holt)2012年

7
Microsoft于1990年代后期开始在.NET Framework上进行开发,最初是以“下一代Windows服务(NGWS)”的名称进行的。到2000年末,.NET 1.0的第一个beta版本已经发布[/ quote],这就是他可能正在使用Beta的原因。
nitefrog

该问题在2010年得到了回答,因此请删除两年的BI,然后再减去10,即1998,也就是您提到的Beta版本发布的两年。否则,好的答案!:)
finoutlook 2012年

是的,全局范围是有意义的。如果您将其设置为本地,并希望在其他地方访问它,那么您将遇到问题。您不能简单地将本地范围更改为全局范围。您必须点击很多,然后将其删除。如果您甚至有10-15个本地人,这将很痛苦。
Steam

52

我尝试了几次使用SSIS,并放弃了。IMO可以轻松完成我在C#中要做的所有事情。SSIS太复杂了,它有太多陷阱,这是不值得的。花更多的时间在提高C#技能上比花更多的时间在学习SSIS上要好得多-您将获得更多的培训回报。

在VS解决方案中查找和维护功能也非常容易。使用VS进行单元测试很容易。我需要做的就是在Subversion中签入源代码,并验证其加载方式。温和地说,单元测试SSIS包非常复杂。

此外,在某些情况下,SSIS默默地未能填充某些行中的某些列,只是跳过它们而没有引发异常。我们花了很多时间进行故障排除并弄清楚发生了什么。用C#开发替代解决方案用了不到一个小时的时间,并且两年来都没有出现问题。


感谢您的观点,Alex。这里是什么,我觉得可能是一个疑难杂症的例子- stackoverflow.com/questions/21616435/...
Steam

2
是否有ETL开发人员必须知道的所有C#/编程主题的列表?例如。LINQ,SqlDataReader,DataTable等。我也觉得SSIS不适用于复杂的任务。如果您有一个简单的“复制粘贴”项目/任务,那么SSIS可能是最好的工具。
Steam

@blasto您是否尝试过Rhino ETL:ayende.com/blog/3102/rhino-etl-2-0
AK

Alex,Jerome的回答还建议使用Rhino ETL。对我来说似乎晦涩难懂。因此,由于缺乏文档,支持和教程,我会犹豫使用它。此外,似乎只有一名开发人员正在从事此工作。这降低了我对该工具的信心。我会出于娱乐目的或出于好奇而尝试此方法,但是我不能将其用于实际项目。谢谢。
Steam

如果有人想要有关Rhino ETL(使用纯C#)的教程,这里是一个-codeproject.com/Articles/34556/Write-ETL-jobs-in-pure-C
Steam

14

我认为-SSIS仅用于ETL操作,并且不应包含超出该范围的逻辑。


8
ETL =提取变换负载
Christoph

3
那就是我的感觉。在我们的案例中,我们正在使用SSIS进行包含定价信息的电子邮件(或SFTP)CSV之类的操作。分支,嵌入式脚本等非常可怕。如果只是使用SSIS移动一些数据,那可能还不错。
查尔斯

1
我认为您的答案可能会更深入。
Steam

3
ETL中的T可以不包含某些逻辑吗?只是一个想法...
cs0815

如果仅与整形/路由数据有关,请确定。但是我会避免任何业务逻辑。
Christoph

11

我曾在一个项目上工作过,这很不幸,我们认为SSIS是一个很好的解决方案,可以汇总和合并来自多个来源的数据。不幸的是,起初效果很好,但随后需求发生了变化,我们(最终)意识到这是错误的工具。

也许我们只是错误地使用了它,但是如果我们更改了架构,就会遇到很多困难,最终我们只是从前端重用我们的ORM定义,以C#编写自定义工具来执行此操作。因为我们已经有了数据模型,所以这非常容易。显然,YMMV和我绝不是SSIS专家,但是在这种情况下,SSIS只是卷起袖子并“手工编码”而引起许多重复的工作和令人头疼的事情,这比预期的要容易。

因此,在考虑SSIS时,我会考虑很多灵活性。


7
我也有同样的感觉。重构代码很容易,而可视DSL则不那么多。
查尔斯

卢克,能否请您概述一下您的项目要求?谢谢。
Steam

@blasto,我们试图集成来自多个数据库的数据,并使用一些内置的概率字符串匹配实用程序来合并来自不同系统(本质上是CRM数据库)的数据。那是5年前,所以我不记得所有的细节了。
luke 2014年

如果您是.net商店并且参与为数据仓库目的而移动数据,则SSIS仅在您足够了解的情况下为您提供帮助。我见过很多人都是.net专家,但不能完全理解SSIS(我不怪他们)。SSIS肯定需要一个非常了解它的人,否则您将最终写出效率低下且做不到正确事情的软件包。
rvphx

6

SSIS有它的位置,该位置不是通用编程或存储过程的替代品。它来自ETL学派(提取,转换和加载),这就是它的强大之处。

旧名称(DTS,数据转换服务)和新名称(SSIS,SQL Server集成服务)都清楚地表明这是一种旨在处理数据以将SQL Server数据库集成到更大进程中的服务(或一组服务)。


我不知道这个答案应该如何获得如此多的赞誉。它没有提及SSIS为什么不能赋予您编程语言强大的功能。对我来说完全是无稽之谈。SSIS无法匹配编程语言的一个示例是调试。显然,SSIS 2012改变了这一点。因此,该工具可能正变得越来越对程序员更友好。
Steam

>> SSIS无法匹配编程语言的一个示例...我同意-它不是编程语言。这是一个不错的ETL工具。
DaveE 2014年

4

如果要以编程方式移动数据,则可能需要查看Rhino ETL。

我还在自己的框架Fluent ETL上工作,因为我发现SSIS对于与开发相关的简单数据任务过于投入,例如从CSV文件加载单元测试数据。


Rhino ETL尚不清楚,到目前为止,关于SO仅有24个问题-stackoverflow.com/questions/tagged/rhino-etl。我认为,如果您具有知识和经验,那么C#对于ETL就足够了。
Steam

1
Rhino ETL是否有任何流行的替代方法?
Steam

3

SSIS不是程序。在SSIS中,很多设计工作都变得更快,并且您以admin的身份获得了非常详细的进度和错误信息-在SSIS打算解决的情况下,这非常好,因为有时会出问题并且admin需要很多信息。

话虽如此,如果您没有自我规划的东西,那么SSIS并没有那么有用-它们是为某些目的而准备的,过多地参与常规编程会使它们变得很无聊。


2
您能否举一个例子说明SSIS如何在一种情况下加快开发而在另一种情况下慢呢?
Steam
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.