Kettle能作什麼?

     簡介 

Kettle是一款國外開源的ETL工具,純java編寫,能夠在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。java

Kettle 中文名稱叫水壺,該項目的主程序員MATT 但願把各類數據放到一個壺裏,而後以一種指定的格式流出。  linux

Kettle這個ETL工具集,它容許你管理來自不一樣數據庫的數據,經過提供一個圖形化的用戶環境來描述你想作什麼,而不是你想怎麼作。 程序員

Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工做流的控制。 sql

Kettle能夠在http://kettle.pentaho.org/網站下載到。 shell

    術語

1. Transformation 轉換步驟,能夠理解爲將一個或者多個不一樣的數據源組裝成一條數據流水線。而後最終輸出到某一個地方,文件或者數據庫等。數據庫

2. Job 做業,能夠調度設計好的轉換,也能夠執行一些文件處理(比較,刪除等),還能夠 ftp 上 傳,下載文件,發送郵件,執行 shell 命令等緩存

3. Hop 鏈接轉換步驟或者鏈接 Job(實際上就是執行順序) 的連線 Transformation hop:主要表示數據的流向。從輸入,過濾等轉換操做,到輸出。網絡

       Job hop:可設置執行條件: 1, 無條件執行  2, 當上一個 Job 執行結果爲 true 時執行  3, 當上一個 Job 執行結果爲 false 時執行數據結構

 

 

     應用場景

  • 表視圖模式:這種狀況咱們常常遇到,就是在同一網絡環境下,咱們對各類數據源的表數據進行抽取、過濾、清洗等,例如歷史數據同步、異構系統數據交互、數據對稱發佈或備份等都歸屬於這個模式;傳統的實現方式通常都要進行研發(一小部分例如兩個相同表結構的表之間的數據同步,若是sqlserver數據庫能夠經過發佈/訂閱實現),涉及到一些複雜的一些業務邏輯若是咱們研發出來還容易出各類bug;工具

  • 前置機模式:這是一種典型的數據交換應用場景,數據交換的雙方A和B網絡不通,可是A和B均可以和前置機C鏈接,通常的狀況是雙方約定好前置機的數據結構,這個結構跟A和B的數據結構基本上是不一致的,這樣咱們就須要把應用上的數據按照數據標準推送到前置機上,這個研發工做量仍是比較大的;

  • 文件模式: 數據交互的雙方A和B是徹底的物理隔離,這樣就只能經過以文件的方式來進行數據交互了,例如XML格式,在應用A中咱們開發一個接口用來生成標準格式的XML,而後用優盤或者別的介質在某一時間把XML數據拷貝以後,而後接入到應用B上,應用B上在按照標準接口解析相應的文件把數據接收過來;

   kettle的組成

   SPOON:容許你經過圖形界面來設計ETL轉換過程(Transformation)。
   PAN:容許你批量運行由Spoon設計的ETL轉換 (例如使用一個時間調度器)。Pan是一個後臺執行的程序,沒有圖形界面。
   CHEF :容許你建立任務(Job)。 任務經過容許每一個轉換,任務,腳本等等,更有利於自動化更新數據倉庫的複雜工做。任務經過容許每一個轉換,任務,腳本等等。
   KITCHEN:容許你批量使用由Chef設計的任務 (例如使用一個時間調度器)。KITCHEN也是一個後臺運行的程序。

     tips:linux上執行job kitchen.sh -file=/PRD/updateWarehouse.kjb -level=Minimal

             執行轉換 pan.sh -file=/PRD/updateWarehouse.kjb -level=Minimal

 

   Transformation組件樹介紹

  Transformation中的節點介紹以下:

  • Main Tree:菜單列出的是一個transformation中基本的屬性,能夠經過各個節點來查看。
  • DB鏈接:顯示當前transformation中的數據庫鏈接,每個transformation的數據庫鏈接都須要單獨配置。
  • Steps:一個transformation中應用到的環節列表
  • Hops:一個transformation中應用到的節點鏈接列表 
    核心對象菜單列出的是transformation中能夠調用的環節列表,能夠經過鼠標拖動的方式對環節進行添加。
  • Input:輸入環節
  • Output:輸出環節
  • Lookup:查詢環節
  • Transform:轉化環節
  • Joins:鏈接環節
  • Scripting:腳本環節

  Job組件樹介紹

Job中的節點介紹以下:

    • Main Tree:列出的是一個Job中基本的屬性,能夠經過各個節點來查看。 
      DB鏈接:顯示當前Job中的數據庫鏈接,每個Job的數據庫鏈接都須要單獨配置。
    • Job entries/做業項目:一個Job中引用的環節列表 
      核心對象菜單列出的是Job中能夠調用的環節列表,能夠經過鼠標拖動的方式對環節進行添加。 
      每個環節能夠經過鼠標拖動來將環節添加到主窗口中。 
      並可經過shift+鼠標拖動,實現環節之間的鏈接。

 常常遇到問題:

1.  如何鏈接資源庫?

若是沒有則建立資源庫

 


2.  如何鏈接數據庫?

在鏈接數據庫以前,首先須要保證當前在一個transform(轉換)頁面,而後點擊左側選項欄中的「主對象樹」,而後右鍵點擊「DB鏈接」,選擇「新建」。

固然也能夠設置一些其餘的鏈接屬性,如zeroDateTimeBehavior=round&characterEncoding=utf8。

 


3.  如何解決數據庫鏈接更新不及時問題?

有時候咱們數據庫中的表的字段進行了更新(增長或刪除字段),可是在使用「表輸入」控件的「獲取SQL語句」功能是會發現的到的字段仍是原來的字段,這是因爲緩存形成的,須要進行緩存清理。

4.  如何解決Unable to read file錯誤?

有時候咱們在文件夾中將Job或Transform移動到其餘目錄以後,執行時會出現Unable to read file錯誤。而後就進入到了當前Transform的配置頁面。修改配置中的目錄便可。

5.  如何解決tinyint類型數據丟失問題?

在Kettle使用JDBC鏈接MySQL時,對於表中數據類型爲tinyint的字段,讀取時有可能會將其轉爲bool類型,這有可能形成數據丟失。例如,有一個叫status名字的tinyint類型字段,取值有三種:0、一、2。kettle讀取以後極可能將0轉爲false,一、2都轉爲true。輸出時,將false轉爲0,true轉爲1,這樣就會形成元數據中status爲2的數據被錯誤的賦值爲1。解決這個問題時,能夠在讀取元數據時將status轉爲int或char。好比SELECT CAST(status as signed) as status FROM <table_name>或SELECT CAST(status as char) as status FROM <table_name>

相關文章
相關標籤/搜索