具有多个条件拆分组件的SSIS包中的性能

时间:2012-12-17 12:21:42

标签: sql ssis

我正在使用条件分割来验证数据并将错误数据发送到我的包中的备用路径。我的条件分割代码与此类似:

(性别!=“M”||性别!=“F”||性别!=“U”)== FALSE (性别==“M”||性别==“F”||性别==“U”)== TRUE

如果值为true,我将控制传递给另一个条件拆分,如果为false,我会将该行重定向到错误表。

我在一个软件包中使用了25个条件分割,我想知道从性能角度来看这是否是一件好事。与使用其他方法验证数据相比,使用条件分割的性能如何?

我添加了另一个场景,但它不适用于条件拆分。请查看以下信息

我只允许这种格式的日期值,这段时间'01 / 01/1753'到'12 / 31/9000'

我的条件

(Dob Varchar(10))

SUBSTRING(Dob,1,2)< =“12”&& SUBSTRING(Dob,4,2)< =“31”&& (SUBSTRING(Dob,7,4)> =“1753”|| SUBSTRING(Dob,7,4)< =“9000”)== TRUE

SUBSTRING(Dob,1,2)> “12”|| SUBSTRING(Dob,4,2)> “31”|| SUBSTRING(Dob,7,4)< “1753”|| SUBSTRING(Dob,7,4)> “9000”== FALSE

我的意见 - 12/32/1990,13/15 / 2000,12 / 31 / 2010,01 / 01 / 1753,12 / 31 / 9000,12 / 31 / 9001,01 / 01/9001 预期产出 - 12/31 / 2010,01 / 01 / 1753,12 / 31/9000

但是在我的条件下所有记录都被认为是假的。 请为此方案提供解决方案。

2 个答案:

答案 0 :(得分:3)

确定这一点的最佳方法是两次创建相同的包,一次以此方式验证,然后以另一种方式验证。通过右键单击包并从上下文菜单中选择“执行和可视化性能”,可以使用带有BIDS Helper的BIDS来运行每个包。完成此操作后,将结果作为答案发布,以便其他人可以从您的工作中受益!

答案 1 :(得分:3)

正如William Todd Salzman所指出的那样,测试是确定 包的最佳设置的唯一方法。然而,一般来说,尽管看起来反直觉,但您在特定组件中所做的越少,SSIS就越快。这样做的原因是SSIS引擎可以确定并行性的方式 - 如果它可以确定列B未在派生列1中进行操作,那么它可以安全地开始在派生列2中对该值进行更改。

根据您的方案,我将创建多个派生列转换来定义您的各种布尔检查。例如,我创建了一个字段,表明我们是否有这样的有效性别。

添加名为DFT IsGenderValid的派生列转换,我将其配置为

  • IsGenderValid
  • “添加为新列”
  • 性别!=“M”||性别!=“F”||性别!=“U”
  • DT_BOOL

如果除了我有一个位置来测试,纠正和维护逻辑之外没有其他原因,我会对布尔值进行条件性拆分转换。

重复此模式,以获得业务逻辑所需的尽可能多的验证。