SSIS:执行 SQL 任务与数据流任务
SSIS: Execute SQL Task vs Data Flow Task
我是 SSIS 新手。当所有数据库都在 SQL 服务器上时,是否可以不使用数据流任务(以及数据流选项卡)并使用 ETL 过程的“执行 SQL 任务”来完成所有操作?
也就是说,是否可以使用“控制流选项卡”中的“执行 SQL 任务”来做所有事情 (ETL)?
我不明白为什么我应该使用“数据流任务”和“数据流选项卡”,而我可以使用“执行 SQL 任务”来完成所有事情。
与大多数问题一样,这里的答案很明确,“视情况而定。”
如果您的所有数据都在 SQL 服务器中,并且所有数据库都在同一台服务器上(并且在可预见的未来很可能会保持这种状态),那么不,您不需要根本不需要使用数据流任务。但是,正如评论中指出的那样,如果是这种情况,您实际上也根本不需要 SSIS。在一台服务器上,您可以使用存储过程完成所有事情,通过 SQL 代理作业进行编排。
另一方面,如果您从多个服务器访问数据,比如源系统和仓库系统,或者生产服务器和报告环境,或者从不同的平面文件导入数据,那么 SSIS 提供了一个将数据从服务器 A 移动到服务器 B 的相当简单的路线。无需担心链接服务器,而且通常比链接服务器具有更好的性能。即使设置了适度高级的 SSIS 程序包,您也可以添加参数,从而可以灵活地将数据库从一台服务器移动到另一台服务器,而无需更改代码。
成熟的 SSIS 框架(或任何 ETL 工具集,真的)可以使您的 ETL 代码与服务器和数据库体系结构的绑定不那么紧密,并且对其中任何一个的更改都更容易执行,而不会对另一个产生负面影响。
虽然我同意所说的内容,但我觉得这个讨论遗漏了一些重要的考虑因素。 (仅供参考...这是使用 SSIS 开发和支持企业 DW 的十年,以及使用其他几种 ETL 工具的十年)。
首先,让我们考虑一下它们的作用...数据流充分发挥了任何 SSIS 数据流工具集的潜力,其中包含大量工具和附加组件(例如数据类型转换、并行 BDD 等)。 SqlTask 只是 运行s TSQL 给你 - 意思是任何感觉编码到内联 SQL 或 运行ning 存储过程。对于该任务,您只是将 SSIS 用作调用程序,仅此而已。
数据流可以让您了解 ETL 处理的位置。嗯,这不是您首先使用 ETL 工具的“原因”吗?想想看。这就是图形洞察力和标准化。否则,只需编写大量存储过程的代码,然后就可以搞定了。依靠技术债务和工作保障。但数据流不仅使其图形化,为下一个支持人员创建一些标准界面,而且还向您展示数据流动而不是坐在那里旋转直到完成。如果您使用 运行 宁动态代码并将其存储在数据流的变量中,您可以看到 SQL 即 运行。那是巨大的。然后是 SSIS 对数据流执行的元数据检查,以在事情发生变化时告诉您。如果元数据更改,SqlTask 可能会崩溃。
如果您使用的是 BiXpress(没有它我永远不会使用 SSIS,如果您不使用 BiXpress 问问自己,“为什么不呢?!”...有很多Bixpress 的好处 - 如果有问题,请给我发电子邮件......不,我不是顾问)。
所以就像所有 IT 事物一样,就像所说的那样,这取决于。如果我在同一个数据库上,我仍然使用 SqlTasks 从 A 点移动到 B 点,并且事实证明它明显更快。我更喜欢数据流而不是硬编码 insert/selects 但有时性能只需要一个简单的 insert/select.
注意我说的是数据库而不是服务器。欢迎大家使用云……如果您使用 Azure SQL 或 Synapse DW 或 SQL 托管实例,您基本上包含在单个数据库中。如果您还没有到达那里,那么请继续前进并表现得像您在那里一样,这样您就不会在迁移时造成问题。
我是 SSIS 新手。当所有数据库都在 SQL 服务器上时,是否可以不使用数据流任务(以及数据流选项卡)并使用 ETL 过程的“执行 SQL 任务”来完成所有操作?
也就是说,是否可以使用“控制流选项卡”中的“执行 SQL 任务”来做所有事情 (ETL)?
我不明白为什么我应该使用“数据流任务”和“数据流选项卡”,而我可以使用“执行 SQL 任务”来完成所有事情。
与大多数问题一样,这里的答案很明确,“视情况而定。”
如果您的所有数据都在 SQL 服务器中,并且所有数据库都在同一台服务器上(并且在可预见的未来很可能会保持这种状态),那么不,您不需要根本不需要使用数据流任务。但是,正如评论中指出的那样,如果是这种情况,您实际上也根本不需要 SSIS。在一台服务器上,您可以使用存储过程完成所有事情,通过 SQL 代理作业进行编排。
另一方面,如果您从多个服务器访问数据,比如源系统和仓库系统,或者生产服务器和报告环境,或者从不同的平面文件导入数据,那么 SSIS 提供了一个将数据从服务器 A 移动到服务器 B 的相当简单的路线。无需担心链接服务器,而且通常比链接服务器具有更好的性能。即使设置了适度高级的 SSIS 程序包,您也可以添加参数,从而可以灵活地将数据库从一台服务器移动到另一台服务器,而无需更改代码。
成熟的 SSIS 框架(或任何 ETL 工具集,真的)可以使您的 ETL 代码与服务器和数据库体系结构的绑定不那么紧密,并且对其中任何一个的更改都更容易执行,而不会对另一个产生负面影响。
虽然我同意所说的内容,但我觉得这个讨论遗漏了一些重要的考虑因素。 (仅供参考...这是使用 SSIS 开发和支持企业 DW 的十年,以及使用其他几种 ETL 工具的十年)。
首先,让我们考虑一下它们的作用...数据流充分发挥了任何 SSIS 数据流工具集的潜力,其中包含大量工具和附加组件(例如数据类型转换、并行 BDD 等)。 SqlTask 只是 运行s TSQL 给你 - 意思是任何感觉编码到内联 SQL 或 运行ning 存储过程。对于该任务,您只是将 SSIS 用作调用程序,仅此而已。
数据流可以让您了解 ETL 处理的位置。嗯,这不是您首先使用 ETL 工具的“原因”吗?想想看。这就是图形洞察力和标准化。否则,只需编写大量存储过程的代码,然后就可以搞定了。依靠技术债务和工作保障。但数据流不仅使其图形化,为下一个支持人员创建一些标准界面,而且还向您展示数据流动而不是坐在那里旋转直到完成。如果您使用 运行 宁动态代码并将其存储在数据流的变量中,您可以看到 SQL 即 运行。那是巨大的。然后是 SSIS 对数据流执行的元数据检查,以在事情发生变化时告诉您。如果元数据更改,SqlTask 可能会崩溃。
如果您使用的是 BiXpress(没有它我永远不会使用 SSIS,如果您不使用 BiXpress 问问自己,“为什么不呢?!”...有很多Bixpress 的好处 - 如果有问题,请给我发电子邮件......不,我不是顾问)。
所以就像所有 IT 事物一样,就像所说的那样,这取决于。如果我在同一个数据库上,我仍然使用 SqlTasks 从 A 点移动到 B 点,并且事实证明它明显更快。我更喜欢数据流而不是硬编码 insert/selects 但有时性能只需要一个简单的 insert/select.
注意我说的是数据库而不是服务器。欢迎大家使用云……如果您使用 Azure SQL 或 Synapse DW 或 SQL 托管实例,您基本上包含在单个数据库中。如果您还没有到达那里,那么请继续前进并表现得像您在那里一样,这样您就不会在迁移时造成问题。