發表文章

30天學會Data Integration - Kettle系列 第 22 篇 - Step - 取得系統資訊並寫入資料庫

圖片
  本篇要介紹的是有關日期資訊取得的Step:[Input]Get System Info,另外要介紹Step:[Flow]Filter rows來輔助資料分類的動作。 [Input]Get System Info 介紹 取得系統資訊,例如日期或參數 [Flow]Filter rows 介紹 使用簡單的條件式來過濾資料,可使用上一個Step中的欄位來進行條件式的設定,可以選擇以欄位值或是以指定的輸入值做比對。 本篇目標 延續上一篇的例子,將更新項目的更新時間欄位寫入今日的日期,新增項目的新增欄位寫入今日的日期,由於Northwind資料庫的Shippers沒有新增與更新日期的欄位,所以需要自行增加CreateTime與UpdateTime欄位喔! 然後補上日期資訊 新增與設定[Input]Get System Info 新增Get System Info並建立Hop,兩點下進行設定,請輸入名稱與類型 類型的部分,提供了許多有關於Kettle執行環境的參數讓我們選取,大多都是有關於日期的部分,本篇請選擇system date (variable) 預覽設定的結果,成功取得日期參數 新增與設定Filter rows 新增Filter rows並建立Hop,點兩下進行設定,在這邊我們要來設定過濾的條件,要先把新增的資料與更新的資料區分開來,這樣才能判斷在執行Insert / Update時,要更新的是CreateTime還是UpdateTime;判斷是否為新增資料與更新資料的關鍵,就是ID欄位,所以我們要把ID=null的資料過濾出來 新增Insert/Update 新增兩個Insert/Update,一個用來做資料的新增,另一個是拿來做資料的更新,在建立Hop時要特別留意一下,記得選對true與false的流向,我們要把ID=null的資料傳到"新增資料"的Step,把ID!=null的資料傳到"更新資料"的Step 設定"新增資料"Step 設定方式可以參考前一篇,以下的設定差別在於Don't perform any updates有勾選,因為此Step我們只希望它執行Insert的動作,所以勾選Don't perform any updates,以及將today欄位值指定給CreateTim...

30天學會Data Integration - Kettle系列 第 21 篇 - Step - 將Excel資料寫入資料庫

圖片
  此篇要介紹的Step是[Output]Insert/Update,此Step應該是我目前使用次數最多的Step,因為資料整合到最後大多的情況都還是會寫入或更新資料庫 [Output]Insert/Update介紹 此Step包含兩種功能,一種寫入資料,另一種是更新資料,設定方式會稍有不同,此Step會根據我們所下的條件,去資料表中檢查是否存在符合條件的資料,若有找到則更新此筆資料,若找不到則進行寫入 本篇目標 資料來源使用Northwind資料庫中的Shippers資料表,將對以下三筆資料進行電話的更新 將想要進行更新的電話與新增的資料準備在Excel檔案裡面,透過Kettle來幫我們完成更新與寫入資料庫的動作 新增 Microsoft Excel Input 設定 Microsoft Excel Input 選擇檔案,不熟的可以複習這篇 Step - 讀取Excel檔案 選擇欄位 新增 Insert/Update 請於Output資料夾中找到Insert/Update,拖曳到主要編輯區,並建立Hop 設定 Insert/Update 1 請選擇要將資料新增或寫入哪個table 2 請設定搜尋資料的條件,在這邊我們以Table中的ShipperID欄位和Excel中的ID欄位來比對,比對結果有兩種: -符合這個條件的資料,則位於下方的更新欄位中值會被更新 -不符合這個條件的資料,則會被寫入Table,也就是在table中新增一筆資料的意思 3 設定要更新的欄位,可以選擇Edit mapping來設定欄位的對應,有時候欄位名稱不一定都相同,可透過這個介面來進行設定 Don't perform any updates:如果不想進行資料的更新,單純只想要寫入資料,請記得勾選此項目(本篇的例子是不需要勾選的) 預覽或執行 Insert/Update 完成設定之後,我們就可以來預覽或是執行,但這邊有件事情非常重要,就是 Insert/Update 是不能Rollback的, Insert/Update 不能 Rollback Insert/Update 不能 Rollback Insert/Update 不能 Rollback 所以你一旦按下預覽或執行,資料庫的資料就會被更改,然後就一去不復返了... 所以使用這個Step要非常的小心,建議先在測試機的資料庫進行確...

30天學會Data Integration - Kettle系列 第 20 篇 - Step - 一對一查詢

圖片
  此篇要繼續介紹一個Join的Step:[Lookup]Database lookup,它的特色就是,Join之後只會回傳一筆資料,例如可以使用Database lookup來取得每個客戶最近一筆的登入紀錄;如果是客戶所有的登入紀錄的話,要改用前一篇的Merge join來完成。 [Lookup]Database lookup介紹 Database lookup會根據前一個Step的資料流去查詢資料,並將查詢到的欄位加入到資料流中,意思也就是說,如果前一個Step取得了5筆客戶資料,那麼Database lookup會針對這5筆資料再去指定的table中查詢,並將查詢結果的欄位加入到這5筆資料當中,查詢後的資料筆數一樣會維持在5筆,也適合使用在一對一的情況,所以不像前兩篇的Join,Join結果可能會有多筆的情況 本篇目標 以北風Northwind為例,想要取得客戶最新的訂單,下圖以 CustomerID='ALFKI'來查詢訂單資料,最新的訂單日期1998-04-09 取得客戶資料 新增與設定Table input 取得訂單資料 新增Database lookup 設定Database lookup 選擇Orders Table 設定查詢條件 設定排序,因為是要取得最新的訂單,所以要針對OrderID進行Desc的排序 取得查詢結果的欄位 預覽結果 CustomerID='ALFKI'最新的訂單日期是1998-04-09 以上就是三篇就是有關於Join的介紹,3種Step各有它們的特色,設定方式也都不同,可視情況自行挑選使用 Join 總結 Database Join 1.直接下SQL,可在SQL中傳入前一個Step中的欄位值 2.提供2種Join方式LEFT JOIN 與 OUTER JOIN Merge Join 1.不用下SQL,直接選擇要join的欄位 2.一定要事先排序join的欄位 3.提供4種Join方式FULL OUTER、LEFT OUTER 、RIGHT OUTER、INNER JOIN Database lookup 1.不用下SQL,直接選擇要查詢的欄位 2.查詢結果只會取得一筆資料

