Kettle — 常用組件使用

前言

Kettle控件分爲三種:轉換控件、作業控件和Hop(跳)。

轉換控件

輸入控件

表輸入

表輸入控件是從數據庫的表中讀取數據的控件。我們可以在表中輸入SQL語句(或者通過獲取SQL查詢語句獲取)。比如我們通過獲取SQL查詢語句獲取到SQL語句,我們可以預覽這個轉換。

預覽結果如下所示:

對於查詢語句而言,肯定是需要進行篩選的,這樣就需要進行變量的引用。在Kettle中只要有替換SQL語句裏的變量這個選項,就說明是支持變量的引用。還有就是允許簡易轉換的選項:勾選後可以避免不必要的字段的數據類型轉換,從而提高性能。

使用方式如下所示(對變量使用${var}):

然後雙擊空白處,對轉換屬性—參數名稱進行設置。

預覽結果

或者直接用Job其他控件輸入該屬性值,比如下面的設置變量控件。

下面是Java類型與Kettle類型對應:

  case ValueMetaInterface.TYPE_STRING: // Kettle類型
    parameterType = String.class; // Java類型
    break;
  case ValueMetaInterface.TYPE_NUMBER:
    parameterType = Double.class;
    break;
  case ValueMetaInterface.TYPE_INTEGER:
    parameterType = Long.class;
    break;
  case ValueMetaInterface.TYPE_DATE:
    parameterType = Date.class;
    break;
  case ValueMetaInterface.TYPE_BIGNUMBER:
    parameterType = BigDecimal.class;
    break;
  case ValueMetaInterface.TYPE_BOOLEAN:
    parameterType = Boolean.class;
    break;
  case ValueMetaInterface.TYPE_BINARY:
    parameterType = byte[].class;
    break;
  default:
    parameterType = String.class;
    break;

自定義常量數據

自定義常量數據可以允許自定義表和數據,通常用於測試或者固定數據的輸入(這裏輸入還有一個生成記錄控件,但是該記錄生成的記錄每條都是相等的)。對於自定義常量數據控件我們可以設置列名和自定義每一行的數據,下面就是設置列名(元數據)和行(數據)。

獲取系統信息

通過獲取系統信息控件,我們可以獲取系統的時間、轉換或者作業的開始結束時間(用於增量)、主機信息、上一個作業完成情況和命令行參數等。通過類型的選擇可以選擇多種類型,這裏我們選擇命令行參數。

下面是完整的樣例。

表輸入配置如下所示(要選擇獲取系統信息):

最後添加的文本輸出是爲了驗證結果。轉換的參數配置後,啓動時還需要輸入值,不然表輸入就拿不到值。

文本文件輸入

文本文件輸入是一個比較複雜的處理過程,它可以從多種格式的文件中讀取數據,功能非常的強大。下面是一個簡單的使用,我們需要瀏覽選擇一個文件,然後將這個文件增加到選中的文件中。

在內容中設置分隔符。

然後在字段頁籤獲取字段,然後預覽一下是否成功。

下面具體介紹一下文本文件輸入的各個選項。

首先從文本來源上來說,獲取文件的方式有兩種:直接選擇本地文件(剛剛的選擇方式)和從上個步驟獲取文件名。

這裏說明一下從上個步驟獲取文件名,如下所示。要先使用一個獲取文件名的控件,獲取文件名。

然後在文本文件輸入中配置從上個步驟獲取文件名。記住要配置在輸入裏的字段被當作文件名爲filename,不然會報錯的。

下面說一下文本文件輸入中的內容設置選項。

1)分隔符和文本限定符:分隔符是對文本字段進行分割;而內容限定符是當文本字段中有分隔符作爲字段內容一部分的時候,就需要文本限定符將該字段內容包裹起來,如下所示。

2)逃逸字符:類似於編程中的轉義字符"\",比如\n就代表回車、\r就是tab鍵。利用逃逸字符我們可以自己設定轉義字符,這裏我就按照Java中將"\"設置爲逃逸字符。

同時文本輸入是有過濾的功能的,如下所示,我們可以設置過濾的字符串。

結果如下所示。這個工具有些東西看的有些耐人尋味,比如積極匹配選擇是,就會出現只有被過濾的數據。

其他輸出字段,在這裏可以選擇於文件相關的字段輸出。

CSV文件輸入

CSV文件輸入的讀取要比文本文件輸入要簡單。但是因爲利用了NIO、並行和延遲轉換,效率大大的提高。如下所示(CSV不僅僅可以讀取CSV文件還可以讀取其他文件):

固定寬度文件輸入

這種輸入方式的行寬度是一定的,字段的寬度也是一定的,不需要分隔符解析,性能比較好,但是非常的不靈活。使用方式如下所示,主要是要設置行寬度和每一個字段的寬度。

XML文件輸入(Get data from XML)

XML文件輸入能從XML讀取每一個元素作爲字段。下面是是從本地XML文件輸入,這裏選擇了三個文件。

在內容中,主要是要設置循環讀取路徑(從XML哪個層次結構開始讀取)。還有幾個屬性也是需要知道的,比如:

         考慮命名空間:選中此項即可識別XML文檔名稱空間

         驗證XML:在解析之前會驗證XML格式

         使用標記(user token):參考https://www.cnblogs.com/wind-man/p/7898145.html

         用於截取數據的XML路徑(大文件):與大文件的處理相關

