使用执行SQL任务对多个更新进行ssis优化

时间:2016-12-28 23:37:19

标签: sql ssis

我想知道是否有办法提高SSIS在单个表上执行更新的性能和速度。例如,我正在使用ETL目的的源和目标表。目标表在加载后具有执行SQL任务,该任务使用以下SQL替换NULLS

update DestinationTable
Set Column1 = "*Unknown*"
where Column1 is null

这被用于超过50列,但是由于表锁定在SSIS中并行执行速度很慢,按顺序执行它可能需要一段时间,因为它执行一个接一个的sql任务。反正有没有在SSIS中加速这个过程,以不同于我提到的那个方式做到这一点?谢谢

1 个答案:

答案 0 :(得分:3)

如果您想要的是性能,请不要使用您所描述的模式。请记住: E xtract, T 变形,然后 L oad。您所描述的是无序加载然后转换。那些“在加载转换后”意味着你用INSERTS和UPDATES对表进行征税。只需使用您想要的数据执行一次INSERT即可。

在OLE DB源组件的SELECT语句中进行NULL转换...

SELECT 
   Column1 = ISNULL(Column1,'*Unknown*'),
   Column2 = ISNULL(Column2,'*Unknown*'),
   Column3 = ISNULL(Column3,'*Unknown*')
FROM MyTable

或者 - 如果必须在SSIS中执行此操作 - 在OLE DB源和OLE DB目标组件之间添加派生列组件。在派生列组件内部,创建使用以下代码转换所有NULLS的新列。

ISNULL([Column1]) ? "*Unknown*" : [Column1]

ISNULL([Column2]) ? "*Unknown*" : [Column2]

ISNULL([Column3]) ? "*Unknown*" : [Column3]

这两个选项都实现了同样的目标。在加载数据之前进行转换。

希望这会有所帮助并祝你好运!