2017-03-08 58 views
2

我使用SQL Server 2016,我有一個非常繁忙的DataFlow task。在我的DataFlow task中,出於某種原因我使用了Multicast component。在我的DataFlow中創建一個新的Flow之後,我需要刪除新流程中的一些列,因爲它們沒用。如何刪除SSIS中DataFlow任務中的列?

enter image description here

只是爲了瞭解更多信息,我需要做的,因爲我有我的流量超過200列,我需要不到10這些列。

如何刪除SSIS中DataFlow Task的列?

+0

您的目標只是爲了清理代碼或提高性能? –

+0

@MarkWojciechowicz:這兩個都是我的目標 –

回答

1

可以添加額外的組件。但是,這絕不會降低複雜性或提高性能。從邏輯上考慮,你需要添加一個額外的接口來維護。從性能上看,任何會消除列的東西意味着將一組行從一個緩衝區複製到另一個緩衝區。這稱爲異步轉換,最好描述爲herehere。你可以想象,複製行的效率比現在更新效率低。

下面是降低複雜性提出了一些建議,這將反過來提高性能:

  • 從源頭上減少列。如果您選擇以後未以任何方式使用 的列,請將其從查詢 中刪除或從源組件中取消選中它們。以這種方式刪除列將它們從緩衝區中刪除,這將佔用較少的內存。
  • 減少數據流中的組件數量。非常長的數據流很容易創建,難以測試,甚至難以維護。數據流期望工作單元,即從這裏到中間的一些數據流。這是數據流發光的地方,事實上,它們可以保護自己免受內存限制和最大線程數的複雜性影響。最好將工作分成單獨的數據流或存儲過程。例如,您可以將數據放入表中並讀取兩次,而不是使用多播。
  • 使用數據庫。 SSIS是一種編排工具,因爲它是一個數據移動工具。我經常發現,使用簡單的數據流到階段的數據,然後調用存儲過程到處理數據,總是超執行一個全功能的數據流。
  • 增加您寫入數據的次數。這完全違背了直覺,但如果您使用較小的操作集處理數據,則運行速度更快,並且更易於測試。給定一個乾淨的標準,我會經常設計一個ETL,將數據從源代碼寫入臨時表,執行從階段表到另一個階段的清理步驟,可選地,添加一個符合步驟以將來自不同源的數據合併到另一個表中,最後,加載目標表的最後一步。請注意,每個源都被推送到其自己的目標表中,並在稍後進行組合,從而利用數據庫。第一步和最後一步設置爲快速運行,避免在任一端鎖定或阻塞。
  • Bulk Load。當你確保批量加載正在發生時,前面的步驟確實很好。這可能是一件棘手的事情,但通常你可以通過使用oledb命令在OLEDB目標中使用「快速加載」並通過從不使用。刪除索引並重新添加索引比加載更快(極少數情況除外)。

這些指導原則將使您在總體方向上取得領先,但是會針對特定性能問題發佈更多問題。

+0

坦克你和只有一個問題:你已經告訴「你可以將數據放到一個表中並讀兩遍,而不是使用多播,例如。」你認爲真的能夠將所有行插入到一個階段表中,並在另一個Dataflow中再次讀取它們,而不僅僅是隻有一個很長的數據流和很多列?或者,在一個數據流中將一組緩衝區複製到另一個緩衝區並不是更好,而不是將整個緩衝區插入到硬盤並只讀第二個字段? –

+1

一切都是個案,但如果你要求我盲目下注,我會說將數據寫入數據庫。在小部分工作中考慮。他們更容易測試和維護,通常也表現更好。這通常是因爲您可以利用數據庫進行優化,因爲您可以創建更好的並行工作流 –

1

我相信你只能通過一個數據流路徑到UNION ALL任務來從單個數據流中刪除列。

取出您希望從中刪除列並將其傳遞給Union All任務的單數據流路徑。然後打開Union All任務,右鍵單擊要從該路徑刪除的列,然後選擇刪除。

通常我認爲數據的來源應該改變,不要發送不需要的列,但你的情況是特殊的。有一條路徑需要來自源的所有列,而一條路徑則不需要。

1

首先,我不認爲你問會提供更好的性能,因爲數據從源加載再乘以使用Multicast時,然後The component that will reduce the column number ...

你可以這樣做多種方式:

  1. 如果你可以用一個減少列源創建另一個DataFlow Task(例如:用特定的列OLEDB命令)這是更好

  2. 可以使用異步輸出(如下面的圖像中示出)添加Script component和代表特定的列添加到輸出端,使用Vb.net或C#腳本映射它們,這樣的事情:

    Output0Buffer.AddRow() 
    Output0Budder.OutColumn = Row.inColumn 
    

enter image description here

  • 添加UNION ALL分量和選擇需要
  • 列3210

    側面說明:這是很好的測試場景的性能,並選擇某種更好