最後說一下附件字段:一個是內容是獲取文件;還有一個是行號。

在字段中只要獲取字段,然後選擇自己輸出的字段即可。最後的其他字段和之前將的都是相同的。

在上面只說了從本地的目錄或者文件中獲取XML文件,下面說一下如何從上一個步驟中獲取XML文件。這裏我先通過自定義常量數據控件,定義了三個文件的路徑。

下面是需要勾選XML源是文件名這個選項。因爲如果不勾選,就會將XML源字段名中的數據當做XML的源數據,而不是文件名。

JSON文件輸入

JSON文件輸入的使用方式與XML文件輸入類似,主要是對JSON格式的數據源進行解析。下面的事例是從一個URL中獲取JSON數據,然後傳遞給JSON文件輸入進行解析。

字段配置中路徑要按照Json Path規則進行編寫

自定義常量數據Path數據。

其他輸入控件,比如SAP Input、XML輸入流、Cube文件輸入、Excel輸入、LDAP輸入、Yaml輸入、郵件信息輸入、生成隨機數、獲取子目錄名、取資源庫配置、配置文件輸入、獲取文件行數等,等以後用到了再添加。

輸出控件

文本文件輸出

  1. 啓動Carte

Excel輸出

將輸出的記錄以一定格式保留到Excel中。Excel輸出的具體使用方式如下所示:

先輸入文件名,然後下面有很多選項,來共同組成一個文件的文件名,選擇自己需要的即可。最後獲取一下字段。

執行一下查看結果

Excel輸出有兩個版本,一個是上面的普通版本支持(65536的行數限制),一個是07年以後版本的支持

表輸出

表輸出還是比較複雜的控件,通過對錶輸出控件使用方式的講解,應該會對輸出控件使用規律有一定的瞭解,下面的是表輸出控件的配置界面。

上面我們可以看到頭部最重要的配置就是數據庫連接、目標表和指定數據庫字段。在目標表中,我們可以選擇一個表,然後通過DDL—使用當前連接生成一個新的表。

指定數據庫字段選項是讓我們可以選擇插入的字段。

輸入字段映射字段映射,使用猜一猜功能(如果映射有問題,手動再改一下)。這裏有一個區別點獲取字段在後面的流程中沒有獲取的字段就不會顯示,如果是字段映射則仍然存在。

這樣一個簡單的表輸出就能使用了。還有這裏要說明一點的是如果在主選項中選擇了使用批量插入,那麼忽略插入錯誤就不能使用;裁剪表的意思就是等於truncate table(清空表)。

在主選項中選擇返回一個自動產生的關鍵字選項,可以返回插入的數據的主鍵值,這樣在下面的步驟講不定就可以使用到了。

選擇表分區數據,可以進行數據庫表的分區(分區表需要自己提前創建,例如async_user_201808、async_user_201809)。還有一個是要選擇分區的字段,該字段需要是Date或者TimeStamp類型。Kettle表輸出只能以時間分區(月/日)。

刪除

刪除其實就是數據庫操作的DELETE操作。只要配置數據庫、表和刪除的條件即可。

插入/更新

該控件一般不推薦使用效率太低,直接使用表輸出和更新替代(更新的使用也更簡單,這裏就不提了)。插入/更新操作也很簡單,主要將一下關鍵字的匹配,如果找到匹配的值,就更新值;不存在就插入新值。

數據同步

MySql批量加載

SQL文件輸出

根據選中的數據庫類型,生成相應的 SQL 腳本(DDL和DML)。使用也很簡單,如下所示:

生成的SQL語句如下所示。

XML輸出

XML輸出和普通輸出幾乎差不多,這裏主要說一下內容父XML元素和記錄XML元素。

如果元素名稱不填,文件名稱等於元素名稱。

輸入後的結果如下所示。

Hop的使用

在Kettle中控件之間的連線叫做Hop(跳)。

轉換中Hop的狀態

在轉換中,一般情況,控件和控件之間只有一個Hop,當然,如果需要的話,我們拖了2個控件出來,像這樣:

 分發記錄

目標步驟輪流接收記錄,其實就是你一條,我一條,輪着接收數據。

我們執行下,看看這個結果試試,我們在步驟度量中可以看到a.txt和b.txt分別寫入的數量:

看看結果文件,就是這樣的

複製記錄

所有記錄同時發送到所有的目標步驟。比如上面的例子,2個文本文件會接收到同樣的所有的數據。

結果文件的話,就是2個節點,接收到的數據都是一樣的。

作業中Hop的狀態

在作業中,Hop主要用來控制流程。

有3種狀態,一個鎖,一個綠色的對號,一個紅色的叉號

簡單來說,

:表示無論上一步執行成功還是失敗,都一定會執行下一步

:表示上一步執行成功纔會執行下一步

:表示上一步執行失敗執行下一步

比如我們上面的例子,我們的轉換執行成功後就結束了;如果轉換執行失敗了,我們就發送郵件。

===============================================================================

| Kettle中文社區:http://www.ukettle.org

| Kettle中文網:http://www.kettle.net.cn/

| Kettle源碼地址:https://github.com/pentaho/pentaho-kettle

| Kettle 官方幫助文檔:https://help.pentaho.com/Documentation/8.1

===============================================================================

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章