SSIS數據轉換組件_導出、導入轉換


一 導出轉換組件

  導出列轉換讀取數據流中的數據,並將數據插入到指定的文件中.次轉換使用成對的數入列:一列是要輸出的數據,一列是將這些數據輸出到哪些文件里.轉換在處理時,數據將插入到指定的文件中.如果這些文件不存在,轉換將創建這些文件,然后將數據寫入到文件中.要寫入的數據必須具有DT_Text、DT_NTEXT或DT_IMAGE數據類型。

下面的例子中將介紹如何使用該轉換工具。本例演示如何將數據庫AdVentureWorks中Production.Document表中的Document列導出到文件中。

  1. 創建一個文件夾E:\SSIS\SSISDemo\Export,導入的文件將放在這個文件夾中。
  2. 新建一個名為ExportColumnDemo的包,在控制流中添加一個Data Flow Task。然后在連接管理器中創建一個OLEDB連接,用於連接AdventureWorks數據庫。如圖:

 

  1. 打開數據流界面,添加一個OLE DB,連接到LocalHost.AdventureWorks中的production.document表。預覽這個表可以看到有一個列FileName,他們指定了文件的存儲路徑。在導出數據時,我們可以把Document列數據導出到E:\SSIS\SSISDemo\Export

 

  1. 添加一個派生列轉換將與剛創建的數據源連接起來。前頭指向派生列。編輯派生列。按如圖黃色標記設置:

  1. 添加一個到出列轉換,將派生列與它連接起來。然后雙擊導出列, 彈出的窗口。在提取列中選擇Document列,應為在表[Production].[document]中這一列是文件列,在文件路徑列中選擇NewPath,因為這一列是通過派生列產生的文件路徑。

 

下面詳細了解一下窗口中的允許追加、強制截取以及編寫字節順序列的含義:

列名

說明

允許追加

指定轉換是否將數據追加到現有文件中。默認false

強制截取

指定轉換在寫入數據之前是否刪除現有文件的內容。默認值為false

編寫字節順序

指定是否將字節數序標記(BOM)寫入文件。只有在數據具有DT_TEXT或DT_NTEXT數據類型,並且未將數據追加到現有數據文件時,才會寫入標記(BOM)

  1. 執行包,如圖1-1,可以看到文件夾中已經有9個文件。見圖:1-2

 

圖1-1

 

圖1-2

  1. 當我們重新設置導出列的屬性時,按如下圖設置:

然后執行該包,結果會報錯如圖:

 

在 執行結果中看到如下錯誤信息

[Export Column [37]] 錯誤: 無法打開要執行寫操作的文件“E:\SSIS\SSISDemo\Export\Crank Arm and Tire Maintenance.doc”。該文件存在且不能被覆蓋。如果 AllowAppend 屬性為 FALSE,並且 ForceTruncate 屬性被設置為 FALSE,則存在該文件將會導致此失敗。如何避免這些錯誤可以參考以下內容:

追加

截斷

文件存在

結果

False

False

該轉換將創建一個新文件並將數據寫入到該文件中。

True

False

該轉換將創建一個新文件並將數據寫入到該文件中。

False

True

該轉換將創建一個新文件並將數據寫入到該文件中。

True

True

該轉換的設計時驗證失敗。將兩個屬性都設置為 true 是無效的。

False

False

發生運行時錯誤。文件存在,但轉換無法寫入到文件中。

False

True

轉換將刪除文件,然后重新創建文件並將數據寫入到文件中。

True

False

轉換將打開文件並將數據寫入到文件末尾。

True

True

該轉換的設計時驗證失敗。將兩個屬性都設置為 true 是無效的。

二 導入列轉換

導入列轉換與導出列轉換正好相反,它是從文本中讀取數據並將數據添加到數據流中的列中.通過此轉換,包可以將存儲於各個單獨文件中的文本和圖像添加到數據流中.使用導入列轉換要求輸入列得數據類型必須是DT_TEXT、DT_NTEXT或DT_IMAGE.

現在來做一個例子介紹一下如何將圖像文件導入到AdventureWorks數據庫中。

  1. 創建路徑E:\BI資料\IntegrationServices\ImportColumn,然后在該文件中任意創建5個圖片。在在該文件中創建一個名為“PictureInfo”的txt文本。其內容如下:

E:\BI資料\IntegrationServices\ImportColumn\1.png

E:\BI資料\IntegrationServices\ImportColumn\2.png

E:\BI資料\IntegrationServices\ImportColumn\3.png

E:\BI資料\IntegrationServices\ImportColumn\4.png

E:\BI資料\IntegrationServices\ImportColumn\5.png

自此整個文件的內容如下:

2.在AdventureWorks數據庫中執行下面的sql語句

CREATE TABLE [dbo].[MyImages](

       [ID] [int] IDENTITY(1,1) NOT NULL,

       [ImageFilePath] [varchar](100) NOT NULL,

       [Document] [image] NOT NULL,

       [CreateTime] [datetime] NOT NULL,

 CONSTRAINT [PK__tblmyIma__3214EC272D47B39A] PRIMARY KEY CLUSTERED

(

       [ID] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

  3.新建一個名為“ImportColum”的包,在控制流中拖放一個“Data Flow Task”,然后再連接管理器中創建一個OLE DB 連接用於連接AdventureWorks數據庫。如圖:

 

  4 在數據流選項卡中,拖放一個平面文件數據源。命名為“Image Source”,然后右鍵單擊編輯,彈出窗口,然后再窗口中,單擊新建按鈕。數據源設置為: E:\BI資料\IntegrationServices\ImportColumn\PictureInfo.txt。在常規和高級選項中設置如下: 

 

設置成功后,可以單擊預覽,看一下設置結果:

  1. 設置好平面數據源后,托動一個導入列轉換到數據流選項卡中,命名為“Improt Column”,並將與平面數據源連接。綠色箭頭指向導入列轉換工具。雙擊導入列轉換彈出窗口,在輸入列選項卡中選中可用輸入列。如下圖:

  1. 在剛才的彈出框中選擇輸入屬性和輸出屬性選項卡,你會發現輸入列集合中有一列ImageFilePath,但是在輸出列集合中卻沒有列輸出。此時我們加入一個輸入列名為”Document”,類型為DT_IMAGE.如圖:注意紅色標記的地方

 

在下方我們看到一行警告信息。解決此警告信息我們做如下操作。選中框中的名為ImageFilePath的輸入列。將FileDataColumnID屬性設置為輸出列Document的ID即可。如下圖紅色標注的地方。

 

設置成功。警告信息消失。此時導入列轉換配置成功。

  1. 托動一個派生列到數據流中與導入列轉換相連。箭頭指向派生列。設置派生列

  1. 最后添加OLE DB Desination,將Import Column和Ole DB Destination連接起來,編輯Ole DB Destination設置為如上創建的表(MyImages),點擊Mappings setting設置列映射

 

  1. 設置成功后執行該包:

 

查看目標數據庫中的MyImages表。如下:

導出、導入組件功能我們學習完畢。謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM