日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ETL工具】-Kettle详细教程

發(fā)布時(shí)間:2023/12/31 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ETL工具】-Kettle详细教程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一 Kettle概述

1.1 ETL簡介

ETL(Extract-Transform-Load的縮寫,即數(shù)據(jù)抽取、轉(zhuǎn)換、裝載的過程),對于企業(yè)或行業(yè)應(yīng)用來說,經(jīng)常會(huì)遇到各種數(shù)據(jù)的處理,轉(zhuǎn)換,遷移,所以了解并掌握一種ETL工具的使用,必不可少。

市面上常用的ETL工具有很多,比如Sqoop,DataX,Kettle等。

1.2 Kettle簡介

1.2.1 Kettle是什么

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

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

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

Kettle中有兩種腳本文件,transformation和job,transformation完成針對數(shù)據(jù)的基礎(chǔ)轉(zhuǎn)換,job則完成整個(gè)工作流的控制。

Kettle(現(xiàn)在已經(jīng)更名為PDI,Pentaho Data Integration-Pentaho數(shù)據(jù)集成)。

1.2.2 Kettle的兩種設(shè)計(jì)

1.2.3 Kettle的核心組件

1.2.4 Kettle特點(diǎn)

二 Kettle安裝部署

2.1 Kettle下載

2.1.1 下載地址

官網(wǎng)地址

https://community.hitachivantara.com/docs/DOC-1009855

下載地址

https://sourceforge.net/projects/pentaho/files/Data%20Integration/

2.1.2 Kettle目錄說明

2.1.3 Kettle文件說明

2.2 Kettle安裝部署

2.2.1 概述

在實(shí)際企業(yè)開發(fā)中,都是在本地Windows環(huán)境下進(jìn)行kettle的job和Transformation開發(fā)的,可以在本地運(yùn)行,也可以連接遠(yuǎn)程機(jī)器運(yùn)行

2.2.2 安裝

1) 安裝jdk,版本建議1.8及以上

2) 下載kettle壓縮包,因kettle為綠色軟件,解壓縮到任意本地路徑即可

3) 雙擊Spoon.bat,啟動(dòng)圖形化界面工具,就可以直接使用了

2.3 Kettle界面簡介

2.3.1 首頁

2.3.2 轉(zhuǎn)換

2.3.3 作業(yè)

2.4 Kettle轉(zhuǎn)換初次體驗(yàn)

