2011-04-13 75 views
0

我正在寫入2008年SSIS包中的平面文件目標。它的99.99%正常工作。但是,我在目標文件中獲得一個重複記錄。SSIS平面文件目標中的重複記錄

這裏是包的基本流程:
1.讀取的兩個ISO-8859-1編碼的文件和編碼它們的文本到UTF8在存儲器
2.合併兩個文件一起在存儲器並加載它們成查找高速緩存
3.從磁盤讀取
4.匹配從源文件的ID列中查找緩存
5.如果ID在查找高速緩存中的ID匹配的ID列中的另一源文件,將其寫入到匹配文件,如果ID不匹配將其寫入另一個文件

一切正常 從開始到結束。但是,我在匹配文件中得到了重複。我開始懷疑複製是由加入時查找緩存文本文件中的文件結尾(或其他)特殊字符引起的。這些文件是在UNIX系統上生成的(但我在閱讀時將它們編碼爲UTF8)。重複記錄每次都是相同的記錄。我如何避免重複(或找出重複的來源)?我無法使用刪除重複項,因爲目標中有合法的重複項。我一直試圖弄清楚這幾個星期。

+0

我目前的理論是,SSIS查找緩存不能處理來自平面文件源的超過250,000條記錄。我認爲它需要再次從源代碼中讀取(或者沿着這些代碼行),並且在執行此操作時會生成一個副本。我通過刪除源文件中的重複行來測試了這一點。然後我得到另一個重複的記錄。然後我把總行數減少到約25萬,並且我沒有得到任何重複。我已經運行了大約10次的流程,並且沒有收到少於250,000條源記錄的重複項。 還有其他建議嗎? – 2011-04-15 15:39:01

回答

1

我想出了這個問題。在閱讀消除該行的源時,我沒有將字段設置爲空字符串。然後,該行被匹配到查找變換中的一個隨機行,並繼續並寫入目標。

1

首先將數據放入登臺表,您可以查詢的表。也許你可以看到如何聯合起來獲得重複。另外,如果你有有效的opnes,你怎麼知道這是一個無效的重複?是什麼使它無效?

+0

良好的解決方案HLGEM。作爲第一步,我發現將數據放入臨時表中會有所幫助。登臺表具有所有VARCHAR/NVARCHAR列。如果進一步處理數據類型轉換或重複出現問題,通過針對臨時表運行正常的SQL語句很容易發現。 – thomasswilliams 2011-04-13 22:57:44

+0

感謝您的回答。寫入表格不是一種選擇。我沒有能力創建測試表。我一直在寫文件來檢查結果。我知道重複是無效的,原因有兩個。首先,這是舊的大型機進程沒有的額外記錄。此外,源文件中有103個ID和我的新文件中有104個ID。 – 2011-04-14 15:48:08