iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 28
0
Big Data

30天學會Data Integration - Kettle系列 第 28

設定變數與取得變數

此篇要來討論一些進階問題,先前我們介紹過使用Get System Info來讀取系統資訊,例如取得日期或是Command Line傳入的參數,而也曾介紹過Step的特性就是在處理資料流中的每一筆資料,那麼在一筆一筆資料慢慢處理時,會不會有效能上的問題呢?答案是肯定的,所以本篇會介紹調整效能的好物,就是[Job]Set Variables與[Job]Get Variables,且必須與Job還有Transformation互相搭配使用

本篇目標

使用Step - 取得系統資訊並寫入資料庫此篇延伸說明,本篇想要取得近七日的新增的貨運商資料。

本篇撰寫時的前七日是2017/1/5,所以1/5後新增的有6筆,1/5前新增的有3筆
http://ithelp.ithome.com.tw/upload/images/20170112/20091626Muen0CFOTm.png

以下先介紹如果只用Transformation來處理會有什麼問題,以及如何搭配Job來做問題的改善

使用Transformation設計

1.新增Table Input將Shippers資料表讀進來
2.新增Select Values將CreateTime欄位型態從String轉為Date,以便後續篩選日期時才能做日期比較
3.新增Get System Info取得今日日期
4.新增Add constants來定義要取得幾天前的日期,因為本篇想要取得七前天,所以將值設為-7
5.新增Calculator進行本日日期減掉七天的運算
6.新增Filter rows,篩選出近七日新增的廠商資料
7.新增Microsoft Excel Output來接收近七日新增資料
8.新增Dummy來接收篩選的來接收七日前新增資料
http://ithelp.ithome.com.tw/upload/images/20170112/20091626rUTsvTytC5.png

細部設定
http://ithelp.ithome.com.tw/upload/images/20170112/200916269pEDkKOFcF.png

http://ithelp.ithome.com.tw/upload/images/20170112/20091626PnAy0J5slZ.png

http://ithelp.ithome.com.tw/upload/images/20170112/20091626pMxvxM06oW.png

http://ithelp.ithome.com.tw/upload/images/20170112/20091626Cl2HyEZ6Wl.png

完成後直接執行,觀察Step Metrics會發現,「取得今天日期」、「設定天數」與「取得前七天的日期」的Read與Written的次數都是9次,也意味著,如果今天資料有100萬筆,這3個Step就會執行100萬次,但是!這三個Step的結果都是固定的!不會隨著一筆一筆的資料的不同而有所改變,所以這很顯然有浪費效能的問題,此設計可能需要在進行調整
http://ithelp.ithome.com.tw/upload/images/20170112/20091626WjkzoRlsgA.png

使用Job設計

將固定的運算獨立成一個Transformation

固定的運算指的就是「取得今天日期」、「設定天數」與「取得前七天的日期」這三個Step,新增一個Transformation,並將此3個Step加入,另外在新增一個Step:[Job]Set Variables,將運算好的日期值提供給此變數,讓給Job可以存取
http://ithelp.ithome.com.tw/upload/images/20170112/200916264uAuu92y9U.png

在取得貨運商的Transformation中使用變數

新增Get Variables,並設定欄位名稱與想要存取的變數名稱,變數名稱的格式為${},運算日期的Transformation中將變數名稱命名為a_week_age,所以想要存取的變數名稱就要打${a_week_age},並選擇日期型態
http://ithelp.ithome.com.tw/upload/images/20170112/20091626lY4Qx76cUE.png

執行Transformation

這邊可以讓我們手動輸入值來確認Transformation是否設計正常
http://ithelp.ithome.com.tw/upload/images/20170112/20091626mBF9YDaqpA.png

此時我們觀察Get Variables,它一樣也執行了9次,但是它是去取得一個已經存在的變數值,而不是向上例中使用3個Step去做重複的計算,而真正的計算只執行了一次(在下面提到的Job中)
http://ithelp.ithome.com.tw/upload/images/20170112/20091626vK6G41p6g9.png

使用Job將兩個Transformation整合

1.新增Job

2.新增START

3.新增Transformation

加入取得日期的Transformation
http://ithelp.ithome.com.tw/upload/images/20170112/200916267YMwMTT5BI.png

4.新增Transformation

加入取得貨運商資料的Transformation
http://ithelp.ithome.com.tw/upload/images/20170112/20091626QOPpkhpQXv.png

5.執行Job

http://ithelp.ithome.com.tw/upload/images/20170112/20091626p0mK25YewQ.png

開啟Excel,成功取得近七日新增的貨運商資料
http://ithelp.ithome.com.tw/upload/images/20170112/20091626qPkEi2YxjQ.png


看完以上說明,是不是更能了解到Job的特色了,Job是流程的控管,Transformation是資料的處理,但對於初學者而言,通常是會覺得Transformation就能搞定很多事情了啦XD,可以正常work就好,誰管效能好不好XD


上一篇
Entry - Email通知
下一篇
設定排程
系列文
30天學會Data Integration - Kettle30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言