Kettle有什么功能


轉載地址:https://www.cnblogs.com/gala1021/p/7814712.html

     簡介 

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

Kettle 中文名稱叫水壺,該項目的主程序員MATT 希望把各種數據放到一個壺里,然后以一種指定的格式流出。  

Kettle這個ETL工具集,它允許你管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什么,而不是你想怎么做。 

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

Kettle可以在http://kettle.pentaho.org/網站下載到。 

    術語

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、1、2。kettle讀取之后很可能將0轉為false,1、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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM