2015-05-29 58 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