體驗(yàn)案例:將csv文件用Kettle轉(zhuǎn)換成excel文件

  • 在Kettle中新建一個(gè)轉(zhuǎn)換,然后選擇轉(zhuǎn)換下面的“csv文件輸入”和“Excel輸出”控件
  • 雙擊CSV文件輸入文件控件,在彈出的設(shè)置框里找到對應(yīng)的csv文件(Kettle數(shù)據(jù)\input\01_kettle快速體驗(yàn).csv),然后點(diǎn)擊下面的獲取字段按鈕,將我們需要的字段加載到kettle中
  • 3)按住鍵盤SHIFT鍵,并且點(diǎn)擊鼠標(biāo)左鍵將兩個(gè)控件鏈接起來,鏈接時(shí)選擇“主輸出步驟”

    4)雙擊Excel輸出控件,在彈出的設(shè)置框里設(shè)置文件輸出路徑和文件名稱,然后點(diǎn)擊上面的字段框,依次點(diǎn)擊下面的獲取字段和最小寬度,獲取到輸出字段。

    5)點(diǎn)擊左上角的啟動(dòng)按鈕,在彈出的設(shè)置框里點(diǎn)擊啟動(dòng),執(zhí)行該轉(zhuǎn)換。

    6)查看kettle下方執(zhí)行結(jié)果日志以及輸出路徑的Excel文件內(nèi)容

    2.5 Kettle核心概念

    2.5.1 可視化編程

    Kettle可以被歸類為可視化編程語言(Visula Programming Languages,VPL),因?yàn)镵ettle可以使用圖形化的方式定義復(fù)雜的ETL程序和工作流。

    可視化編程一直是Kettle里的核心概念,它可以讓你快速構(gòu)建復(fù)雜的ETL作業(yè)和減低維護(hù)工作量。它通過隱藏很多技術(shù)細(xì)節(jié),使IT領(lǐng)域更貼近于商務(wù)領(lǐng)域。

    Kettle里的代碼就是轉(zhuǎn)換和作業(yè)。

    2.5.2 轉(zhuǎn)換

    轉(zhuǎn)換(transaformation)負(fù)責(zé)數(shù)據(jù)的輸入、轉(zhuǎn)換、校驗(yàn)和輸出等工作。Kettle 中使用轉(zhuǎn)換完成數(shù)據(jù) ETL 全部工作。轉(zhuǎn)換由多個(gè)步驟 (Step) 組成,如文本文件輸入,過濾輸出行,執(zhí)行 SQL 腳本等。各個(gè)步驟使用跳 (Hop) 來鏈接。 跳定義了一個(gè)數(shù)據(jù)流通道,即數(shù)據(jù)由一個(gè)步驟流 (跳) 向下一個(gè)步驟。在 Kettle 中數(shù)據(jù)的最小單位是數(shù)據(jù)行(row),數(shù)據(jù)流中流動(dòng)其實(shí)是緩存的行集 (RowSet) 。

    2.5.3 步驟(Step)

    步驟(控件)是轉(zhuǎn)換里的基本的組成部分,剛才的案例中就存在兩個(gè)步驟,“CSV文件輸入”和“Excel輸出”。

    一個(gè)步驟有如下幾個(gè)關(guān)鍵特性:

    ①步驟需要有一個(gè)名字,這個(gè)名字在同一個(gè)轉(zhuǎn)換范圍內(nèi)唯一。

    ②每個(gè)步驟都會(huì)讀、寫數(shù)據(jù)行(唯一例外是“生成記錄”步驟,該步驟只寫數(shù)據(jù))。

    ③步驟將數(shù)據(jù)寫到與之相連的一個(gè)或多個(gè)輸出跳(hop),再傳送到跳的另一端的步驟。

    ④大多數(shù)的步驟都可以有多個(gè)輸出跳。一個(gè)步驟的數(shù)據(jù)發(fā)送可以被設(shè)置為分發(fā)和復(fù)制,分發(fā)是目標(biāo)步驟輪流接收記錄,復(fù)制是所有的記錄被同時(shí)發(fā)送到所有的目標(biāo)步驟。

    2.5.4 跳(Hop)

    跳就是步驟之間帶箭頭的連線,跳定義了步驟之間的數(shù)據(jù)通路。

    跳實(shí)際上是兩個(gè)步驟之間的被稱之為行集的數(shù)據(jù)行緩存,行集的大小可以在轉(zhuǎn)換的設(shè)置里定義。當(dāng)行集滿了,向行集寫數(shù)據(jù)的步驟將停止寫入,直到行集里又有了空間。當(dāng)行集空了,從行集讀取數(shù)據(jù)的步驟停止讀取,直到行集里又有可讀的數(shù)據(jù)行。

    2.5.5 元數(shù)據(jù)

    每個(gè)步驟在輸出數(shù)據(jù)行時(shí)都有對字段的描述,這種描述就是數(shù)據(jù)行的元數(shù)據(jù)。

    通常包含下面一些信息。

    ①名稱:數(shù)據(jù)行里的字段名是唯一的。

    ②數(shù)據(jù)類型:字段的數(shù)據(jù)類型。

    ③格式:數(shù)據(jù)顯示的方式,如Integer的#、0.00。

    ④長度:字符串的長度或者BigNumber類型的長度。

    ⑤精度:BigNumber數(shù)據(jù)類型的十進(jìn)制精度。

    ⑥貨幣符號(hào):¥

    ⑦小數(shù)點(diǎn)符號(hào):十進(jìn)制數(shù)據(jù)的小數(shù)點(diǎn)格式。不同文化背景下小數(shù)點(diǎn)符號(hào)是不同的,一般是點(diǎn)(.)或逗號(hào)(,)。

    ⑧分組符號(hào):數(shù)值類型數(shù)據(jù)的分組符號(hào),不同文化背景下數(shù)字里的分組符號(hào)也是不同的,一般是點(diǎn)(.)或逗號(hào)(,)或單引號(hào)(’)

    2.5.6 數(shù)據(jù)類型

    數(shù)據(jù)以數(shù)據(jù)行的形式沿著步驟移動(dòng)。一個(gè)數(shù)據(jù)行是零到多個(gè)字段的集合,字段包含下面幾種數(shù)據(jù)類型。

    ①String:字符類型數(shù)據(jù)

    ②Number:雙精度浮點(diǎn)數(shù)。

    ③Integer:帶符號(hào)長整型(64位)。

    ④BigNumber:任意精度數(shù)據(jù)。

    ⑤Date:帶毫秒精度的日期時(shí)間值。

    ⑥Boolean:取值為true和false的布爾值。

    ⑦Binary:二進(jìn)制字段可以包含圖像、聲音、視頻及其他類型的二進(jìn)制數(shù)據(jù)。

    2.5.7 并行

    跳的這種基于行集緩存的規(guī)則允許每個(gè)步驟都是由一個(gè)獨(dú)立的線程運(yùn)行,這樣并發(fā)程度最高。這一規(guī)則也允許數(shù)據(jù)以最小消耗內(nèi)存的數(shù)據(jù)流的方式來處理。在數(shù)據(jù)倉庫里,我們經(jīng)常要處理大量數(shù)據(jù),所以這種高并發(fā)低消耗的方式也是ETL工具的核心需求。

    對于kettle的轉(zhuǎn)換,不能定義一個(gè)執(zhí)行順序,因?yàn)樗胁襟E都以并發(fā)方式執(zhí)行:當(dāng)轉(zhuǎn)換啟動(dòng)后,所有步驟都同時(shí)啟動(dòng),從它們的輸入跳中讀取數(shù)據(jù),并把處理過的數(shù)據(jù)寫到輸出跳,直到輸入跳里不再有數(shù)據(jù),就中止步驟的運(yùn)行。當(dāng)所有的步驟都中止了,整個(gè)轉(zhuǎn)換就中止了。

    如果你想要一個(gè)任務(wù)沿著指定的順序執(zhí)行,那么就要使用下面的“作業(yè)”!

    2.5.8 作業(yè)

    作業(yè)?(Job),負(fù)責(zé)定義一個(gè)完成整個(gè)工作流的控制,比如將轉(zhuǎn)換的結(jié)果發(fā)送郵件給相關(guān)人員。因?yàn)檗D(zhuǎn)換(transformation)以并行方式執(zhí)行,所以必須存在一個(gè)串行的調(diào)度工具來執(zhí)行轉(zhuǎn)換,這就是 Kettle中的作業(yè)。

    三 Kettle轉(zhuǎn)換

    3.1 Kettle輸入控件

    輸入是轉(zhuǎn)換里面的第一個(gè)分類,輸入控件也是轉(zhuǎn)換中的第一大控件,用來抽取數(shù)據(jù)或者生成數(shù)據(jù)。輸入是ETL里面的E(Extract),主要做數(shù)據(jù)提取的工作。

    由于Kettle中自帶的輸入控件比較多,本次只挑出開發(fā)中經(jīng)常使用的幾個(gè)輸入控件來進(jìn)行講解。

    3.1.1 CSV文件輸入

    CSV文件是一個(gè)用逗號(hào)分隔的固定格式的文本文件,這種文件后綴名為.csv,可以用Excel或者文本編輯器打開。在企業(yè)里面一般最常見的ETL需求就是將csv文件轉(zhuǎn)換為excel文件,如果用Kettle來做這個(gè)ETL工作,就需要用到CSV文件輸入控件。

    任務(wù):將CSV文件轉(zhuǎn)換成Excel文件。

  • 步驟名稱:可以修改,但是在同一個(gè)轉(zhuǎn)換里面要保證唯一性,見名知意;
  • 文件名:選擇對應(yīng)的csv文件;
  • 列分隔符:默認(rèn)是逗號(hào);
  • 封閉符:結(jié)束行數(shù)據(jù)的讀寫;
  • NIO緩存大小:文件如果行數(shù)過多,需要調(diào)整此參數(shù);
  • 包含列頭行:意思是文件中第一行是字段名稱行,表頭不進(jìn)行讀寫;
  • 行號(hào)字段:如果文件第一行不是字段名稱或者需要從某行開始讀寫,可在此輸入行號(hào)。
  • 并發(fā)運(yùn)行?:選擇并發(fā),可提高讀寫速度;
  • 字段中有回車換行?:不要選擇,會(huì)將換行符做數(shù)據(jù)讀出;
  • 文件編碼:如果預(yù)覽數(shù)據(jù)出現(xiàn)亂碼,可更換文件編碼;
  • 3.1.2 文本文件輸入

    提取服務(wù)器上的日志信息是公司里ETL開發(fā)很常見的操作,日志信息基本上都是文本類型,因此文本文件輸入控件是kettle中常用的一個(gè)輸入控件。使用文本文件輸入控件步驟:

  • 添加需要轉(zhuǎn)換的日志文件
  • 按照日志文件格式,指定分隔符
  • 獲取下字段,并給字段設(shè)置合適的格式
  • 最后點(diǎn)下預(yù)覽記錄,看看能否讀到數(shù)據(jù)
  • 任務(wù):將txt日志文件轉(zhuǎn)換為Excel文件

    3.1.3 Excel輸入

    Excel輸入控件也是很常用的輸入控件,一般企業(yè)里會(huì)用此控件對大量的Excel文件進(jìn)行ETL操作。使用Excel輸入控件步驟如下:

  • 按照讀取的源文件格式指定對應(yīng)的表格類型為xls還是xlsx
  • 選擇并添加對應(yīng)的excel文件
  • 獲取excel的sheet工作表
  • 獲取字段,并給每個(gè)字段設(shè)置合適的格式
  • 預(yù)覽數(shù)據(jù)
  • 本章節(jié)任務(wù):將excel文件的兩個(gè)sheet表格的數(shù)據(jù)重新寫到一個(gè)新的excel文件中

    3.1.4 表輸入

    1)創(chuàng)建數(shù)據(jù)庫連接

    表輸入可以說是kettle中用到最多的一種輸入控件,因?yàn)槠髽I(yè)中大部分的數(shù)據(jù)都會(huì)存在數(shù)據(jù)庫中。kettle可以連接市面上常見的各種數(shù)據(jù)庫,比如Oracle,Mysql,SqlServer,DB2等。但是在連接各個(gè)數(shù)據(jù)庫之前,我們需要先配置好對應(yīng)的數(shù)據(jù)庫驅(qū)動(dòng),本次以mysql為例,給大家演示kettle連接mysql數(shù)據(jù)庫的過程。

    首先我們要將對應(yīng)版本的mysql連接驅(qū)動(dòng)放到kettle安裝目錄下面的lib文件夾下,然后重啟kettle的客戶端Spoon

    重啟Spoon客戶端以后,我們就可以創(chuàng)建對應(yīng)的數(shù)據(jù)庫連接了,在轉(zhuǎn)換視圖的主對象樹目錄下,有個(gè)DB連接,右鍵然后選擇新建,在打開數(shù)據(jù)庫連接框里,填寫正確的數(shù)據(jù)庫信息,然后測試,測試無誤后,可以保存此數(shù)據(jù)庫連接。

    數(shù)據(jù)庫連接默認(rèn)只對本轉(zhuǎn)換有效,換一個(gè)轉(zhuǎn)換以后,這個(gè)連接就沒法用了,還需要新建數(shù)據(jù)庫連接,所以我們需要將建好的這個(gè)數(shù)據(jù)庫連接進(jìn)行共享下,共享以后,其他的轉(zhuǎn)換也能用我們提前建好的這個(gè)數(shù)據(jù)庫連接了。

    2)表輸入

    創(chuàng)建好數(shù)據(jù)庫連接以后,我們就可以使用表輸入控件了,雙擊表輸入控件,選擇剛剛創(chuàng)建的數(shù)據(jù)庫連接,然后在SQL框里輸入合適的查詢語句,然后點(diǎn)擊預(yù)覽按鈕,看能否預(yù)覽到我們期望的數(shù)據(jù)。

    任務(wù):創(chuàng)建數(shù)據(jù)庫連接,然后使用表輸入控件將student表的數(shù)據(jù)寫到excel中。

    3.2 Kettle輸出控件

    輸出是轉(zhuǎn)換里面的第二個(gè)分類,輸出控件也是轉(zhuǎn)換中的第二大控件,用來存儲(chǔ)數(shù)據(jù)。輸出是ETL里面的L(Load),主要做數(shù)據(jù)加載的工作。

    由于Kettle中自帶的輸出控件比較多,本次只挑出開發(fā)中經(jīng)常使用的幾個(gè)輸出控件來進(jìn)行講解,詳情如下圖。

    3.2.1 Excel輸出

    Kettle中自帶了兩個(gè)Excel輸出,一個(gè)Excel輸出,另一個(gè)是Microsoft Excel輸出。

    Excel輸出只能輸出xls文件(適合Excel2003),Microsoft Excel輸出可以輸出xls和xlsx文件(適合Excel2007及以后)

    Excel輸出大家已經(jīng)很熟悉了,不再贅述了,接下來給大家講下Microsoft Excel輸出。

  • 選擇合適的擴(kuò)展名
  • 點(diǎn)擊瀏覽,補(bǔ)全輸出文件的路徑已經(jīng)文件名
  • 任務(wù):使用表輸入控件,將student表的數(shù)據(jù),以復(fù)制的方式輸出到xls和xlsx文件中

    3.2.2 文本文件輸出

    文本文件輸出控件,顧名思義,這是一個(gè)能將數(shù)據(jù)輸出成文本的控件,比較簡單,在企業(yè)里面也比較常用。

  • 設(shè)置對應(yīng)的目錄和文件名
  • 設(shè)置合適的擴(kuò)展名,比如txt,csv等
  • 在內(nèi)容框里設(shè)置合適的分隔符,比如分號(hào),逗號(hào),TAB等
  • 在字段框里獲取字段,并且給每個(gè)字段設(shè)置合適的格式
  • 任務(wù):將student表的數(shù)據(jù)復(fù)制兩份,導(dǎo)出成txt和csv文件

    3.2.3 SQL文件輸出

    SQL文件輸出一般跟表輸入做連接,然后將數(shù)據(jù)庫表的表結(jié)構(gòu)和數(shù)據(jù)以sql文件的形式導(dǎo)出,然后做數(shù)據(jù)庫備份的這么一個(gè)工作。

  • 選擇合適的數(shù)據(jù)庫連接
  • 選擇目標(biāo)表
  • 勾選增加創(chuàng)建表語句和每個(gè)語句另起一行
  • 填寫輸出文件的路徑和文件名
  • 擴(kuò)展名默認(rèn)為sql,這個(gè)不需要更改
  • 任務(wù):將student表的表結(jié)構(gòu)和數(shù)據(jù)利用kettle導(dǎo)出成sql文件備份

    3.2.4 表輸出

    表輸出控件可以將kettle數(shù)據(jù)行中的數(shù)據(jù)直接寫入到數(shù)據(jù)庫中的表中,企業(yè)里做ETL工作會(huì)經(jīng)常用到此控件。

  • 選擇合適的數(shù)據(jù)庫連接
  • 選擇目標(biāo)表,目標(biāo)表可以提前在數(shù)據(jù)庫中手動(dòng)創(chuàng)建好,也可以輸入一個(gè)數(shù)據(jù)庫不存在的表,然后點(diǎn)擊下面的SQL按鈕,利用kettle現(xiàn)場創(chuàng)建
  • 如果目標(biāo)表的表結(jié)構(gòu)和輸入的數(shù)據(jù)結(jié)構(gòu)不一致,還可以自己指定數(shù)據(jù)庫字段
  • 任務(wù):將student表的數(shù)據(jù)導(dǎo)入到student2表中,要求利用kettle現(xiàn)場創(chuàng)建student2表

    3.2.5 更新&插入/更新(缺點(diǎn):掃全表)

    更新和插入/更新,這兩個(gè)控件是kettle提供的將數(shù)據(jù)庫已經(jīng)存在的記錄與數(shù)據(jù)流里面的記錄進(jìn)行對比的控件。企業(yè)級(jí)ETL經(jīng)常會(huì)用到這兩個(gè)控件來進(jìn)行數(shù)據(jù)庫更新的操作

    兩者區(qū)別:

    更新是將數(shù)據(jù)庫表中的數(shù)據(jù)和數(shù)據(jù)流中的數(shù)據(jù)做對比,如果不同就更新,如果數(shù)據(jù)流中的數(shù)據(jù)比數(shù)據(jù)庫表中的數(shù)據(jù)多,那么就報(bào)錯(cuò)。

    插入/更新的功能和更新一樣,只不過優(yōu)化了數(shù)據(jù)不存在就插入的功能,因此企業(yè)里更多的也是使用插入/更新。

  • 選擇正確的數(shù)據(jù)庫連接
  • 選擇目標(biāo)表
  • 輸入兩個(gè)表來進(jìn)行比較的字段,一般來說都是用主鍵來進(jìn)行比較
  • 輸入要更新的字段
  • 任務(wù):手動(dòng)修改下student表的數(shù)據(jù)(修改和新增),然后用修改后的數(shù)據(jù)和student2來進(jìn)行對比,分別嘗試更新和插入/更新控件的區(qū)別

    3.2.6 刪除

    刪除控件可以刪除數(shù)據(jù)庫表中指定條件的數(shù)據(jù),企業(yè)里一般用此控件做數(shù)據(jù)庫表數(shù)據(jù)刪除或者跟另外一個(gè)表數(shù)據(jù)做對比,然后進(jìn)行去重的操作。

  • 選擇數(shù)據(jù)庫連接
  • 選擇目標(biāo)表
  • 設(shè)置數(shù)據(jù)流跟目標(biāo)表要?jiǎng)h除數(shù)據(jù)的對應(yīng)字段
  • 任務(wù):刪除student2表格中student表里面已有的數(shù)據(jù)(按照student表對student2表數(shù)據(jù)進(jìn)行去重)

    3.3 Kettle轉(zhuǎn)換控件

    轉(zhuǎn)換控件是轉(zhuǎn)換里面的第四個(gè)分類,轉(zhuǎn)換控件也是轉(zhuǎn)換中的第三大控件,用來轉(zhuǎn)換數(shù)據(jù)。轉(zhuǎn)換是ETL里面的T(Transform),主要做數(shù)據(jù)轉(zhuǎn)換,數(shù)據(jù)清洗的工作。ETL整個(gè)過程中,Transform的工作量最大,耗費(fèi)的時(shí)間也比較久,大概可以占到整個(gè)ETL的三分之二。

    由于Kettle中自帶的轉(zhuǎn)換控件比較多,本次只挑出開發(fā)中經(jīng)常使用的幾個(gè)轉(zhuǎn)換控件來進(jìn)行講解,詳情如下圖。

    3.3.1 Concat fields

    轉(zhuǎn)換控件Concat fields,顧名思義,就是將多個(gè)字段連接起來形成一個(gè)新的字段。

    任務(wù):將staff表的firstname和lastname拼接起來,形成name字段,然后再將數(shù)據(jù)插入到新表emp中

    提示:如果涉及到中文亂碼問題,請參考資料:Mysql中文亂碼問題.docx

    3.3.2 值映射

    值映射就是把字段的一個(gè)值映射成其他的值。在數(shù)據(jù)質(zhì)量規(guī)范上使用非常多,比如很多系統(tǒng)對應(yīng)性別sex字段的定義不同。所以我們需要利用此控件,將同一個(gè)字段的不同的值,映射轉(zhuǎn)換成我們需要的值。

  • 選擇映射的字段
  • 還可以自定義映射完以后的新字段名
  • 可以設(shè)置不匹配時(shí)的默認(rèn)值
  • 設(shè)置映射的值
  • 任務(wù):將staff表的sex字段,映射成男or女,然后再插入到emp表中

    3.3.3 增加常量&增加序列

    增加常量就是在本身的數(shù)據(jù)流里面添加一列數(shù)據(jù),該列的數(shù)據(jù)都是相同的值。

    增加序列是給數(shù)據(jù)流添加一個(gè)序列字段,可以自定義該序列字段的遞增步長。

    任務(wù):給表staff的數(shù)據(jù)加一列固定值slary和一個(gè)遞增的number序列,在控制臺(tái)預(yù)覽下數(shù)據(jù)即可,不用輸出。

    3.3.4 字段選擇

    字段選擇是從數(shù)據(jù)流中選擇字段、改變名稱、修改數(shù)據(jù)類型。

    任務(wù):在上一個(gè)轉(zhuǎn)換之后,添加字段選擇控件,移除掉firstname字段,并且將lastname重命名為name,將slary重命名為money,然后再次預(yù)覽數(shù)據(jù),查看數(shù)據(jù)的變化

    3.3.5 計(jì)算器

    計(jì)算器是一個(gè)函數(shù)集合來創(chuàng)建新的字段,還可以設(shè)置字段是否移除(臨時(shí)字段)。我們可以通過計(jì)算器里面的多個(gè)計(jì)算函數(shù)對已有字段進(jìn)行計(jì)算,得出新字段。

    任務(wù):在上一任務(wù)基礎(chǔ)之上,添加計(jì)算器控件對money和number字段進(jìn)行相乘,得出新字段acount,然后預(yù)覽數(shù)據(jù)。

    3.3.6 字符串剪切&替換&操作

    轉(zhuǎn)換控件中有三個(gè)關(guān)于字符串的控件,分別是剪切字符串,字符串操作,字符串替換

    剪切字符串是指定輸入流字段裁剪的位置剪切出新的字段。

    字符串替換是指定搜索內(nèi)容和替換內(nèi)容,如果輸入流的字段匹配上搜索內(nèi)容就進(jìn)行替換生成新字段。

    字符串操作是去除字符串兩端的空格和大小寫切換,并生成新的字段。

    任務(wù):在上一個(gè)任務(wù)之后,添加剪切字符串,字符串替換,字符串操作三個(gè)控件,利用這三個(gè)控件分別對sex字段進(jìn)行剪切,替換,操作(去空格,轉(zhuǎn)大小寫)

    3.3.7 排序記錄&去除重復(fù)記錄

    去除重復(fù)記錄是去除數(shù)據(jù)流里面相同的數(shù)據(jù)行。但是此控件使用之前要求必須先對數(shù)據(jù)進(jìn)行排序,對數(shù)據(jù)排序用的控件是排序記錄,排序記錄控件可以按照指定字段的升序或者降序?qū)?shù)據(jù)流進(jìn)行排序。因此排序記錄+去除重復(fù)記錄控件常常配合組隊(duì)使用。

    任務(wù):利用excel輸入控件讀取input目錄下的06_去除重復(fù)記錄.xlsx,然后對里面重復(fù)的數(shù)據(jù)進(jìn)行按照id排序并去重

    3.3.8 唯一行(哈希值)

    唯一行(哈希值)就是刪除數(shù)據(jù)流重復(fù)的行。此控件的效果和(排序記錄+去除重復(fù)記錄)的效果是一樣的,但是實(shí)現(xiàn)的原理不同。排序記錄+去除重復(fù)記錄對比的是每兩行之間的數(shù)據(jù),而唯一行(哈希值)是給每一行的數(shù)據(jù)建立哈希值,通過哈希值來比較數(shù)據(jù)是否重復(fù),因此唯一行(哈希值)去重效率比較高,也更建議大家使用。

    任務(wù):利用唯一行(哈希值)控件對06_去除重復(fù)記錄.xlsx去重,并且查看最后輸出的數(shù)據(jù)跟上個(gè)任務(wù)有何區(qū)別

    3.3.9 拆分字段

    拆分字段是把字段按照分隔符拆分成兩個(gè)或多個(gè)字段。需要注意的是,字段拆分以后,原字段就會(huì)從數(shù)據(jù)流中消失。

    任務(wù):將07_拆分字段.xlsx里面的NBA球星的姓名,拆分成姓跟名。

    3.3.10 列拆分為多行(炸列)

    列拆分為多行就是把指定字段按指定分隔符進(jìn)行拆分為多行,然后其他字段直接復(fù)制。具體效果如下圖:

  • 選擇要拆分的字段
  • 設(shè)置合適的分割符
  • 設(shè)置分割以后的新字段名
  • 選擇是否輸出新數(shù)據(jù)的排列行號(hào),行號(hào)是否重置
  • 任務(wù):對08_列拆分為多行.xlsx的數(shù)據(jù)按照hobby字段進(jìn)行拆分為多行,然后將新數(shù)據(jù)輸出到excel文件中,查看數(shù)據(jù)。

    3.3.11 行扁平化

    行扁平化就是把同一組的多行數(shù)據(jù)合并成為一行,可以理解為列拆分為多行的逆向操作。但是需要注意的是行扁平化控件使用有兩個(gè)條件:

  • 使用之前需要對數(shù)據(jù)進(jìn)行排序
  • 每個(gè)分組的數(shù)據(jù)條數(shù)要保證一致,否則數(shù)據(jù)會(huì)有錯(cuò)亂
  • 選擇扁平化的字段
  • 填寫目標(biāo)字段,字段個(gè)數(shù)跟每個(gè)分組的數(shù)據(jù)一致
  • 任務(wù):將09_行扁平化.xlsx的數(shù)據(jù)按照hobby字段進(jìn)行扁平化

    3.3.12 列轉(zhuǎn)行

    列轉(zhuǎn)行,顧名思義多列轉(zhuǎn)一行,就是如果數(shù)據(jù)一列有相同的值,按照指定的字段,將其中一列的字段內(nèi)容變成不同的列,然后把多行數(shù)據(jù)轉(zhuǎn)換為一行數(shù)據(jù)的過程。具體效果如下圖:

    注意:列轉(zhuǎn)行之前數(shù)據(jù)流必須按照分組字段進(jìn)行排序,否則數(shù)據(jù)會(huì)錯(cuò)亂!

  • 關(guān)鍵字段:從數(shù)據(jù)內(nèi)容變成列名的字段
  • 分組字段:列轉(zhuǎn)行,轉(zhuǎn)變以后的分組字段
  • 目標(biāo)字段:增加的列的列名字段
  • 數(shù)據(jù)字段:目標(biāo)字段的數(shù)據(jù)字段
  • 關(guān)鍵字值:數(shù)據(jù)字段查詢時(shí)的關(guān)鍵字,也可以理解為key
  • 類型:要給目標(biāo)字段設(shè)置合適的類型,否則會(huì)報(bào)錯(cuò)
  • 任務(wù):將input目錄下的10_列轉(zhuǎn)行.xlsx的數(shù)據(jù)進(jìn)行列轉(zhuǎn)行,熟悉列轉(zhuǎn)行控件的使用

    3.3.13 行轉(zhuǎn)列

    行轉(zhuǎn)列,一行轉(zhuǎn)多列,就是把數(shù)據(jù)字段的字段名轉(zhuǎn)換為一列,把數(shù)據(jù)行變?yōu)閿?shù)據(jù)列。我們也可以簡單理解為行轉(zhuǎn)列控件是列轉(zhuǎn)行控件的逆向操作。具體如下圖:

  • Key字段:行轉(zhuǎn)列,生成的列名字段名
  • 字段名稱:原本數(shù)據(jù)流中的字段名
  • Key值:Key字段的值,這個(gè)是自己自定義的,一般都跟前面的字段名稱一樣
  • Value字段:對應(yīng)的Key值的數(shù)據(jù)列的列名
  • 任務(wù):將input目錄下的11_行轉(zhuǎn)列.xlsx用excel控件輸入,然后行轉(zhuǎn)列,熟悉行轉(zhuǎn)列控件的使用。

    3.4 Kettle應(yīng)用控件

    應(yīng)用是轉(zhuǎn)換控件里面的第五個(gè)分類,這個(gè)分類下是Kettle給我們自帶的一些工具類

    3.4.1 替換NULL值

    替換NULL值,顧名思義就是將數(shù)據(jù)里面的null值替換成其他的值,此控件比較簡單,但是在企業(yè)里面也會(huì)經(jīng)常用到。

  • 可以選擇替換數(shù)據(jù)流中所有字段的null值
  • 也可以選擇字段,在下面的字段框里面,根據(jù)不同的字段,將null值替換成不同的值
  • 任務(wù):替換excel數(shù)據(jù)12_替換NULL值.xlsx的bonus列的null值為0

    3.4.2 寫日志

    寫日志控件主要是調(diào)試的時(shí)候使用,此控件可以將數(shù)據(jù)流的每行數(shù)據(jù)打印到控制臺(tái),方便我們調(diào)試整個(gè)程序。

  • 選擇日志級(jí)別
  • 可以輸入自定義輸出的語句
  • 選擇要輸出打印的字段
  • 任務(wù):在上個(gè)任務(wù)的基礎(chǔ)之上,添加寫日志控件,在控制臺(tái)輸出查看數(shù)據(jù)。

    3.5 Kettle流程控件

    流程是轉(zhuǎn)換里面的第六個(gè)分類,流程分類下的控件主要用來控制數(shù)據(jù)流程和數(shù)據(jù)流向。

    3.5.1 Switch/case

    Switch/case控件,最典型的數(shù)據(jù)分類控件,可以利用某一個(gè)字段的數(shù)據(jù)的不同的值,讓數(shù)據(jù)流從一路到多路。

  • 選擇需要判斷的字段
  • 選擇判斷字段的值的類型
  • 填寫分類數(shù)據(jù)的判斷條件和目標(biāo)步驟
  • 任務(wù):將excel:13_Switch-Case.xlsx的數(shù)據(jù)按照部門字段進(jìn)行分類,將同一個(gè)部門的數(shù)據(jù)輸出到一個(gè)excel中

    3.5.2 過濾記錄

    和Switch/case做對比的話,過濾記錄相當(dāng)于if-else,可以自定義輸入一個(gè)判斷條件,然后將數(shù)據(jù)流中的數(shù)據(jù)一路分為兩路。

  • 在下面先填寫數(shù)據(jù)的判斷條件
  • 然后再上面選擇下判斷條件為true或者false的輸出步驟
  • 任務(wù):將excel:13_Switch-Case.xlsx的數(shù)據(jù)按照工資字段進(jìn)行判斷,將工資在20000及以上的數(shù)據(jù)輸出到一個(gè)excel中,將工資小于20000的輸出到另外一個(gè)excel中。

    3.5.3 空操作

    空操作,顧名思義就是什么也不做,此控件一般作為數(shù)據(jù)流的終點(diǎn)。

    任務(wù):修改上面的轉(zhuǎn)換任務(wù),將工資大于等于20000的數(shù)據(jù)輸出,小于20000的數(shù)據(jù)直接丟棄,熟悉空操作控件的使用。

    3.5.3 中止

    中止是數(shù)據(jù)流的終點(diǎn),如果有數(shù)據(jù)流到此控件處,整個(gè)轉(zhuǎn)換程序?qū)⒅兄?#xff0c;并且在控制臺(tái)輸出報(bào)錯(cuò)信息。此控件一般用來校驗(yàn)數(shù)據(jù),或者調(diào)試程序。

    任務(wù):使用中止控件判斷上個(gè)任務(wù)中是否有人的工資低于20000,如果發(fā)現(xiàn)有人的工資低于20000的話,中止程序,并在控制臺(tái)輸出信息。

    3.6 Kettle查詢控件

    查詢是轉(zhuǎn)換里面的第九個(gè)分類,查詢控件是用來查詢數(shù)據(jù)源里面的數(shù)據(jù),并合并到主數(shù)據(jù)流中。

    3.6.1 數(shù)據(jù)庫查詢

    數(shù)據(jù)庫查詢就是從數(shù)據(jù)庫里面查詢出數(shù)據(jù),然后跟數(shù)據(jù)流中的數(shù)據(jù)進(jìn)行左連接的一個(gè)過程。左連接的意思是數(shù)據(jù)流中原本的數(shù)據(jù)全部有,但是數(shù)據(jù)庫查詢控件查詢出來的數(shù)據(jù)不一定全部會(huì)列出,只能按照輸入的匹配條件來進(jìn)行關(guān)聯(lián)。

  • 選擇合適的數(shù)據(jù)庫鏈接
  • 輸入要去數(shù)據(jù)庫里面查詢的表名
  • 輸入兩個(gè)表進(jìn)行左連接的連接條件
  • 獲取返回字段,得到查詢表返回的值
  • 任務(wù):利用表輸入控件獲取到staff表的數(shù)據(jù),然后利用數(shù)據(jù)庫查詢控件查詢到department表的數(shù)據(jù),然后對兩個(gè)表按照dept_id字段進(jìn)行左連接,并預(yù)覽數(shù)據(jù)

    3.6.2 流查詢

    流查詢控件就是查詢兩條數(shù)據(jù)流中的數(shù)據(jù),然后按照指定的字段做等值匹配。注意:流查詢在查詢前把數(shù)據(jù)都加載到內(nèi)存中,并且只能進(jìn)行等值查詢。

  • 輸入查詢的數(shù)據(jù)流
  • 輸入兩個(gè)流進(jìn)行匹配的字段(等值匹配)
  • 輸入查詢出的字段
  • 任務(wù):用流查詢控件,將staff和department的數(shù)據(jù)按照dept_id字段進(jìn)行關(guān)聯(lián)起來

    3.7 Kettle連接控件

    連接是轉(zhuǎn)換里面的第十個(gè)分類,連接分類下的控件一般都是將多個(gè)數(shù)據(jù)集通過關(guān)鍵字進(jìn)行連接起來,形成一個(gè)數(shù)據(jù)集的過程。

    3.7.1 合并記錄

    合并記錄是用于將兩個(gè)不同來源的數(shù)據(jù)合并,這兩個(gè)來源的數(shù)據(jù)分別為舊數(shù)據(jù)和新數(shù)據(jù),該步驟將舊數(shù)據(jù)和新數(shù)據(jù)按照指定的關(guān)鍵字匹配、比較、合并。注意舊數(shù)據(jù)和新數(shù)據(jù)需要事先按照關(guān)鍵字段排序,并且舊數(shù)據(jù)和新數(shù)據(jù)要有相同的字段名稱。

    合并后的數(shù)據(jù)將包括舊數(shù)據(jù)來源和新數(shù)據(jù)來源里的所有數(shù)據(jù),對于變化的數(shù)據(jù),使用新數(shù)據(jù)代替舊數(shù)據(jù),同時(shí)在結(jié)果里用一個(gè)標(biāo)示字段,來指定新舊數(shù)據(jù)的比較結(jié)果。

  • 舊數(shù)據(jù)源:選擇舊數(shù)據(jù)來源的步驟
  • 新數(shù)據(jù)源:選擇新數(shù)據(jù)來源的步驟
  • 標(biāo)志字段:設(shè)置標(biāo)志字段的名稱,標(biāo)志字段用于保存比較的結(jié)果,比較結(jié)果有下列幾種
  • “identical” – 舊數(shù)據(jù)和新數(shù)據(jù)一樣
  • “changed” – 數(shù)據(jù)發(fā)生了變化;
  • “new” – 新數(shù)據(jù)中有而舊數(shù)據(jù)中沒有的記錄
  • “deleted” –舊數(shù)據(jù)中有而新數(shù)據(jù)中沒有的記錄
  • 關(guān)鍵字段:用于定位判斷兩個(gè)數(shù)據(jù)源中的同一條記錄的字段。
  • 比較字段:對于兩個(gè)數(shù)據(jù)源中的同一條記錄,指定需要比較的字段
  • 任務(wù):利用合并記錄控件比較合并記錄-新舊excel的數(shù)據(jù),并預(yù)覽數(shù)據(jù),查看標(biāo)志字段的內(nèi)容

    3.7.2 記錄集連接

    記錄集連接可以對兩個(gè)步驟中的數(shù)據(jù)流進(jìn)行左連接,右連接,內(nèi)連接,外連接。此控件功能比較強(qiáng)大,企業(yè)做ETL開發(fā)會(huì)經(jīng)常用到此控件,但是需要注意在進(jìn)行記錄集連接之前,需要對記錄集的數(shù)據(jù)進(jìn)行排序,并且排序的字段還一定要選兩個(gè)表關(guān)聯(lián)的字段,否則數(shù)據(jù)錯(cuò)亂,出現(xiàn)null值。

  • 選擇需要連接的兩個(gè)數(shù)據(jù)流的步驟
  • 選擇連接類型,一共有四個(gè):INNER,LEFT OUTER,RIGHT OUTER,FULL OUTER
  • 從兩個(gè)數(shù)據(jù)流步驟里面選出連接字段
  • 任務(wù):使用記錄集連接控件對數(shù)據(jù)庫表satff和department按照部門id分別進(jìn)行內(nèi)連接,左連接,右連接,外連接,查看數(shù)據(jù)的不同

    注意:兩個(gè)表進(jìn)行排序記錄的時(shí)候,排序的字段一定要選擇部門id,否則數(shù)據(jù)會(huì)不正確

  • Kettle統(tǒng)計(jì)控件
  • 統(tǒng)計(jì)是轉(zhuǎn)換里面的第十三個(gè)分類,統(tǒng)計(jì)控件可以提供數(shù)據(jù)的采樣和統(tǒng)計(jì)功能。

    3.8.1 分組

    分組控件的功能類似于GROUP BY,可以按照指定的一個(gè)或者幾個(gè)字段進(jìn)行分組,然后其余字段可以按照聚合函數(shù)進(jìn)行合并計(jì)算。注意,在進(jìn)行分組之前,數(shù)據(jù)最好先進(jìn)行排序。

  • 選擇分組字段
  • 給其余字段選擇合適的聚合函數(shù)進(jìn)行計(jì)算
  • 任務(wù):給表staff的數(shù)據(jù)按照部門進(jìn)行分組,求出各部門人數(shù)以及各部門員工的平均年齡。

    3.9 Kettle映射控件

    映射是轉(zhuǎn)換里面的第十八個(gè)分類,映射可以用來定義子轉(zhuǎn)換,方便代碼封裝和重用。

    3.9.1 映射

    映射(子轉(zhuǎn)換)是用來配置子轉(zhuǎn)換,對子轉(zhuǎn)換進(jìn)行調(diào)用的一個(gè)步驟。

    映射輸入規(guī)范是輸入字段,由調(diào)用的轉(zhuǎn)換輸入。

    映射輸出規(guī)范是向調(diào)用的轉(zhuǎn)換輸出所有列,不做任何處理。

    任務(wù):封裝一個(gè)子轉(zhuǎn)換能夠通過dept_id求出dept_name,然后使用另外一個(gè)轉(zhuǎn)換調(diào)用此子轉(zhuǎn)換,求出數(shù)據(jù)庫staff表id=3的員工的姓名,年齡,部門id,部門姓名,并輸出到控制臺(tái)。

    3.10 Kettle腳本控件

    腳本是轉(zhuǎn)換的第七個(gè)分類,腳本就是直接通過寫程序代碼完成一些復(fù)雜的操作。

  • 執(zhí)行SQL腳本
  • 執(zhí)行sql腳本控件就是連接到數(shù)據(jù)庫里面,然后執(zhí)行自己寫的一些sql語句

  • 選擇合適的數(shù)據(jù)庫連接
  • 填入要執(zhí)行的sql語句
  • 任務(wù):利用執(zhí)行sql腳本控件將student表數(shù)據(jù)的xxxxx的年齡更新為18。

    四 Kettle作業(yè)

    4.1 作業(yè)簡介

    大多數(shù)ETL項(xiàng)目都需要完成各種各樣的維護(hù)工作。例如,如何傳送文件;驗(yàn)證數(shù)據(jù)庫表是否存在等等。而這些操作都是按照一定順序完成。因?yàn)檗D(zhuǎn)換以并行方式執(zhí)行,就需要一個(gè)可以串行執(zhí)行的作業(yè)來處理這些操作。

    一個(gè)作業(yè)包含一個(gè)或者多個(gè)作業(yè)項(xiàng),這些作業(yè)項(xiàng)以某種順序來執(zhí)行。作業(yè)執(zhí)行順序由作業(yè)項(xiàng)之間的跳(job hop)和每個(gè)作業(yè)項(xiàng)的執(zhí)行結(jié)果來決定。

  • 作業(yè)項(xiàng)
  • 作業(yè)項(xiàng)是作業(yè)的基本構(gòu)成部分。如同轉(zhuǎn)換的步驟,作業(yè)項(xiàng)也可以使用圖標(biāo)的方式圖形化展示。但是,作業(yè)項(xiàng)和轉(zhuǎn)換步驟有下面幾點(diǎn)不同:

  • 轉(zhuǎn)換步驟與步驟之間是數(shù)據(jù)流,作業(yè)項(xiàng)之間是步驟流。
  • 轉(zhuǎn)換啟動(dòng)以后,所有步驟一起并行啟動(dòng)等待數(shù)據(jù)行的輸入,而作業(yè)項(xiàng)是嚴(yán)格按照執(zhí)行順序啟動(dòng),一個(gè)作業(yè)項(xiàng)執(zhí)行完以后,再執(zhí)行下一個(gè)作業(yè)項(xiàng)。
  • 在作業(yè)項(xiàng)之間可以傳遞一個(gè)結(jié)果對象(result object)。這個(gè)結(jié)果對象里面包含了數(shù)據(jù)行,它們不是以數(shù)據(jù)流的方式來傳遞的。而是等待一個(gè)作業(yè)項(xiàng)執(zhí)行完了,再傳遞個(gè)下一個(gè)作業(yè)項(xiàng)。
  • 因?yàn)樽鳂I(yè)順序執(zhí)行作業(yè)項(xiàng),所以必須定義一個(gè)起點(diǎn)。有一個(gè)叫“開始”的作業(yè)項(xiàng)就定義了這個(gè)點(diǎn)。一個(gè)作業(yè)只能定一個(gè)開始作業(yè)項(xiàng)。
  • 4.1.2 作業(yè)跳

    作業(yè)的跳是作業(yè)項(xiàng)之間的連接線,他定義了作業(yè)的執(zhí)行路徑。作業(yè)里每個(gè)作業(yè)項(xiàng)的不同運(yùn)行結(jié)果決定了做作業(yè)的不同執(zhí)行路徑。作業(yè)跳一共分為下面三種情況:

    ①無條件執(zhí)行:不論上一個(gè)作業(yè)項(xiàng)執(zhí)行成功還是失敗,下一個(gè)作業(yè)項(xiàng)都會(huì)執(zhí)行。這是一種藍(lán)色的連接線,上面有一個(gè)鎖的圖標(biāo)。

    ②當(dāng)運(yùn)行結(jié)果為真時(shí)執(zhí)行:當(dāng)上一個(gè)作業(yè)項(xiàng)的執(zhí)行結(jié)果為真時(shí),執(zhí)行下一個(gè)作業(yè)項(xiàng)。通常在需要無錯(cuò)誤執(zhí)行的情況下使用。這是一種綠色的連接線,上面有一個(gè)對鉤號(hào)的圖標(biāo)。

    ③當(dāng)運(yùn)行結(jié)果為假時(shí)執(zhí)行:當(dāng)上一個(gè)作業(yè)項(xiàng)的執(zhí)行結(jié)果為假或者沒有成功執(zhí)行是,執(zhí)行下一個(gè)作業(yè)項(xiàng)。這是一種紅色的連接線,上面有一個(gè)紅色的停止圖標(biāo)。

    在圖標(biāo)上單擊就可以對跳進(jìn)行設(shè)置。

    4.2 作業(yè)初體驗(yàn)

    作業(yè)案例:將3.10.1的轉(zhuǎn)換嵌入作業(yè)中執(zhí)行,執(zhí)行成功或者失敗都發(fā)送郵件提醒

  • 點(diǎn)擊左上角的文件,新建一個(gè)作業(yè)
  • 按照下圖設(shè)置作業(yè)項(xiàng)和作業(yè)跳
  • 轉(zhuǎn)換作業(yè)項(xiàng)設(shè)置,選擇要嵌入的轉(zhuǎn)換文件
  • 發(fā)送郵件作業(yè)項(xiàng)設(shè)置,
  • 分別嘗試作業(yè)執(zhí)行成功和失敗,查看kettle發(fā)送的郵件信息
  • 五 Kettle使用案例

    5.1 轉(zhuǎn)換案例

    案例一:把stu1的數(shù)據(jù)按id同步到stu2,stu2有相同id則更新數(shù)據(jù)

    (1)在mysql中創(chuàng)建兩張表

    mysql> create database kettle;

    mysql> use kettle;

    mysql> create table stu1(id int,name varchar(20),age int);

    mysql> create table stu2(id int,name varchar(20));

    (2)往兩張表中插入一些數(shù)據(jù)

    mysql> insert into stu1 values(1001,'zhangsan',20),(1002,'lisi',18), (1003,'wangwu',23);

    mysql> insert into stu2 values(1001,'wukong');

    (3)在kettle中新建轉(zhuǎn)換

    (4)分別在輸入和輸出中拉出表輸入和插入/更新

    (5)雙擊表輸入對象,填寫相關(guān)配置,測試是否成功

    (6)雙擊 更新/插入對象,填寫相關(guān)配置

    (7)保存轉(zhuǎn)換,啟動(dòng)運(yùn)行,去mysql表查看結(jié)果

    注意:如果需要連接mysql數(shù)據(jù)庫,需要先將mysql的連接驅(qū)動(dòng)包復(fù)制到kettle的根目錄下的lib目錄中,否則會(huì)報(bào)錯(cuò)找不到驅(qū)動(dòng)。

    5.2 作業(yè)案例

    案例二:使用作業(yè)執(zhí)行上述轉(zhuǎn)換,并且額外在表stu2中添加一條數(shù)據(jù),整個(gè)作業(yè)運(yùn)行成功的話發(fā)郵件提醒

    (1)新建一個(gè)作業(yè)

    (2) 按圖示拉取組件

    (3)雙擊Start編輯Start

    (4)雙擊轉(zhuǎn)換,選擇案例1保存的文件

    (5)雙擊SQL,編輯SQL語句

    (6)雙擊發(fā)送郵件,編輯發(fā)送郵件的設(shè)置信息

    (7)保存作業(yè)并執(zhí)行,然后去mysql查看結(jié)果和郵件信息

    六 Kettle資源庫

    6.1 數(shù)據(jù)庫資源庫

    數(shù)據(jù)庫資源庫是將作業(yè)和轉(zhuǎn)換相關(guān)的信息存儲(chǔ)在數(shù)據(jù)庫中,執(zhí)行的時(shí)候直接去數(shù)據(jù)庫讀取信息,很容易跨平臺(tái)使用

    1)點(diǎn)擊右上角connect,選擇Other Resporitory

    2) 選擇Database Repository

    3) 建立新連接

    4) 填好之后,點(diǎn)擊finish,會(huì)在指定的庫中創(chuàng)建很多表,至此數(shù)據(jù)庫資源庫創(chuàng)建完成

    5) 連接資源庫,默認(rèn)賬號(hào)密碼為admin

    6) 將之前做過的轉(zhuǎn)換導(dǎo)入資源庫

    (1)選擇從xml文件導(dǎo)入

    (2)隨便選擇一個(gè)轉(zhuǎn)換

    (3)點(diǎn)擊保存,選擇存儲(chǔ)位置及文件名

    (4)打開資源庫查看保存結(jié)果

    6.2 文件資源庫

    將作業(yè)和轉(zhuǎn)換相關(guān)的信息存儲(chǔ)在指定的目錄中,其實(shí)和XML的方式一樣,創(chuàng)建方式跟創(chuàng)建數(shù)據(jù)庫資源庫步驟類似,只是不需要用戶密碼就可以訪問,跨平臺(tái)使用比較麻煩

    1)選擇connect

    2)點(diǎn)擊add后點(diǎn)擊Other Repositories

    3)選擇File Repository

    4)填寫信息

    七 Kettle調(diào)優(yōu)

    1、調(diào)整JVM大小進(jìn)行性能優(yōu)化,修改Kettle根目錄下的Spoon腳本。

    參數(shù)參考:

    -Xmx2048m:設(shè)置JVM最大可用內(nèi)存為2048M。

    -Xms1024m:設(shè)置JVM促使內(nèi)存為1024m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。

    -Xmn2g:設(shè)置年輕代大小為2G。整個(gè)JVM內(nèi)存大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會(huì)減小年老代大小。此值對系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8。

    -Xss128k:設(shè)置每個(gè)線程的堆棧大小。JDK5.0以后每個(gè)線程堆棧大小為1M,以前每個(gè)線程堆棧大小為256K。更具應(yīng)用的線程所需內(nèi)存大小進(jìn)行調(diào)整。在相同物理內(nèi)存下,減小這個(gè)值能生成更多的線程。但是操作系統(tǒng)對一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無限生成,經(jīng)驗(yàn)值在3000~5000左右。

    2、 調(diào)整提交(Commit)記錄數(shù)大小進(jìn)行優(yōu)化,Kettle默認(rèn)Commit數(shù)量為:1000,可以根據(jù)數(shù)據(jù)量大小來設(shè)置Commitsize:1000~50000

    3、盡量使用數(shù)據(jù)庫連接池;

    4、盡量提高批處理的commit size;

    5、盡量使用緩存,緩存盡量大一些(主要是文本文件和數(shù)據(jù)流);

    6、Kettle是Java做的,盡量用大一點(diǎn)的內(nèi)存參數(shù)啟動(dòng)Kettle;

    7、可以使用sql來做的一些操作盡量用sql;

    Group , merge , stream lookup,split field這些操作都是比較慢的,想辦法避免他們.,能用sql就用sql;

    8、插入大量數(shù)據(jù)的時(shí)候盡量把索引刪掉;

    9、盡量避免使用update , delete操作,尤其是update,如果可以把update變成先delete, 后insert;

    10、能使用truncate table的時(shí)候,就不要使用deleteall row這種類似sql合理的分區(qū),如果刪除操作是基于某一個(gè)分區(qū)的,就不要使用delete row這種方式(不管是deletesql還是delete步驟),直接把分區(qū)drop掉,再重新創(chuàng)建;

    11、盡量縮小輸入的數(shù)據(jù)集的大小(增量更新也是為了這個(gè)目的);

    12、盡量使用數(shù)據(jù)庫原生的方式裝載文本文件(Oracle的sqlloader, mysql的bulk loader步驟)。

    漫話架構(gòu)之美

    大數(shù)據(jù)領(lǐng)域原創(chuàng)技術(shù)號(hào),專注于大數(shù)據(jù)研究,包括 Hadoop、Flink、Spark、Kafka、Hive、HBase 等,深入大數(shù)據(jù)技術(shù)原理,數(shù)據(jù)倉庫,數(shù)據(jù)治理,前沿大數(shù)據(jù)技術(shù)

    總結(jié)

    以上是生活随笔為你收集整理的【ETL工具】-Kettle详细教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。