【问题标题】:Can we access user variable in query of Source in DFT?我们可以在 DFT 中的 Source 查询中访问用户变量吗?
【发布时间】:2012-08-21 09:14:09
【问题描述】:

我正在优化数据流任务。我 Ado.Net 源触发如下查询。

Select Emp_id, EmpName, Salary from Employee.

在源之后,我对派生列进行了转换,其中添加了带有用户变量值@[User::TestVariable].的派生列

现在我猜这个派生列转换至少需要一些时间,所以我想知道是否可以通过在源代码中执行以下操作来节省时间。

Select Emp_id, EmpName, Salary, DerivColumn as @[User::TestVariable]
 from Employee

有可能做这种事情吗?如果是怎么办?

以上是 DFT,我正在研究如何找出哪个组件花费了多少时间,因此我可以寻求优化。

【问题讨论】:

    标签: sql ssis dft user-variables


    【解决方案1】:

    您可以在 ADO.NET Source 中使用该变量。

    1.在DFT任务的属性窗口中点击表达式属性,选择ADO.NET Source SQL Command

    1. 在表达式中写下你的 SQL 查询

      Select LoginId,JobTitle," + (DT_WSTR,10) @[User::TestVariable] + " as DerivedColumn
      from HumanResources.Employee"
      

    我认为您的派生列不会增加任何开销,因为它是一个非阻塞组件(bt 有一些例外)

    为了求单个组件的速度,

    1.计算包的整体执行时间,可以在执行结果选项卡中找到

      Overall Execution Speed = Source Speed + Transformation Speed
    

    2.删除派生组件并将源连接到行转换。现在再次查看执行时间。这将为您提供源速度。

    1. Overall Execution Speed - Source Speed = Transformation Speed
      

    SSIS 是一个内存管道,因此它的所有转换都发生在内存中。它严重依赖缓冲区。在您的情况下,SSIS 缓冲区龋齿 196,602 行。此值由 2 个属性控制 DefaultMaxBufferRowsDefaultMaxBufferSize.MaximumBufferSize 为 100MB。现在您需要通过计算表中的列大小来计算估计的行大小。假设添加数据类型长度约为 40 个字节,那么 196,602 行的字节数为

      196,602*40=7864080 ~ 7MB
    

    这小于 DefaultMaxBufferSize 10MB。您可以尝试增加 DefaultMaxBufferRows 以提高速度。但是在得出结论之前您需要再次进行所有性能测试。 我建议您阅读this 文章以全面了解 SSIS 性能

    【讨论】:

      【解决方案2】:

      所以您希望将一个新列添加到您的数据集中,该列具有一个固定值(包含在 @[User::TestVariable] 上),以便稍后在目标上插入,对吧?不,你不能做你想做的事情,因为范围是数据库(你执行查询的地方)并且变量在包上。

      您确定这个派生列操作需要那么长时间吗?它不应该。如果是,您可以使用执行 SQL 任务将数据库上的这个值插入到临时表中,然后在查询中使用它

      declare @aux int
      select @aux = your_config_column from your_temp_table
      
      Select Emp_id, EmpName, Salary, @aux as DerivColumn 
      from Employee
      

      这是一种混乱的解决方案,但如果派生列真的需要那么长时间,那么它是值得的

      【讨论】:

      • 对不起,我不明白,您是否尝试实施我的解决方案?
      • 你可以按照发帖者的要求去做,只是不像他尝试的那样简单。但这就是他问这个问题的原因。您可以按照@Praveen 提到的方式进行操作,也可以将 oledb 与查询一起用作变量。
      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2011-03-20
      • 2011-07-10
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      相关资源
      最近更新 更多