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筆



以下先介紹如果只用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來接收篩選的來接收七日前新增資料



細部設定









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



使用Job設計

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

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



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

新增Get Variables,並設定欄位名稱與想要存取的變數名稱,變數名稱的格式為${},運算日期的Transformation中將變數名稱命名為a_week_age,所以想要存取的變數名稱就要打${a_week_age},並選擇日期型態



執行Transformation

這邊可以讓我們手動輸入值來確認Transformation是否設計正常



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



使用Job將兩個Transformation整合

1.新增Job

2.新增START

3.新增Transformation

加入取得日期的Transformation



4.新增Transformation

加入取得貨運商資料的Transformation



5.執行Job



開啟Excel,成功取得近七日新增的貨運商資料




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


留言

這個網誌中的熱門文章

CPE 一顆星選集題目說明與解答 - Java 筆記與心得分享

Visual Studio 自動排版格式化程式碼

1. Vito's family (CPE10406, UVA10041) - CPE一顆星解答與說明