1. 程式人生 > 程式設計 >Kettle 小記(2)-- Spoon的使用(3) -- 主物件樹和核心物件

Kettle 小記(2)-- Spoon的使用(3) -- 主物件樹和核心物件

2.4 主物件樹

主物件樹
這裡有兩種選擇,即Transformation和Job。

雙擊相應的圖示,就會立即建立一個轉換或者作業檔案,開啟工作區且該區域切換為核心物件,以方便你進行下面的設計工作。而主物件樹將以目錄樹的形式展示轉換或者作業的各種資訊。

2.4.1 轉換的主物件樹

新建一個轉換後,你的主物件樹將展現為下面這樣子。

轉換

這些圖示都是可以點選的哦!

  • 雙擊“轉換”將再次新建一個轉換檔案;
  • 雙擊“轉換 1”,即轉換檔名稱,將開啟當前轉換的屬性面板;
    轉換屬性
  • Run configurations:可以檢視當前的執行設定,也可以新建一個,還沒用過,後期補充;
  • DB連線:可以檢視當前的資料庫連線,雙擊可以新建一個資料庫連線;
  • Step(步驟):檢視當前都用了哪些元件;
  • Hops(節點連線):檢視當前所有的Transformation-Hop,雙擊可以新建一個Transformation-Hop來連線兩個Step,只不過一般不這麼用;
  • 資料庫分割槽schemas;
  • 子伺服器;
  • Kettle叢集schemas;
  • Data Services;
  • Hadoop clusters。

後面5部分的功能,我也沒用過,後期補充。從這裡開始下面羅列而未介紹的功能點,後期再補充。

2.4.2 作業主物件樹

新建一個作業後,你的主物件樹將展現為下面這樣子。

作業的主物件樹

這些圖示同樣都是可以點選的!

  • 雙擊“作業”將再次新建一個作業檔案;
  • 雙擊“作業1”,即作業檔名稱,將開啟當前作業的屬性面板;
    作業屬性
  • Run configurations:可以檢視當前的執行設定,也可以新建一個,還沒用過,後期補充;
  • DB連線:可以檢視當前的資料庫連線,雙擊可以新建一個資料庫連線;
  • 作業專案;
  • 子伺服器;
  • Hadoop clusters。

2.5 核心物件

因核心物件的內容偏多且雜,同時是我們平時主要使用的工具。這裡我將講一個小的例子,來講述幾個我們平時經常用到的元件。後期會將“核心物件”分為單獨的兩章“轉換核心物件”和“作業核心物件”來介紹,詳情請參見後面的章節。

下面我們要講的例子是:讀取一個MySQL資料庫中的兩張表的資訊,做Join連線,再輸出到另一個MySQL資料庫中。

2.5.1 新建轉換(Transformation)

關於如何新建轉換,Kettle為我們提供了多種方式,充分體現了“條條大路通羅馬”的思想,你只需要選擇一個自己習慣的方式即可。

如果忘記了怎麼建立,請再仔細閱讀一遍前面的內容吧。

新建一個轉換之後,會立即開啟一個畫布(工作區)。為什麼叫畫布呢?用過Visio、Xmind、Axure的你們肯定非常熟悉這類工具,軟體將各種我們平常使用的功能都封裝成了一個個的元件,我們只需將需要的元件拖拽至畫布,並在每個元件之間通過連線建立聯絡來完成我們的種種需求。而Kettle的元件被稱為Step(步驟),不過你可能發現了我前面都是用的“元件”,因為感覺這是一個比較通用的名稱。

畫布已準備就緒,你就開始發揮自己的想象力,通過往裡面新增元件,完成一幅驚世畫作吧!

下面,我們將一步一步地完成這個小例子,來介紹下Kettle設計Transformation的過程,並著重介紹下這幾個元件。

2.5.2 表輸入(Input Table)

在左邊的核心物件中,有很多資料夾,其實就是Kettle對不同元件的分類。每個資料夾下面都有很多不同的元件。

現在需要從源表中讀取資料,可以理解為往程式裡輸入資料,所以要去“輸入”資料夾中看看是否有我們需要的元件。你會發現這麼有很多元件,如CSV檔案輸入、文字檔案輸入等,但這些都不是我們想要的,然後你會看到一個名為“表輸入”的元件,就是它了,將它拖至畫布即可。

