我使用SQL Server 2016
,我有一個非常繁忙的DataFlow task
。在我的DataFlow task
中,出於某種原因我使用了Multicast component
。在我的DataFlow
中創建一個新的Flow之後,我需要刪除新流程中的一些列,因爲它們沒用。如何刪除SSIS中DataFlow任務中的列?
只是爲了瞭解更多信息,我需要做的,因爲我有我的流量超過200列,我需要不到10這些列。
如何刪除SSIS中DataFlow Task
的列?
我使用SQL Server 2016
,我有一個非常繁忙的DataFlow task
。在我的DataFlow task
中,出於某種原因我使用了Multicast component
。在我的DataFlow
中創建一個新的Flow之後,我需要刪除新流程中的一些列,因爲它們沒用。如何刪除SSIS中DataFlow任務中的列?
只是爲了瞭解更多信息,我需要做的,因爲我有我的流量超過200列,我需要不到10這些列。
如何刪除SSIS中DataFlow Task
的列?
您可以添加額外的組件。但是,這絕不會降低複雜性或提高性能。從邏輯上考慮,你需要添加一個額外的接口來維護。從性能上看,任何會消除列的東西意味着將一組行從一個緩衝區複製到另一個緩衝區。這稱爲異步轉換,最好描述爲here和here。你可以想象,複製行的效率比現在更新效率低。
下面是降低複雜性提出了一些建議,這將反過來提高性能:
這些指導原則將使您在總體方向上取得領先,但是會針對特定性能問題發佈更多問題。
坦克你和只有一個問題:你已經告訴「你可以將數據放到一個表中並讀兩遍,而不是使用多播,例如。」你認爲真的能夠將所有行插入到一個階段表中,並在另一個Dataflow中再次讀取它們,而不僅僅是隻有一個很長的數據流和很多列?或者,在一個數據流中將一組緩衝區複製到另一個緩衝區並不是更好,而不是將整個緩衝區插入到硬盤並只讀第二個字段? –
一切都是個案,但如果你要求我盲目下注,我會說將數據寫入數據庫。在小部分工作中考慮。他們更容易測試和維護,通常也表現更好。這通常是因爲您可以利用數據庫進行優化,因爲您可以創建更好的並行工作流 –
我相信你只能通過一個數據流路徑到UNION ALL
任務來從單個數據流中刪除列。
取出您希望從中刪除列並將其傳遞給Union All
任務的單數據流路徑。然後打開Union All
任務,右鍵單擊要從該路徑刪除的列,然後選擇刪除。
通常我認爲數據的來源應該改變,不要發送不需要的列,但你的情況是特殊的。有一條路徑需要來自源的所有列,而一條路徑則不需要。
首先,我不認爲你問會提供更好的性能,因爲數據從源加載再乘以使用Multicast
時,然後The component that will reduce the column number
...
你可以這樣做多種方式:
如果你可以用一個減少列源創建另一個DataFlow Task
(例如:用特定的列OLEDB命令)這是更好
可以使用異步輸出(如下面的圖像中示出)添加Script component
和代表特定的列添加到輸出端,使用Vb.net或C#腳本映射它們,這樣的事情:
Output0Buffer.AddRow()
Output0Budder.OutColumn = Row.inColumn
UNION ALL
分量和選擇需要側面說明:這是很好的測試場景的性能,並選擇某種更好
您的目標只是爲了清理代碼或提高性能? –
@MarkWojciechowicz:這兩個都是我的目標 –