2017-03-16 47 views
3

這可能是一個愚蠢的問題,但我必須問,因爲我看到了很多...我已經繼承了很多包,其中開發人員將使用數據轉換轉換形狀時將平面文件轉儲到它們各自的sql服務器表中。這很簡單,但是我總是想知道爲什麼開發人員只是在平面文件連接中指定正確的數據類型,然後直接加載到表中?指定平面文件數據類型vs使用數據轉換

例如:

通常我將看到是DT_STR,然後轉換成包,即內的正確類型的列的平面文件的連接:長度爲50的DT_STRDT_I4到。但是,如果登臺表和平面文件基於相同的架構 - 爲什麼您不能在平面文件連接中指定正確的類型(DT_I4)?是否有任何額外的好處(性能,錯誤處理)使用我不知道的數據轉換任務?

回答

4

這是一個沒有一個正確答案的好問題。下面是我用的策略:

如果數據源不可靠

即有時int或日期值是字符串,當你有字面詞「NULL」,而不是被空白值等。我會讓數據源被視爲字符串並處理下游數據的轉換。

這可能意味着只需將表中的數據暫存並使用數據庫執行轉換並從那裏加載。這種模式避免了源組件拋出的錯誤,這對於排除故障總是非常棘手。而且,它避免了必須將錯誤處理添加到數據轉換組件中。

而是,如果數據庫引發轉換錯誤,則可以輕鬆查看暫存表中的數據來檢查問題。最後,SQL比ssis更能容忍日期轉換。

如果數據來源是可靠的

如果日期和數字始終日期和數字,我會定義的連接管理器的數據類型。這就清楚了你對文件的期望,並使組件更容易維護。

此外,如果你去到平面文件源的高級屬性,整數和日期可以設置爲快速分析,這將加快讀取時間:https://msdn.microsoft.com/en-us/library/8893ea9d-634c-4309-b52c-6337222dcb39?f=255&MSPPError=-2147217396

當我使用數據轉換

我很少使用數據轉換組件。但我發現它有用的一個案例是從/轉換爲unicode。例如,當從ado.net源文件讀取數據時,這可能是必要的,該源文件始終將輸入視爲unicode。

2

您可以在Advanced頁面的平面文件連接管理器中更改輸出數據類型,或者右鍵單擊Data flow,Advanced editor中的源以在加載之前更改數據類型。

我認爲其中一個好處就是conversion轉換可以讓你輸出額外的列,通常命名爲copy of ..,在某些情況下,你可能會同時使用兩列。此外,有時當你從Excel source加載數據,所有Unicode來了,你需要使用Data conversion做數據TF等

此外,僅供參考,你也可以使用TF Derived Column的數據類型轉換。

UPDATE [需要進一步確認]:

flat file source connection manager,字符串類型的最大長度是255,而在它Data Conversion可以設定在255

+0

但是,如果平面文件連接能夠從創建中指定正確的數據類型,爲什麼不使用該文件而不是轉換形狀或派生形狀,或者按照您的建議更改輸出數據類型? – 40Alpha

+0

正如我所說的,'數據轉換'將保留轉換前和轉換後的列,在特定情況下,原始列和原始列副本都將用於目標中。 – LONG

+0

大多數時候,只需使用「數據轉換」而不是對原始平面文件進行任何更改。 – LONG