kettle入門(五) 之kettle抽取gz格式文本詳細案例

背景:


ods平臺的一個很簡單的數據共享需求:

運營商的某個部門每天定時送gz格式的HLR文本數據到FTP服務器的固定目錄下。然後ods每天定時去取然後錄入到RDBMS的表中,開放給其他系統查詢調用,這種稱作數據庫表接口。


需求很簡單,但是因爲以前只用過文本輸入做txt 或者csv、excel ,所以一時就想怎麼先把gz格式解壓出來,再用文本文件輸入,首先想到了用 kettle3自帶的unzip 功能 

如下圖:



結果發現 解壓不了gz格式的,後來又想到使用shell命令,但是在後臺putty可以 但是用當前系統etl平臺封裝執行shell命令後就有問題。搞了較長時間問題沒搞定。

後來偶然發現 文本文件輸入 本身就可以直接讀gz格式文本,感覺前面都浪費了時間難過


解決:


下圖所示的kjb 就是實現該功能的job ,步驟如下:


1 START

2 刪除本地服務器的歷史文件 (Delete files)防止歷史文件佔用機器存儲

3 設置時間變量(cs_filename)

4 使用時間變量正則匹配下載FTP文本到本地(帶有地球的那個圖)

5 從本地匹配需要的文本錄入RDBMS(alhlrfile)




下圖實現的功能是   從本地匹配需要的文本錄入RDBMS ,畫紅圈的目錄部分指當前腳本文件ktr所在的目錄下的IE目錄,通配符用來指定讀取匹配的文本。

ex:每天讀取前一天的文本 則 時間變量設置爲 系統時間的前一天 2015-05-16 就是2015-05-15 ,文本就是2015-05-15.txt.gz

關於時間變量的設置 參考:

kettle入門(四) 之kettle中設置任意時間變量的詳細案例 




下圖文本文件輸入 就是 直接把gz格式的文本錄到RDBMS的圖元。

如下圖:


文件類型:選擇上csv即可(與上有系統 協商是文本)

分隔符、封閉字符:按照實際的文本內容來

頭部數量:指文本頭部 非正式數據的內容(如 字段屬性名等)的行數

compression: 默認none 應選擇GZIP ,若有中文 格式選擇UNIX ,編碼方式選擇 UTF-8,若沒有則默認


選好之後 ,可以點擊預覽記錄 看看設置是否正確,數據是否正常。


下圖是文本數據全量錄入到oracle數據庫的示例:



發佈了51 篇原創文章 · 獲贊 99 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章