標籤:tp伺服器 跳轉 解析 bsp bubuko zip壓縮 tps odi inf
一、資料整合業務情境
1.1 背景
因GA某系統進行調整,導致原先從該系統備份資料庫擷取的相應資料資源無法正常擷取,後續的資料統一由GA某系統每日將前一日的ZTRY照片資料壓縮後上傳到指定的FTP伺服器上,需要從該FTP上下載下來,解壓後將JPEG照片資料解析載入進入資料庫。
1.2 目標
需要建立作業可以定時從FTP下載伺服器將ZIP檔案下載到本地指定檔案夾,將ZIP檔案解壓後,獲得JPEG格式照片,通過Kettle轉換將照片進行解析,同時按照一定的規則將照片的名字等資訊解析拼接成唯一主鍵,以實現將本地照片檔案整合到資料庫中進行儲存,整合完畢後將ZIP壓縮檔轉移至備份檔案夾,同時將解壓後的檔案夾及照片檔案刪除。
1.3 工具及組件
工具:IDI(基於Kettle二次開發的ETL工具)
組件:①轉換:輸入組件、輸出組件、
②作業:
二、資料整合設計思路
2.1 作業調度設計思路
設計思路如流程所示:
1、擷取時間變數
作業啟動後調用時間變數轉換進行時間變數的捕獲,擷取經過格式化處理的昨日日期。
2、檢查目錄情況
進入本地指定下載檔案夾中進行查看,確認檔案夾中是否已經下載昨日日期的ZIP檔案。
3、執行判斷
若下載檔案夾中為空白,或不存在昨日日期的ZIP檔案,則跳轉進入FTP下載;反之,跳出作業停止,等待下一次作業啟動。
4、FTP下載檔案
根據日期從FTP上下載符合日期要求的ZIP檔案,並將其儲存在本地指定的下載檔案夾中。
5、解壓縮ZIP檔案
將ZIP檔案解壓縮到指定的解壓檔案夾。
6、資料清洗整合
調用資料清洗處理整合轉換,捕獲ZIP檔案中的資料並針對資料進行清洗、轉換、處理、載入。
7、刪除目錄
資料清洗轉換完成,資料正常載入進入資料庫後,將解壓縮產生的目錄和檔案刪除,釋放空間。
8、移動檔案
將ZIP檔案轉移到備份檔案夾進行儲存,以便後期資料出現問題進行恢複或者進行核查。
9、結束
結束整個作業,等待作業下一次啟動。
2.2 轉換抽取設計思路
2.2.1 捕獲時間變數
設計思路如流程所示:
1、擷取系統日期時間
擷取當前系統的昨日零點時間,即若本日為2018年07月15日18時36分47秒,則捕獲的時間應為2018/07/14 00:00:00.000。
2、日期時間格式化
將上述2018/07/14 00:00:00.000格式化為20180714。
3、設定時間變數
將格式化的日期資料作為變數傳入變數中儲存。
2.2.2 資料清洗整合
設計思路如下所示:
1、捕獲照片檔案名稱
2、照片檔案解析
將照片檔案解析成為位元據。
3、照片資料清洗整合
將資料流中的資料通過組件進行清洗、轉換,整合成目標資料流。
4、資料載入
將目標資料流載入進入資料庫中儲存。
三、資料整合解決方案
3.1 作業調度模型
3.1.1 作業調度流程
圖示:作業調度模型
3.1.2 作業模型解析
3.1.2.1 啟動
3.1.2.2 調用時間變數轉換模型
3.1.2.3 檢查目錄是否為空白
3.1.2.4 跳出作業
3.1.2.5 FTP下載
3.1.2.6 解壓縮檔案
3.1.2.7 調用資料清洗整合轉換模型
3.1.2.8 刪除解壓縮目錄
3.1.2.9 移動壓縮檔
3.1.2.10 作業結束
3.2 整合轉換模型
3.2.1 整合轉換流程
圖示:捕獲時間變數轉換。
圖示:資料清洗整合轉換
3.2.2 整合轉換流程解析
3.2.2.1 捕獲時間變數轉換
3.2.2.1.1 擷取系統日期時間
3.2.2.1.2 日期時間格式化
//Script here
var SYS_DATE = date2str(TODAY,‘yyyyMMdd‘);
3.2.2.1.3 設定時間變數
3.2.2.2 資料清洗整合轉換
3.2.2.2.1 擷取檔案名稱
3.2.2.2.2 照片轉換二進位
/Script here
var file = new java.io.File(filename);
var fileInputStream = new java.io.FileInputStream(file);
var Content = org.pentaho.di.core.Const.createByteArray(file.length());
fileInputStream.read(Content,0,file.length());
fileInputStream.close();
3.2.2.2.3 拆分欄位
3.2.2.2.4 字串替換
3.2.2.2.5 欄位選擇
3.2.2.2.6 列轉行
3.2.2.2.7 資料修改
//Script here
var zp01 = ZP_1;
var zp02 = ZP_2;
var zp03 = ZP_3;
var zp04 = ZP_4;
var zp05 = ZP_5;
var zp06 = ZP_6;
var zp01modifytime = ZP_1_LASTMODIFYTIME;
var zp02modifytime = ZP_2_LASTMODIFYTIME;
var zp03modifytime = ZP_3_LASTMODIFYTIME;
var zp04modifytime = ZP_4_LASTMODIFYTIME;
var zp05modifytime = ZP_5_LASTMODIFYTIME;
var zp06modifytime = ZP_6_LASTMODIFYTIME;
var zpscrq = replace(dirname,‘_ZP‘,‘‘);
var dirname1 = ‘ftp://10.78.1.30/‘+ dirname + ‘.zip‘;
if(zp01==null && zp02==null && zp03==null){
zp01=zp04;
zp02=zp05;
zp03=zp06;
zp01modifytime=zp04modifytime;
zp02modifytime=zp05modifytime;
zp03modifytime=zp06modifytime;
}
3.2.2.2.8 擷取系統資訊
3.2.2.2.9 欄位選擇
3.2.2.2.10 過濾記錄
3.2.2.2.11 插入更新
3.2.2.2.12 拋棄無效資料
四、其他說明
暫無。
【Kettle】資料整合之FTP下載+本地照片檔案匯入Oracle資料庫