30天學會Data Integration - Kettle系列 第 19 篇 - Step - Merge Join與篩選資料

圖片
  本篇要介紹另外一種Join的Step:[Joins]Merge Join,Join的類型有四種可以選擇,而前一篇的Database Join就只有Left Join跟Outer Join而已,另外還有很好用的資料過濾Step:[Flow]Filter rows,接下來就來認識一下這兩個Step [Joins]Merge Join介紹 必須存在兩個不同的Step,才能進行Join,Join的類型有四種:INNER、LEFT OUTER、RIGHT OUTER與FULL OUTER;另外有一點必須特別注意,Join之前必須排序指定的欄位。 [Flow]Filter rows介紹 提供設定多條件的方式來過濾資料,當存在前一個Step時,則可以選擇欄位值來進行塞選,比對值的方式有提供多種函式,點選右上角的 + icon可以增加多個條件 本篇目標 一樣使用MSSQL的Northwind資料庫來示範,客戶有91筆,訂單有830筆,本篇想要找出所有客戶的訂單明細,以及沒有訂單的客戶各是哪些,以下操作很多都是介紹過的Step,設定的步驟會快速帶過哦! 取得訂單資料與客戶資料 新增Table Input,取得客戶資料 新增Table Input,取得訂單資料 新增與設定Merge Join 1.新增Merge Join,並建立Hop 2.選擇First與Second Step來源,這邊的First與Second其實也代表Left與Right Table 3.選擇Join Type,因為我們要找出所有客戶的訂單,不論此客戶是否有購買過資料都要找出來,所以選擇LEFT OUTER 4.設定Join的Key,請輸入CustomerID 5.按下OK 此時會跳出提示訊息,提醒Join之前一定要排序,否則資料會異常 新增Sort Rows 新增兩個Sort Rows,這個Step之前有介紹過,可以參考此篇 Step - 數值對應與欄位排序 ,建立Hop時,有個小技巧,可以按住Step拖曳到想要插入的Hop的線上面(例如:訂單資料與Merge Join之間的那條線),當Hop變成粗線時,則代表可插入Step 此時放開Step也會出現提示訊息,按Yes 兩個Step皆設定以CustomerID來排序 預覽Merge Join 即得到832筆資料 即代表有兩個客戶是沒有訂單的,接下來我們...

30天學會Data Integration - Kettle系列 第 18 篇 - Step - 資料庫Join

圖片
  此篇要來介紹如何Join Table,使用的Step是[Lookup]Database Join,會以MSSQL的Northwind資料庫來示範。 [Lookup]Database Join介紹 此Step允許加入參數(前一個步驟的欄位值)來進行資料庫查詢,在SQL語法中使用?來表示參數的位置,可以有多個?號,而?號出現的順序 = 參數在Step中定義的順序。 本篇目標 取得每位員工所負責的訂單(含客戶與貨運商資料),總共四張Table,需要Join三次 Northwind資料庫圖表 設定資料庫連線 在「Step - 讀取資料庫」篇中有說明如何設定Step中的連線,另外一種設定方式是直接在View頁籤中設定連線 設定方式與「Step - 讀取資料庫」篇一樣 取得員工資料 新增、設定與預覽 Table Input,在「Step - 讀取資料庫」篇中也說過囉!快速帶過 預覽資料 取得員工負責的訂單 新增與設定Database Join,請在Step name輸入名稱,以避免後續混淆;SQL的地方,因為我們要取得每個員工所負責的訂單,所以要開始來進行訂單資料的join,join的條件:訂單的EmployeeID = 員工的EmployeeID,所以需要在下方的Parameter的地方,定義上一個步驟「讀取員工資料」的EmployeeID來做為比對的值 預覽,成功取得員工所負責的訂單資料,其中EmployeeID_1欄位是什麼意思呢?因為Employees與Orders資料表都有一個叫做EmployeeID的欄位,因為在Transformation中欄位是不可以重複的,所以這邊自動將Orders的EmployeeID欄位改以EmployeeID_1來定義 取得訂單的客戶資料 新增與設定Database Join,請在Step name輸入名稱,以避免後續混淆;SQL的地方,因為我們要取得該訂單的客戶資料,所以要開始來進行客戶的資料join,join的條件:客戶的CustomerID = 訂單的CustomerID,所以需要在下方的Parameter的地方,定義上一個步驟「取得員工負責的訂單」的CustomerID來做為比對的值 預覽資料 取得訂單的貨運商 新增與設定Database Join,請在Step name輸入名稱,以避免後續混淆;SQL的地方,因為我們...