遍歷文件,把文件內容導入資料庫
有一個項目的基本框架是:程序A導出數據,以.tsv格式存儲,數據列之間以tab間隔;程序B吃文檔,把數據導入到資料庫中,並把處理過的文檔備份/移動到指定的目錄中。為了快速開發,程序B設計成SSIS的Package,本文主要分享Package的設計思路,組件用法和注意事項。在設計Package時,使用Foreach
Loop Container組件遍歷Folder中存儲的.tsv文檔,通過平面文件源讀取遍歷的tsv文件,通過Expression
Task組件獲得該文件的備份路徑,通過File System Task把處理過的文件移動到指定的目錄中,該Package主要用到四個組件,分別是,Flat
Files Source,Expression Task和 File System Task,Package的設計核心簡化為下圖所示:
一,遍歷目錄
導入文檔內容的第一步是遍歷目錄,讀取文件的路徑,這一步可以通過Foeach Loop
Container組件實現。打開Collection選項卡,如下圖,從枚舉器(Enumerator)列表中選擇「Foreach File
Enumerator」,枚舉器的配置界面如下圖:
Folder:指定遍歷的目錄
Files:指定文件名模式,示例是 *.tsv,代表文件名以.tsv結尾的所有文件,其中通配符*代表任意字元;
Retrieve file name:獲取文件名的模式,默認選項是完全限定名(Full
qualified),格式是:虛擬盤符+目錄+文件名+文件擴展名;
Traverse Subfolders:如果勾選遍歷子文件夾,那麼文件遍歷器將會遍歷Folder下的子目錄。
枚舉器的配置屬性,都可以通過Expressions屬性來配置,屬性表達式的配置界面如下圖:
在變數映射(Variable Mappings)選項卡中,選擇變數User::DataFilePath,用於臨時存儲每次遍歷獲取的文件名:
如果指定的目錄下,沒有存儲任何文件,那麼遍歷循環容器(Foreach Loop Container)直接返回,不會指定其容納的任何Task。
二,平面文件源
平面文件源(Flat File
Source)用於從指定的路徑中讀取文件,並按照指定的界定符讀取數據,把具有特定格式的平面文件轉換成關係表,平面文件的格式界定符分為:列分隔符和行分隔符,通常,tsv文件的列分隔符是tab,列分隔符是回車+換行。本來的目的,平面文件是動態變化的,不能指定文件的路徑,在設計時,卻必須初始化設計平面文件連接管理器的元數據,因此,首先,必須寫Hard
Code,在連接管理器中指定一個文件的路徑;然後設置表達式屬性,通過變數來設置平面文件連接管理器的外部數據源,也就是,源平面文件。SSIS組件有一個共性,那就是,在表達式(Expressions)中指定的屬性值,會覆蓋相同屬性直接指定的值。通過硬編碼方式指定源文件,僅僅是為了提供源平面文件的格式元數據,不會影響Package的執行。
1,創建平面文件連接管理器
在File
Name中指定平面文件的路徑,選擇平面文件的Locale,默認是English,勾選Unicode,表示平面文件以Unicode編碼存儲。
在General選項卡中,配置常規屬性:
平面文件的格式(Format)是:Delimited,以界定符分割。
Text qualifier:文本界定符,用於指定文本以什麼符號分割,默認值是,表示文本沒有界定符;
Header row delimiter:首行界定符,默認值是回車+換行;
Header rows to skip:文本的第一行,需要從文檔開頭跳過多少行,默認值是0,也就是說,文檔的第一行是文本的第一行;
Column names in the first data row:勾選,表面數據的第一行是列名;
在Columns選項卡中,配置列屬性:
Row delimiter:配置行分隔符,通常選擇{CR}{LF},兩行之間以回車+換行分割;
Column delimiter:配置列分隔符,通常選擇Tab {t},兩列之間以製表符分割;
在Advanced選項卡中,配置外部數據列的屬性:
Name:配置列名
ColumnDelimiter:列分隔符
DataType:列值的數據類型,如果勾選Unicode,那麼輸出列數據類型的默認值是Unicode string
[DT_WSTR],否則,默認值是string [DT_STR];
OutputColumnWidth:輸出列的長度,默認值是50;
TextQualified:文本界定,指定是否文件數據被文本界定符(例如,引號)圍繞,默認值是True;
默認情況下,平面文件連接管理器把字元串欄位的長度設置為50個字元,但是,當列的分割不是以字元數量,而是以分割符(Tab,製表符)來界定時,你需要根據文檔中欄位的實際長度來預估和設置各個數據列的長度,以避免發生數據截斷,或者超出欄位設置的寬度而引發的異常。
2,創建平面文件源
打開平面文件源組件,在Connection
Manager選項卡中指定已創建的平面文件連接管理器,在Columns選項卡中查看所有可用的外部數據列,在Error
Output選項卡中,當外部列轉換成輸出列出現異常時,指定組件對對轉換錯誤的處理模式。
通常情況下,勾選"Retain null values from the source as null values in the data
flow",保持數據源的null值。
3,使用平面文件連接管理器的Expressions屬性
在連接管理器(Connection Managers)窗體中,選中平面文件連接管理器,打開屬性(Properties),配置表達式屬性。
選中Expressions屬性,點擊後面的「...」,彈出屬性表達式編輯器,
在屬性表達式編輯器中,有一個屬性表達式表格,有Property列和Expression列,Property列是一個列表,Expression列是表達式生成器(Builder),為了逐個讀取指定目錄下的文件,從Property列表中,選擇連接字元串(ConnectionString)屬性,並在Expression列中選中變數@[User::DataFilePath],這樣,每次遍歷,平面文件連接管理器都會連接到變數指定的文件,讀取數據,按照已設置的元數據向下游組件輸出。
三,表達式任務組件
指定表達式,根據當前文件的路徑,修改為備份的目的路徑:
四,文件系統任務
文件系統任務,用於對文件進行操作,其配置界面如下圖,操作類型由屬性Operation指定,本例是為了把文本備份到指定的目錄中,選中操作類型為:Move
file
文件系統任務,主要屬性是:Source Connection,Destination Connection 和 Operation,
Source
Connection:源連接,用於操作的源文件路徑;設置屬性IsSourcePathVariable為True,可以通過變數指定源文件路徑;
Operation:操作類型,共有:
複製目錄(Copy directory),
複製文件(Copy file),
創建目錄(Create directory),
刪除目錄(Delete directory),
刪除目錄內容(Delete directory content),
刪除文件(Delete file),
移動文件(Move file),
重命名文件(Rename file),
設置屬性(Set properties)
Destination
Connection:目標連接,用於指定操作的目標文件路徑;設置屬性IsDestinationPathVariable為True,可以通過變數指定目標文件路徑;屬性OverwriteDestination用於指定,當目標文件已存在時,是否重寫目標文件路徑。
在配置完成之後,文件系統任務會拋出錯誤提示,錯誤消息是:Variable "DataFilePath" is used as a source or
destination and is empty.
這是因為變數未被賦值,而文件系統任務組件探測(Detect)到引用的文件不存在,所以拋出異常消息,為了避免出現運行時錯誤,開啟延遲驗證,把可執行組件的驗證推遲到執行時,需要設置文件系統任務的屬性,把延遲驗證(DelayValidation)屬性設置為True。
五,WMI 事件監控任務
WMI 事件監控任務(WMI Event Watcher Task)是一個非常神秘的任務組件,創建WMI
Connection,輸入WQL命令:
在WqlQuerySource中輸入WQL命令,該命令表示:監控指定的目錄,當有新文件插入後,該組件執行成功,否則,一直輪詢。
本例沒有用到該組件,僅僅為了多了解一些組件的基本用法。
文章摘自博客園
更多精彩推薦
IT教育專業培訓:http://www.ujiuye.com/
IT職業在線教育:http://xue.ujiuye.com/
零基礎學習PHP:http://www.ujiuye.com/zt/php/?wt.bd=lsh11tt
※Hadoop 之 NameNode 元數據原理
※彈性布局Flex的基本語法
※利用GPGPU計算大規模群落模擬行為
TAG:IT優就業 |
※驗證文件關於文檔的要求
※文件的性能分析
※刪除資料庫日誌文件的方法
※命令行技巧:分割文件內容
※錄音文件在哪個文件夾 怎麼找到
※為防範國家機密文件被竊,此國紙質文件,竟還設置自毀功能
※宋子文檔案資料庫建成發布,機密公務文件揭歷史「內幕」
※深入淺出Go語言的庫源碼文件
※漫談文件系統
※根文件系統詳解
※谷歌文件管理新功能 刪除文件很方便
※碩士論文剽竊國家保密文件,泄密導師栽了
※極簡:斷舍離你的紙質文件
※查牌照、找文件、下資料!移動支付網「資料庫」欄目上線
※如何把一個文件夾設置密碼?設置文件夾密碼的操作方法
※離機管理 文件資料方便查
※使用「文件歷史記錄功能」輕鬆備份文件,防止電腦里的數據丟失!
※瓷器上的自述文件-款識
※領導在文件上畫「圈閱」是誰發明的?
※誤刪文件也不怕,常見的免費文件恢復軟體大全,幫你找回誤刪文件