【问题标题】:Does adding simple script tasks to SSIS packages drastically reduce performance?向 SSIS 包添加简单的脚本任务会显着降低性能吗?
【发布时间】:2020-10-24 20:30:30
【问题描述】:

我正在创建一个 SSIS 包以将 CSV 文件数据导入 SQL Server 表。 CSV 文件中的某些行会有缺失值。

例如,如果一行的格式为:value1,value2,value3,而 value2 缺失, 那么它将在 csv 文件中呈现为:value1,,value3

当在我的 SSIS 包中发生上述情况(缺少 value2)时,我希望 NULL 进入将保存 value2 的接收 SQL Server 列。

我知道我可以在我的 SSIS 包中添加一个“脚本”任务来应用此规则。但是,我担心这会大大降低我的 SSIS 包的性能。我不是 SSIS/SQL Server 内部工作的专家,但我担心这个脚本会导致我的脚本失去“BULK INSERT”功能(和其他效率),因为脚本必须检查每一行和根据需要应用更改。

谁能确认添加这样的脚本是否会对性能产生重大影响?或者 SSIS/SQL-Server 引擎是否在每一行上运行脚本然后批量插入?是否有其他方法可以应用此规则而不会影响性能?

【问题讨论】:

    标签: sql-server database ssis etl


    【解决方案1】:

    首先,您可以在需要时使用脚本任务。对于整个包的每次执行,脚本任务将只执行一次,而不是每一行。对于每一行,都有另一个称为脚本组件的组件。当其他常规 SSIS 任务不足以实现您想要的时,您当然可以使用脚本组件。我不相信它是性能杀手,除非你实施得不好。

    其次,这个特殊要求您可以简单地使用平面文件源任务来导入您的 csv 文件。当没有值时,它会将值设为 NULL。我正在考虑这是一个有效的 csv 值,并且每行的每个字段(总字段 - 实际上 1 个)都有正确数量的逗号,即使某些字段的值为空或 null。

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 2019-08-09
      • 2011-04-26
      • 2011-02-06
      相关资源
      最近更新 更多