【问题标题】:SSIS - Derived Column vs Select expressionSSIS - 派生列与选择表达式
【发布时间】:2014-02-07 02:25:31
【问题描述】:

在 DataFlow 中,假设我必须派生一个新列 myDate 并且值将是 GetDate() 或 sysdatetime(),无论如何... 我有两个选择: 在 Source OleDB 中添加此列,选择如下:

Select 
    col1, col2, ..., getDate() as myDate 
from myTable

或者我可以添加一个 SSIS“派生列”步骤并将我的 getDate() 表达式放在那里。

就性能而言,哪个选项更好?

【问题讨论】:

    标签: sql-server ssis data-mining data-warehouse dts


    【解决方案1】:

    这取决于。在查询中使用 GetDate()/current_timsetamp 与在派生列中使用它之间存在细微差别。

    源查询中的 getdate/current_timestamp 将被评估一次。因此,对于整个数据集,您的 myDate 值将是恒定的。也许这对您的应用程序是正确的,也许不是。

    在派生列中使用表达式 getdate 将每 N 个间隔进行一次评估。对于大量进口,您的价值可能会出现相当大的漂移。也就是说,提交的第一行有2014-02-06T11:46:00.000,而最后一行有2014-02-06T15:21:19.762 同样,这是否是更理想的行为取决于您和您的应用程序。它使我必须编写的查询变得复杂,以关联我们 DW 中的导入行为,因为我们只能根据日期关联导入活动。

    如果您希望使用派生列但具有一致的参考点,请使用一些 System 命名空间变量。我们经常使用@[System::StartTime],但@[System::ContainerStartTime] 会提供与数据流开始更密切相关的开始时间。

    【讨论】:

      【解决方案2】:

      在数据库上做会更好,因为您不必用尽内存来为数据流中的每一行创建一个新列。

      【讨论】:

        【解决方案3】:

        我认为最好在 select 语句中执行此操作,而不是在 ssis 中的派生列中执行此操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多