2015-05-29 40 views
1

我试图填充定期维表(删除重复的),我已经想到了让不同的值,我的尺寸的方法有两种:聚合转换VS排序在SSIS

  1. 使用聚合转换,然后使用“分组依据”操作。
  2. 使用排序转换,同时删除重复项。

我不确定哪一个更好(更高效),或哪个更广泛地被行业采用。

我试图使用虚拟数据执行一些测试,但我无法完全得到一个确切的答案。

P.S.从源头使用SELECT DISTINCT不是此处的选项。

回答

5

如果可能,我的第一个选择将始终是在源查询中更正此问题。我意识到这并不总是一种选择,但为了未来读者的完整性:我会首先检查我的源查询中是否存在创建重复项的问题。只要DISTINCT看起来有必要,我首先看看是否存在需要解决的查询的实际问题。

我的第二选择是DISTINCT - 如果可能的话 - 因为这是SQL中解析比在SSIS中更快的情况之一;但我意识到这不适合你。

从这一点来看,您正处于一种可能需要尝试其余选项的情况。除了使用SSIS中的聚合或排序之外,您还可以将结果转储到暂存表中,然后有一个单独的数据流,在其源查询中使用DISTINCT。聚合和排序都是阻止SSIS中的事务,因此使用临时表可能会更快 - 但最快的取决于许多因素,包括数据的性质以及基础结构的性质。如果您使用SSIS选项,您可能还想记住还有哪些并行运行,因为它们可能需要内存。

如果你的数据是(或可以)在源或源查询排序,再有就是还在下面的链接一个聪明的想法,用于创建聚合的“半阻塞”版本和排序使用脚本任务:

http://social.technet.microsoft.com/wiki/contents/articles/30703.ssis-implementing-a-faster-distinct-sort-or-aggregate-transformation.aspx

+0

这不是因为它是底层表中重复的问题,因为从源接收的数据的性质必须生成完整的行并且底层数据库必须非规范化。不过谢谢你的回复,这对我来说非常有用。 – LearnByReading

+1

我喜欢你引用的来源。其他人没有发布新的答案。谢谢! – LearnByReading