SSIS - 派生列与选择表达式

时间:2014-02-06 17:36:14

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

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

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

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

在性能方面哪个选项更好?

3 个答案:

答案 0 :(得分:2)

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

源查询中的getdate / current_timestamp将被评估一次。因此,您的myDate值对于整个数据集将保持不变。也许这对你的应用来说是正确的,也许不是。

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

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

答案 1 :(得分:0)

在数据库上执行此操作会更好,因为您不必使用内存为数据流中的每一行创建新列。

答案 2 :(得分:0)

我认为如果你在select语句中而不是在ssis中的派生列中这样做会更好。