【问题标题】:Performance in an SSIS package with multiple Conditional Split Components具有多个条件拆分组件的 SSIS 包中的性能
【发布时间】:2012-12-24 19:55:31
【问题描述】:

我正在使用条件拆分来验证数据并将不良数据发送到我的包中的备用路径。我的条件拆分代码是这样的:

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

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

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

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

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

我的条件

(Dob Varchar(10))

SUBSTRING(Dob,1,2) = "1753" || SUBSTRING(Dob ,7,4)

SUBSTRING(Dob,1,2) > "12" || SUBSTRING(Dob,4,2) > "31" || 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

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

【问题讨论】:

  • 请在您的问题中提供更多细节 - 目前无法给您答案
  • 验证什么数据,以什么方式?你需要多少?什么会使性能可以接受?这个问题需要说明某种背景......
  • 例如,在条件拆分中 - 1.(Gender != "M" ||Gender != "F" ||Gender != "U") == FALSE 2.(Gender == " M" ||Gender == "F" ||Gender == "U") == TRUE 如果值为真,我必须检查另一个条件,否则我将移至错误表。
  • 我创建了一个包。我已经使用条件拆分验证数据,在这个包中我使用了 25 个条件拆分。这种性能好不好。我的朋友告诉我,它提高了更多的性能。任何身体引导我。

标签: sql ssis


【解决方案1】:

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

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

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

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

如果没有其他原因,我将在布尔值上进行条件拆分转换,除非我有 一个 地方来测试、更正和维护逻辑。

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

【讨论】:

  • 你能举个例子吗?如果条件匹配,如何在派生列中传递描述。如果性别不匹配,我将传递消息“Invalid Gender”。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多