需要的元件找到了,下面我們就來看看如何使用它吧?

雙擊畫布中的“表輸入”,會出現下面這個對話方塊:

表輸入

如你所見這個對話方塊有很多的屬性,多到你一眼看過去,可能有點兒暈。在此我需要提前給你來個提醒,不要大驚小怪,後面章節“核心物件”中講到的某些元件的屬性比該元件多幾倍。

這裡我們先講我們這個例子會用到的屬性,其實它們都很好理解的。

  • 步驟名稱:就是給該步驟起一個通俗易懂又顯而易見的名稱,但需要注意在整個轉換中步驟名稱是唯一的,不可重複。
  • 資料庫連線:初次使用肯定是先需要建立一個資料庫連線的,此處提供了兩種方式。其實我們前面都已經介紹過了,“引導建立資料庫”我覺得它比較囉嗦就不介紹了,也許你對它情有獨鍾,那就自行研究吧;此處再來展示下“新建”這種方式吧, 因為我們經常會用到它,不是因為我想湊字數呦~還是以MySQL為例,資料庫連線展示圖如下:
    資料庫連線
  • 獲取SQL查詢語句:當你建立好資料庫連線並選中它時,可以通過該按鈕檢視其表結構:
    資料庫瀏覽器
    選中某張表,Kettle會自動在SQL編輯框中填入SQL查詢語句,並提示是否顯示欄位名。選擇“是”,將展示各個欄位的名稱。但我一般不用這種方法,因為我們平時不只是對單張表做操作,而是多張表聯合的結果作為輸入。
    SQL語句.png
  • SQL:這個編輯框是根據你資料庫連線中選中的表動態生成的,這才是我們主要的工作區域,將多張表的連線SQL語句寫在這裡作為輸入。
  • 記錄資料限制:指的是從源表中抽取多少條資料,預設為0表示資料沒有限制,即將源表中的所有資料全部抽取出來:
  • 預覽:就是提前看看該步驟得到的資料是否滿足你的需求,這裡我們選擇前10條展示下該功能。
    預覽資料

然後我們再拖拽一個表輸入元件,命名為“獲取所有分數資訊”,選擇好資料庫連線“sampdb”,這次我們在SQL編輯框中自己寫SQL語句:

SQL語句2

這裡通過關聯grade_event(考試事件)和score(分數),來獲取每次考試的日期、型別、分數、學生ID等資訊。

預覽下效果:

預覽資料2

到此兩個表輸入的元件我們就建立完畢了。

2.5.3 記錄集連線

接下來我們需要連線操作,恰好“核心物件”中有“連線”這個資料夾,從中拖拽“記錄集連線”至畫布,然後用Transformation-Hop將它們連線起來,如下圖所示:

連線

怎麼建立Transformation-Hop呢?還記得我們前面講的“主物件樹”不?開啟它雙擊Hops(節點連線),出現下面的對話方塊:

Hop

Transformation-Hop可以簡單地理解為資料的流向,即資料從“起始步驟”流出,流入“目標步驟”。“From < -- > To”就是將兩者的互換一下。點選確定後,Transformation-Hop就自動出現了。一條帶箭頭的線從“獲取所有學生資訊”指向了“記錄連線”。

好吧,我很大度,為人很好,不會藏私的,將快捷方式介紹給你吧。按住Shift鍵,將滑鼠箭頭移至“獲取所有學生資訊”按住滑鼠左鍵不動,往外移動滑鼠,此時會出現一條置灰的帶箭頭的線,將滑鼠拖至“記錄集連線上”,鬆開滑鼠左鍵,這樣一條完美的線條婀娜的線就建立成功了。

雙擊“記錄集連線”,得到如下屬性對話方塊:

記錄集連線

  • 步驟名稱:不用再多介紹了吧。
  • 第一個步驟:就是連線的基表,從列表中選擇“獲取所有學生資訊”。
  • 第二個步驟:就是連線表,從列表中選擇“獲取所有分數資訊”。
  • 連線型別:就是我們常用到的Join、Left Join、Right Join等,這裡預設。
  • 獲得連線欄位:點選後,將相應步驟的所有欄位都拉取出來,這裡我們只留student_id,其他的都可以右鍵點選相應欄位刪除掉。

