数据仓库——SSIS中的聚合转换vs排序(删除重复)



我试图定期填充维度表,我已经想到了两种方法来获得我的维度不同的值:

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

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

我试着用虚拟数据做了一些测试,但我不能得到一个确切的答案。

注:这里不能从源代码使用SELECT DISTINCT

如果可能的话,我的第一选择总是在我的源代码查询中纠正这个错误。我意识到这并不总是一种选择,但为了将来读者的完整性:我首先会检查源查询中是否存在创建重复的问题。每当DISTINCT看起来是必要的时候,我首先要看看查询是否真的有需要解决的问题。

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

从这个角度来看,您可能需要尝试剩下的选项。除了在SSIS中使用Aggregate或Sort之外,您还可以将结果转储到staging表中,然后拥有一个单独的数据流,该数据流在其源查询中使用DISTINCT。在SSIS中,聚合和排序都是阻塞事务的,因此使用staging表可能会更快——但是哪一个对您来说是最快的取决于许多因素,包括数据的性质,以及基础设施的性质。如果使用SSIS选项,您可能还需要记住并行运行的其他内容,因为它们可能非常占用内存。

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

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

最新更新