此篇要來討論一些進階問題,先前我們介紹過使用Get System Info來讀取系統資訊,例如取得日期或是Command Line傳入的參數,而也曾介紹過Step的特性就是在處理資料流中的每一筆資料,那麼在一筆一筆資料慢慢處理時,會不會有效能上的問題呢?答案是肯定的,所以本篇會介紹調整效能的好物,就是[Job]Set Variables與[Job]Get Variables,且必須與Job還有Transformation互相搭配使用
使用Step - 取得系統資訊並寫入資料庫此篇延伸說明,本篇想要取得近七日的新增的貨運商資料。
本篇撰寫時的前七日是2017/1/5,所以1/5後新增的有6筆,1/5前新增的有3筆
以下先介紹如果只用Transformation來處理會有什麼問題,以及如何搭配Job來做問題的改善
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來接收篩選的來接收七日前新增資料
細部設定
完成後直接執行,觀察Step Metrics會發現,「取得今天日期」、「設定天數」與「取得前七天的日期」的Read與Written的次數都是9次,也意味著,如果今天資料有100萬筆,這3個Step就會執行100萬次,但是!這三個Step的結果都是固定的!不會隨著一筆一筆的資料的不同而有所改變,所以這很顯然有浪費效能的問題,此設計可能需要在進行調整
固定的運算指的就是「取得今天日期」、「設定天數」與「取得前七天的日期」這三個Step,新增一個Transformation,並將此3個Step加入,另外在新增一個Step:[Job]Set Variables,將運算好的日期值提供給此變數,讓給Job可以存取
新增Get Variables,並設定欄位名稱與想要存取的變數名稱,變數名稱的格式為${},運算日期的Transformation中將變數名稱命名為a_week_age,所以想要存取的變數名稱就要打${a_week_age},並選擇日期型態
這邊可以讓我們手動輸入值來確認Transformation是否設計正常
此時我們觀察Get Variables,它一樣也執行了9次,但是它是去取得一個已經存在的變數值,而不是向上例中使用3個Step去做重複的計算,而真正的計算只執行了一次(在下面提到的Job中)
加入取得日期的Transformation
加入取得貨運商資料的Transformation
開啟Excel,成功取得近七日新增的貨運商資料
看完以上說明,是不是更能了解到Job的特色了,Job是流程的控管,Transformation是資料的處理,但對於初學者而言,通常是會覺得Transformation就能搞定很多事情了啦XD,可以正常work就好,誰管效能好不好XD