是不是很想看看這部分的資料呈現是否正確,可是卻找不到像“表輸入”屬性對話方塊一樣的“預覽”按鈕。別急,難道你忘了“大明湖畔夏雨荷”了嗎?選單欄“執行”的“預覽”選項、轉換工具欄的“預覽”圖示,都可以達到預覽的效果,此處我們選擇用快捷鍵“F10”,嘿嘿~

在下面的對話方塊中,選中左邊的“記錄集連線”,勾選右邊的“獲得前幾行(預覽)”,最後填入你想看到的行數,點選“快速啟動”。

預覽3

此時該轉換程式就會啟動,並執行至“記錄集連線”這步,彈出“預覽資料”列表,檢視資料是否達到要求,並點選“停止”終止轉換退出。期間你會看執行結果視窗的呈現,先不用理它,後面我在細講。

預覽資料3

2.5.4 表輸出

資料已經從源表中抽取,並完成了連線,就差一步了,再聽我囉嗦囉嗦唄。

從“核心物件”的“輸出”資料夾中,將“表輸出”拖拽出來,並建立它與“記錄集連線”的Transformation-Hop。

雙擊“表輸出”,得到其屬性對話方塊:

表輸出

  • 步驟名稱:記住不可重複。
  • 資料庫連線:這裡我們又新建了一個test。
  • 目標模式:就是選擇資料庫連線中的資料庫,但是這裡資料庫連線裡已經選擇了資料庫,所以點選“瀏覽”獲取不到任何資訊。
  • 目標表:就是整合後的資料要匯入的表,通過點選“瀏覽”開啟“資料庫瀏覽器”進行選擇,也可以手動填寫。
  • 提交記錄數量:在資料表中用事務插入行的行數,如果N比0大,每N行提交一次連線。否則,不使用事務,速度會慢一些。
  • 裁剪表:就是對目標表執行“Truncate Table”操作,清空其原始資料,之前我們著重介紹過,希望你沒有忘記它。
  • 指定資料庫欄位:這個是必須勾選的,反正每次我都會勾選。勾選後,Tab頁“資料庫欄位”的“獲取欄位”和“輸入欄位對映”才會可點選。
  • 兩個Tab頁
    • Tab頁“主選項”
      • 表分割槽資料:使用這個選項可以在多個表之間拆分資料。
      • 表名定義在一個欄位:使用這些選項可以拆分資料到一個或多個表裡,目標表名可以用你指定的欄位來定義。例如如果你想儲存顧客性別資料,這些資料可能會儲存到表M和表F裡面(female 女性和male 男性表)。這個選項可以阻止這些欄位插入到對應的表裡。
      • 批量插入:如果你想批量插入的話,就使用這個選項。這個選項的速度最快,預設被選上。
      • 返回一個自動產生的關鍵字:往表中插入行時,是否產生一個關鍵字。
      • 自動產生關鍵字的欄位名稱:指定包含關鍵字的輸出欄位的欄位名稱。
      • 指定資料庫欄位:只匯入指定的欄位,多餘的欄位忽略。
    • Tab頁“資料庫欄位”
      • 獲取欄位:Kettle會把上一個步驟“記錄集連線”輸入過來的所有欄位都拉取出來,並與目標表的欄位做名稱上的對應,若目標表沒有的欄位直接命名為輸入欄位名。有點繞口哈。如你感覺Kettle自動生成的對映有問題,你可以點選相應的欄位名,會出現下列列表供你選擇應該對應的欄位名。
        選擇欄位
      • 輸入欄位對映:初次點選也許會報錯,因為有些表字段在目標表中並不存在,若這些欄位確實不需要你可以刪除它們。刪除後再點選“輸入欄位對映”,會出現如下對話方塊:
        對映匹配
        在這裡對欄位進行對映要遠比在上一個對話方塊要清晰且方便。
        • 如果需要調整對應關係的話,可以在對映區,選中一個,然後點選刪除,它們之間的對映關係就不存在了,重新回到了源欄位目標欄位
        • 源欄位目標欄位分別選中一個欄位,然後點選ADD,它們就會出現在對映區;
        • 點選猜一猜,Kettle會自動給你建立相應的連線,是根據欄位名匹配的,所以前面的步驟你可以有意識地命名一些與目標表欄位名相同的名稱。
  • SQL:點選右下角的“SQL”,會對“插入的欄位”中的“表字段”與目標表的欄位進行對比,若有目標表不存在的表字段會出現如下對話方塊:
    SQL編輯器

