8

我在一个内部开发小组的 QA 部门。我们的生产数据库程序员一直在构建一个 SSIS 包,以从各种数据库位创建加载文件,以导入第三方应用程序(我们正在测试与此的集成)。

构建完成后,很快发现它依赖于创建它的 SQL Server 和 Visual Studio 的版本,并且对生产环境的依赖也很少(这不是 SSIS 问题,只是描述性质我们的设置)。

构建这个需要几天的扎实努力,然后无法在我们的 QA 环境下运行。

在向该团队询问他们的包正在运行的 SQL 查询之后(它在生产环境中运行良好),我编写了一个 python 脚本来执行相同的任务而没有任何依赖关系。我花了两个多小时(请注意,我已经有一个自定义库来处理我们的数据库交互),并且我能够写出我需要的 UTF-16LE 文件。

现在,我们的生产数据库程序员不是 SSIS 专家,但他们在工作流程中相当多地使用它——我很乐意称他们所有人都胜任他们的职位。

因此,我的问题是——考虑到它似乎花费的时间以及对 SQL Server 和 Visual Studio 版本的依赖关系,SSIS 包带来了哪些我的 python 代码可能看不到的优势或好处?或者是一个 shell 脚本,或者 Ruby 或者 code-flavor-of-the-moment?

4

1 回答 1

11

无论如何,我都不是 SSIS 方面的专家,而是一个普通的开发人员,有三年多一点的 SSIS 工作经验。像任何其他软件一样,SSIS 也有缺点,但到目前为止,我很喜欢使用 SSIS。技术的选择取决于个人的要求和偏好。我不会说 SSIS 优于其他技术。另外,我没有使用过您提到的 Python、Ruby 或其他技术。

这是我的两分钱。请把这个和一粒盐一起吃。

  1. 从普通开发人员的角度来看,一旦您了解了如何处理它的细微差别,SSIS 就很容易使用。我相信任何其他技术也是如此。SSIS 包是可视化的工作流程,而不是编码工具(当然,SSIS 也具有出色的编码能力)。人们可以通过查看工作流程而不是通过数百行代码轻松了解包中发生的事情。

  2. SSIS 主要用于执行 ETL(提取、转换、加载)作业。它可以很好地处理该功能,尤其是 SQL Server,更不用说它还可以处理平面文件、DB2、Oracle 和其他数据源。

  3. 您可以使用最少的编码或无需编码来执行大多数任务。它可以在几分钟内将数百万行从一个数据源加载到另一个数据源。请参阅此示例,该示例演示了一个包,该包可在3 分钟内将一百万行从制表符分隔的文件加载到 SQL Server 中。

  4. Logging捕获包及其任务执行的每个操作的能力。它有助于查明错误或跟踪有关包执行的操作的信息。这不需要编码。有关日志记录,请参见此示例

  5. Check Points帮助像记录器一样捕获包执行,并帮助从故障点重新启动包执行,而不是从头开始运行包。

  6. Expressions可用于根据给定条件确定包流。

  7. Package configurations可以使用数据库或基于 XML 的dtsconfig文件或基于机器的环境变量为不同的环境设置。有关基于环境变量的配置,请参阅此示例。第 4 点 - 第 7 点是开箱即用的功能,需要少量配置并且根本不需要编码。

  8. SSIS 可以利用 .NET 框架功能,如果开发人员找不到满足其要求的组件,他们也可以创建自己的自定义组件。请参阅此示例以了解如何最好地将 .NET 编码与不同的数据源一起使用。这个例子是在不到3 hours.

  9. SSIS 可以使用相同的数据源进行多次转换,而无需重新读取数据。请参阅此示例以了解多播的含义。下面是如何处理 XML 数据源的示例。

  10. SSIS 还可以轻松地与SSRS(报告服务)和SSAS(分析服务)集成。

我刚刚列出了我在 SSIS 中使用的非常基本的东西,但是有很多不错的功能。正如我之前提到的,我不确定 Python、Ruby 或其他语言是否可以如此轻松地处理这些任务。

这一切都归结为一个人对技术的舒适度。当技术是新技术时,人们非常怀疑并且不愿意适应它。

以我的经验,一旦你理解并接受了 SSIS,它确实是一种很好的技术。它与 SQL Server 配合得非常好。我不否认我在开发包的过程中遇到了障碍,但主要是找到了克服它们的方法。

这可能不是您所期望的答案,但我希望这能给您一个想法。

于 2011-06-08T20:01:51.640 回答