SSIS 中的聚合转换与排序(删除重复项)

Aggregate Transformation vs Sort (remove Duplicate) in SSIS

我正在尝试定期填充维度表,我想到了两种为我的维度获取不同值的方法:

  1. 使用聚合转换,然后使用 "Group by" 操作。
  2. 在删除重复项时使用排序转换。

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

我尝试使用虚拟数据执行一些测试,但我无法得到可靠的答案。

P.S。从源代码中使用 SELECT DISTINCT 在这里不是一个选项。

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

我的第二个选择是 DISTINCT - 如果可能的话 - 因为这是在 SQL 中比在 SSIS 中更快解决的情况之一;但我知道那不是你的选择。

从那时起,您可能需要尝试其余选项。除了在 SSIS 中使用聚合或排序之外,您还可以将结果转储到暂存 table,然后在其源查询中使用 DISTINCT 的单独数据流。聚合和排序都是 SSIS 中的阻塞事务,因此使用分段 table 最终可能会更快 - 但对您来说最快的速度取决于许多因素,包括数据的性质以及您的数据的性质基础设施。如果您使用 SSIS 选项,您可能还想记住还有什么是 运行 并行的,因为它们可能会占用大量内存。

如果您的数据在您的源或源查询中(或可以)排序,那么下面的 link 中还有一个聪明的想法,用于使用脚本创建 "semi-blocking" 版本的聚合和排序任务:

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