根據需求若這些表字段確實需要保留,可以點選“執行”來修改目標表的表結構新增這些欄位。

2.5.5 小例子轉換的整體效果圖

整體

是不是感覺我其實挺有藝術氣息的,哈哈~

此時,我們就完成了這個小例子“從sampdb資料庫查出學生資訊和分數資訊,並匯入test資料庫中的student_grade_score表中”

2.5.6 執行轉換

按快捷鍵“F9”(其他的方式你自己嘗試,我就是這麼懶,愛用快捷鍵),執行該轉換。 執行結果如下所示:

執行

多完美,都是綠色的√號,說明該轉換成功執行,沒有任何錯誤。

其實這是同一個資料庫的資訊獲取,完全可以通過編寫SQL用單個“表輸入”解決,就像第二個“表輸入”中的SQL語句。這裡為了例子的豐富性,就用兩個“表輸入”加“記錄集連線”來呈現。實際中,我們經常要從不同的資料來源整合資料,再匯入到其他的資料庫,這個例子是非常簡單的基礎運用。

2.6 執行結果

這裡沿用“2.5 核心物件”中的小例子。

2.6.1 日誌

日誌裡記錄了一些執行資訊,即每個步驟的執行情況。

  1. 執行成功後,日誌如下圖所示:
    執行日誌
    其中有幾個比價關鍵的輸出資訊:
  • I:表示從表中讀取了多少行資料;
  • O:表示向目標表中寫入了多少行資料;
  • R:從之前的步驟中讀取了多少行資料;
  • W:向下一個步驟寫入了多少行資料;
  • U:當前步驟更新過的記錄數;
  • E:當前步驟處理的記錄數。
  1. 這裡我故意在“表輸出”中“表字段”添加了“student_id_1”這個目標表並不存在的欄位,造成該轉換無法執行成功。

執行不成功的日誌如下圖所示:

執行失敗

日誌中明確指出了“Unknown column ‘student_id_1’ in ‘field_list’”,即student_id_1在目標表中不存在。

當報錯後,檢視日誌,能讓我們獲取其報錯原因,有利於修改步驟。

2.6.2 步驟度量

如下圖所示,這裡記錄每個步驟執行的一些度量資訊。

步驟度量

  • 讀、寫、輸入、輸出、更新、拒絕和錯誤的行數;
  • 啟用是執行的狀態,錯誤的話整行都會出現紅色背景;
  • 時間就是執行的時間;
  • 速度:就是處理資料的速度,單位為“條記錄/秒”。

2.6.3 Preview data

執行完後,可以瀏覽每個步驟的資料,檢視這個Tab頁,然後點選不同的元件,就會呈現出每個步驟對外的輸出結果集。

如“記錄集連線”的效果圖如下:

預覽資料4

結束語

好了,講到這裡我們的Kettle基礎教學就結束了。

相信大家肯定對Kettle有了最基本的一些認識,Kettle的架構,Kettle的使用場景,尤其是Kettle的基礎結構的理解。然後對Spoon的介面使用做了重點介紹,因為這將是我們使用kettle最常用的工具。最後我們通過一個小例子學習瞭如何設計Transformation,講述了三個基本的步驟(我個人還是喜歡用元件來稱呼它),並講述了執行結果,如何預覽資料,通過檢視日誌查詢錯誤原因等知識。

通過以上講述,希望你能對Kettle有個最基本的認識。

謝謝大家,花費時間看完本檔案。如果它對你認識和使用Kettle起到了一定的輔助作用,將是我最願意見到的事情!