0

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

(性别!=“M”||性别!=“F”||性别!=“U”)==错误(性别==“M”||性别==“F”||性别==“U” ) == 真

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

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

我添加了另一个场景,但它不能在条件拆分中工作。请找到以下信息

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

我的条件

(多布瓦查(10))

SUBSTRING(Dob,1,2) <= "12" && SUBSTRING(Dob,4,2) <= "31" && (SUBSTRING(Dob,7,4) >= "1753" || SUBSTRING(Dob,7, 4) <= "9000") == 真

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

但在我的条件下,所有记录都被认为是错误的。请给出这种情况的解决方案。

4

2 回答 2

3

正如威廉·托德·萨尔兹曼 (William Todd Salzman) 所指出的,测试是您确定包装的最佳设置的唯一方法。然而,一般来说,尽管看起来有悖常理,但您在特定组件中做的越少,SSIS 的速度就越快。原因是 SSIS 引擎可以确定并行性的方式 - 如果它可以确定列 B 未在派生列 1 中进行操作,那么它可以安全地开始更改派生列 2 中的该值。

鉴于您的情况,我希望创建多个派生列转换来定义您的各种布尔检查。例如,我会创建一个字段来指示我们是否有这样的有效性别。

添加一个名为的派生列转换DFT IsGenderValid,我将对其进行配置

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

如果没有其他原因,除了我有一个地方可以测试、更正和维护逻辑之外,我就会对布尔值进行条件拆分转换。

根据业务逻辑的需要重复此模式进行尽可能多的验证。

于 2012-12-17T15:16:47.667 回答
3

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

于 2012-12-17T14:16:42.253 回答