最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【尚硅谷】大數(shù)據(jù)技術(shù)之Kettle視頻教程

2023-08-22 14:35 作者:is考拉  | 我要投稿

尚硅谷大數(shù)據(jù)技術(shù)之Kettle?

(作者:尚硅谷大數(shù)據(jù)研發(fā)部)

版本:V2.0

第1章 Kettle概述

1.1 ETL簡(jiǎn)介

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

市面上常用的ETL工具有很多,比如Sqoop,DataX,Kettle,Talend等,作為一個(gè)大數(shù)據(jù)工程師,我們最好要掌握其中的兩到三種,這里我們要學(xué)習(xí)的ETL工具是Kettle!

1.2 Kettle簡(jiǎn)介

1.2.1 Kettle是什么

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

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

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

Kettle中有兩種腳本文件,transformationjob,transformation完成針對(duì)數(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)

?

第2章 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目錄說(shuō)明


2.1.3?Kettle文件說(shuō)明


2.2 Kettle安裝部署

2.2.1 概述

在實(shí)際企業(yè)開(kāi)發(fā)中,都是在本地Windows環(huán)境下進(jìn)行kettle的job和Transformation開(kāi)發(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界面簡(jiǎn)介

2.3.1 首頁(yè)

?

2.3.2 轉(zhuǎn)換

2.3.3 作業(yè)

?

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

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

?

?

1)?在Kettle中新建一個(gè)轉(zhuǎn)換,然后選擇轉(zhuǎn)換下面的“csv文件輸入”和“Excel輸出”控件

?

2)?雙擊CSV文件輸入文件控件,在彈出的設(shè)置框里找到對(duì)應(yīng)的csv文件(尚硅谷大數(shù)據(jù)技術(shù)之Kettle\5.數(shù)據(jù)\input\01_kettle快速體驗(yàn).csv),然后點(diǎn)擊下面的獲取字段按鈕,將我們需要的字段加載到kettle中

?

3)按住鍵盤(pán)SHIFT鍵,并且點(diǎn)擊鼠標(biāo)左鍵將兩個(gè)控件鏈接起來(lái),鏈接時(shí)選擇“主輸出步驟”

?

?

?

4)雙擊Excel輸出控件,在彈出的設(shè)置框里設(shè)置文件輸出路徑和文件名稱(chēng),然后點(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可以被歸類(lèi)為可視化編程語(yǔ)言(Visula Programming Languages,VPL),因?yàn)镵ettle可以使用圖形化的方式定義復(fù)雜的ETL程序和工作流。

可視化編程一直是Kettle里的核心概念,它可以讓你快速構(gòu)建復(fù)雜的ETL作業(yè)減低維護(hù)工作量。它通過(guò)隱藏很多技術(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) 組成,如文本文件輸入,過(guò)濾輸出行,執(zhí)行 SQL 腳本等。各個(gè)步驟使用?(Hop) 來(lái)鏈接。 跳定義了一個(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)換里的基本的組成部分,快速入門(mén)的案例中就存在兩個(gè)步驟,“CSV文件輸入”“Excel輸出”。

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

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

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

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

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

?????????????

2.5.4 跳(Hop)

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

?

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

?

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

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

通常包含下面一些信息。

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

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

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

④長(zhǎng)度:字符串的長(zhǎng)度或者BigNumber類(lèi)型的長(zhǎng)度。

⑤精度:BigNumber數(shù)據(jù)類(lèi)型的十進(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ù)值類(lèi)型數(shù)據(jù)的分組符號(hào),不同文化背景下數(shù)字里的分組符號(hào)也是不同的,一般是點(diǎn)(.)或逗號(hào)(,)或單引號(hào)(’)

?

2.5.6 數(shù)據(jù)類(lèi)型

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

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

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

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

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

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

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

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

?

2.5.7 并行

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

對(duì)于kettle的轉(zhuǎn)換,不能定義一個(gè)執(zhí)行順序,因?yàn)樗胁襟E都以并發(fā)方式執(zhí)行:當(dāng)轉(zhuǎn)換啟動(dòng)后,所有步驟都同時(shí)啟動(dòng),從它們的輸入跳中讀取數(shù)據(jù),并把處理過(guò)的數(shù)據(jù)寫(xiě)到輸出跳,直到輸入跳里不再有數(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)度工具來(lái)執(zhí)行轉(zhuǎn)換,這就是 Kettle中的作業(yè)。

第3章 Kettle轉(zhuǎn)換

3.1 Kettle輸入控件

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

?

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

?

3.1.1 CSV文件輸入

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

本章節(jié)任務(wù):熟悉CSV文件輸入控件,并嘗試將CSV文件轉(zhuǎn)換成Excel文件(可參考上面的快速體驗(yàn)案例)。

?

①?步驟名稱(chēng):可以修改,但是在同一個(gè)轉(zhuǎn)換里面要保證唯一性,見(jiàn)名知意;

②?文件名:選擇對(duì)應(yīng)的csv文件;

③?列分隔符:默認(rèn)是逗號(hào);

④?封閉符:結(jié)束行數(shù)據(jù)的讀寫(xiě);

⑤?NIO緩存大?。何募绻袛?shù)過(guò)多,需要調(diào)整此參數(shù);

⑥?包含列頭行:意思是文件中第一行是字段名稱(chēng)行,表頭不進(jìn)行讀寫(xiě);

⑦?行號(hào)字段:如果文件第一行不是字段名稱(chēng)或者需要從某行開(kāi)始讀寫(xiě),可在此輸入行號(hào)。

⑧?并發(fā)運(yùn)行?:選擇并發(fā),可提高讀寫(xiě)速度;

⑨?字段中有回車(chē)換行?:不要選擇,會(huì)將換行符做數(shù)據(jù)讀出;

⑩?文件編碼:如果預(yù)覽數(shù)據(jù)出現(xiàn)亂碼,可更換文件編碼;

3.1.2 文本文件輸入

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

1)?添加需要轉(zhuǎn)換的日志文件

2)?按照日志文件格式,指定分隔符?

3)?獲取下字段,并給字段設(shè)置合適的格式

4)?最后點(diǎn)下預(yù)覽記錄,看看能否讀到數(shù)據(jù)

?

?

?

本章節(jié)任務(wù):熟悉文本文件輸入控件,并新建轉(zhuǎn)換,將txt日志文件轉(zhuǎn)換為Excel文件

?

?

3.1.3 Excel輸入

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

1)?按照讀取的源文件格式指定對(duì)應(yīng)的表格類(lèi)型為xls還是xlsx

2)?選擇并添加對(duì)應(yīng)的excel文件

3)?獲取excel的sheet工作表

4)?獲取字段,并給每個(gè)字段設(shè)置合適的格式

5)?預(yù)覽數(shù)據(jù)

?

?

?

本章節(jié)任務(wù):熟悉Excel輸入控件,將excel文件的兩個(gè)sheet表格的數(shù)據(jù)重新寫(xiě)到一個(gè)新的excel文件中

?

3.1.4 XML輸入

1)XML簡(jiǎn)介

XML-可擴(kuò)展標(biāo)記語(yǔ)言eXtensible Markup Language,由W3C組織發(fā)布,目前推薦遵守的是W3C組織于2000年發(fā)布的XML1.0規(guī)范。XML用來(lái)傳輸和存儲(chǔ)數(shù)據(jù),就是以一個(gè)統(tǒng)一的格式,組織有關(guān)系的數(shù)據(jù),為不同平臺(tái)下的應(yīng)用程序服務(wù)。

?

2)?XPath簡(jiǎn)介

XPath即為XML路徑語(yǔ)言(XML Path Language),它是一種用來(lái)確定XML文檔中某部分位置的語(yǔ)言。XPath基于XML的樹(shù)狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹(shù)中找尋節(jié)點(diǎn)的能力。

XPath 使用路徑表達(dá)式在 XML 文檔中選取節(jié)點(diǎn)。下面列出了最有用的路徑表達(dá)式:

?

3)?XML輸入控件

了解XML和XPath概念以后,我們要開(kāi)始學(xué)習(xí)Kettle的XML輸入控件,企業(yè)里經(jīng)常用此控件進(jìn)行XML文件的ETL操作。

1.?瀏覽獲取xml文件,將xml文件添加到kettle中

2.?獲取xml文檔的所有路徑,設(shè)置合適的循環(huán)讀取路徑

3.?獲取字段,獲得自己想要讀取的所有字段,并且設(shè)置適當(dāng)?shù)母袷?/p>

4.?預(yù)覽數(shù)據(jù),看看能否讀取到自己想要的數(shù)據(jù)

?

?

?

本章節(jié)任務(wù):熟悉XML輸入控件,將XML文件的學(xué)生數(shù)據(jù)寫(xiě)到excel文件中

?

3.1.5 JSON輸入

1)JSON簡(jiǎn)介

JSON(JavaScript Object Notation, JS 對(duì)象簡(jiǎn)譜) 是一種輕量級(jí)的數(shù)據(jù)交換格式。JSON對(duì)象本質(zhì)上就是一個(gè)JS對(duì)象,但是這個(gè)對(duì)象比較特殊,它可以直接轉(zhuǎn)換為字符串,在不同語(yǔ)言中進(jìn)行傳遞,通過(guò)工具又可以轉(zhuǎn)換為其他語(yǔ)言中的對(duì)象。

JSON核心概念:數(shù)組、對(duì)象、屬性。

數(shù)組:[ ]

對(duì)象:{ }

屬性:key:value

2)JSON Path

JSONPath類(lèi)似于XPath在xml文檔中的定位,JsonPath表達(dá)式通常是用來(lái)路徑檢索或設(shè)置Json的。其表達(dá)式可以接受“dot–notation”(點(diǎn)記法)和“bracket–notation”(括號(hào)記法)格式

點(diǎn)記法:$.store.book[0].title

括號(hào)記法:$[‘store’][‘book’][0][‘title’]

?

3)?JSON輸入控件

了解JSON格式和JSON Path以后,我們要學(xué)習(xí)使用JSON輸入控件,JSON控件也是企業(yè)里做ETL常用的控件之一。

1.?瀏覽獲取JSON文件,將json文件獲取到kettle中

2.?根據(jù)JSON Path點(diǎn)記法,獲取到需要的字段,并且設(shè)置合適格式

?

?

?

?

本章節(jié)任務(wù):獲取到JSON文件里面的id,field,value字段,寫(xiě)到excel文件中

?

?

3.1.6 表輸入

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

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

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

?

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

?

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

?

2)表輸入

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

?

本章節(jié)任務(wù):根據(jù)自己的集群環(huán)境,創(chuàng)建數(shù)據(jù)庫(kù)連接,然后使用表輸入控件將student表的數(shù)據(jù)寫(xiě)到excel中。

?

3.2 Kettle輸出控件

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

由于Kettle中自帶的輸出控件比較多,本文只挑出開(kāi)發(fā)中經(jīng)常使用的幾個(gè)輸出控件來(lái)進(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)很熟悉了,本章不再贅述,接下來(lái)給大家講下Microsoft?Excel輸出。

1)?選擇合適的擴(kuò)展名

2)?點(diǎn)擊瀏覽,補(bǔ)全輸出文件的路徑已經(jīng)文件名

?

本章任務(wù):使用表輸入控件,將student表的數(shù)據(jù),以復(fù)制的方式輸出到xls和xlsx文件中

?

3.2.2 文本文件輸出

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

1.?設(shè)置對(duì)應(yīng)的目錄和文件名

2.?設(shè)置合適的擴(kuò)展名,比如txt,csv等

3.?在內(nèi)容框里設(shè)置合適的分隔符,比如分號(hào),逗號(hào),TAB等

4.?在字段框里獲取字段,并且給每個(gè)字段設(shè)置合適的格式

?

?

?

本章節(jié)任務(wù):將student表的數(shù)據(jù)復(fù)制兩份,導(dǎo)出成txt和csv文件

?

?

3.2.3 SQL文件輸出

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

1.?選擇合適的數(shù)據(jù)庫(kù)連接

2.?選擇目標(biāo)表

3.?勾選增加創(chuàng)建表語(yǔ)句和每個(gè)語(yǔ)句另起一行

4.?填寫(xiě)輸出文件的路徑和文件名

5.?擴(kuò)展名默認(rèn)為sql,這個(gè)不需要更改

?

本章節(jié)任務(wù):將student表的表結(jié)構(gòu)和數(shù)據(jù)利用kettle導(dǎo)出成sql文件備份

?

3.2.4 表輸出

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

1.?選擇合適的數(shù)據(jù)庫(kù)連接

2.?選擇目標(biāo)表,目標(biāo)表可以提前在數(shù)據(jù)庫(kù)中手動(dòng)創(chuàng)建好,也可以輸入一個(gè)數(shù)據(jù)庫(kù)不存在的表,然后點(diǎn)擊下面的SQL按鈕,利用kettle現(xiàn)場(chǎng)創(chuàng)建

3.?如果目標(biāo)表的表結(jié)構(gòu)和輸入的數(shù)據(jù)結(jié)構(gòu)不一致,還可以自己指定數(shù)據(jù)庫(kù)字段

?

本章節(jié)任務(wù):熟悉表輸出控件,然后將student表的數(shù)據(jù)導(dǎo)入到student2表中,要求利用kettle現(xiàn)場(chǎng)創(chuàng)建student2表

?

3.2.5 更新&插入/更新

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

兩者區(qū)別:

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

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

?

?

1.?選擇正確的數(shù)據(jù)庫(kù)連接

2.?選擇目標(biāo)表

3.?輸入兩個(gè)表來(lái)進(jìn)行比較的字段,一般來(lái)說(shuō)都是用主鍵來(lái)進(jìn)行比較

4.?輸入要更新的字段

本章節(jié)任務(wù):手動(dòng)修改下student表的數(shù)據(jù)(修改和新增),然后用修改后的數(shù)據(jù)和student2來(lái)進(jìn)行對(duì)比,分別嘗試更新和插入/更新控件的區(qū)別

??

3.2.6 刪除

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

1.?選擇數(shù)據(jù)庫(kù)連接

2.?選擇目標(biāo)表

3.?設(shè)置數(shù)據(jù)流跟目標(biāo)表要?jiǎng)h除數(shù)據(jù)的對(duì)應(yīng)字段

?

本章節(jié)任務(wù):刪除student2表格中student表里面已有的數(shù)據(jù)(按照student表對(duì)student2表數(shù)據(jù)進(jìn)行去重)

?

3.3 Kettle轉(zhuǎn)換控件

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

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

?

3.3.1 Concat?fields

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

?

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

提示:如果涉及到中文亂碼問(wèn)題,請(qǐng)參考資料:Mysql中文亂碼問(wèn)題.docx

?

3.3.2 值映射

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

1.?選擇映射的字段

2.?還可以自定義映射完以后的新字段名

3.?可以設(shè)置不匹配時(shí)的默認(rèn)值

4.?設(shè)置映射的值

?

本章節(jié)任務(wù):將staff表的sex字段,映射成男or女,然后再插入到emp表中

?

3.3.3 增加常量&增加序列

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

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

?

?

?

?

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

?

3.3.4 字段選擇

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

?

?

?

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

?

3.3.5 計(jì)算器

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

?

?

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

?

?

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

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

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

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

?

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

?

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

?

?

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

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

?

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

?

3.3.8 唯一行(哈希值)

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

?

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

3.3.9 拆分字段

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

?

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

?

?

3.3.10 列拆分為多行

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

?

?

1.?選擇要拆分的字段

2.?設(shè)置合適的分割符

3.?設(shè)置分割以后的新字段名

4.?選擇是否輸出新數(shù)據(jù)的排列行號(hào),行號(hào)是否重置

?

本章節(jié)任務(wù):對(duì)08_列拆分為多行.xlsx的數(shù)據(jù)按照hobby字段進(jìn)行拆分為多行,然后將新數(shù)據(jù)輸出到excel文件中,查看數(shù)據(jù)。

?

3.3.11 行扁平化

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

1)?使用之前需要對(duì)數(shù)據(jù)進(jìn)行排序

2)?每個(gè)分組的數(shù)據(jù)條數(shù)要保證一致,否則數(shù)據(jù)會(huì)有錯(cuò)亂

?

1.?選擇扁平化的字段

2.?填寫(xiě)目標(biāo)字段,字段個(gè)數(shù)跟每個(gè)分組的數(shù)據(jù)一致

本章節(jié)任務(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ù)的過(guò)程。具體效果如下圖:

?

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

?

1.?關(guān)鍵字段:從數(shù)據(jù)內(nèi)容變成列名的字段

2.?分組字段:列轉(zhuǎn)行,轉(zhuǎn)變以后的分組字段

3.?目標(biāo)字段:增加的列的列名字段

4.?數(shù)據(jù)字段:目標(biāo)字段的數(shù)據(jù)字段

5.?關(guān)鍵字值:數(shù)據(jù)字段查詢(xún)時(shí)的關(guān)鍵字,也可以理解為key

6.?類(lèi)型:要給目標(biāo)字段設(shè)置合適的類(lèi)型,否則會(huì)報(bào)錯(cuò)

本章節(jié)任務(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)?strong>數(shù)據(jù)列。我們也可以簡(jiǎn)單理解為行轉(zhuǎn)列控件是列轉(zhuǎn)行控件的逆向操作。具體如下圖:

?

?

?

1.?Key字段:行轉(zhuǎn)列,生成的列名字段名

2.?字段名稱(chēng):原本數(shù)據(jù)流中的字段名

3.?Key值:Key字段的值,這個(gè)是自己自定義的,一般都跟前面的字段名稱(chēng)一樣

4.?Value字段:對(duì)應(yīng)的Key值的數(shù)據(jù)列的列名

本章節(jié)任務(wù):將input目錄下的11_行轉(zhuǎn)列.xlsx用excel控件輸入,然后行轉(zhuǎn)列,熟悉行轉(zhuǎn)列控件的使用。

?

3.4 Kettle應(yīng)用控件

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

3.4.1 替換NULL值

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

1.?可以選擇替換數(shù)據(jù)流中所有字段的null值

2.?也可以選擇字段,在下面的字段框里面,根據(jù)不同的字段,將null值替換成不同的值

本章節(jié)任務(wù):替換excel數(shù)據(jù)12_替換NULL值.xlsx的bonus列的null值為0

3.4.2 寫(xiě)日志

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

1.?選擇日志級(jí)別

2.?可以輸入自定義輸出的語(yǔ)句

3.?選擇要輸出打印的字段

?

本章節(jié)任務(wù):在上個(gè)任務(wù)的基礎(chǔ)之上,添加寫(xiě)日志控件,在控制臺(tái)輸出查看數(shù)據(jù)。

?

3.5 Kettle流程控件

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

3.5.1 Switch/case

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

?

1.?選擇需要判斷的字段

2.?選擇判斷字段的值的類(lèi)型

3.?填寫(xiě)分類(lèi)數(shù)據(jù)的判斷條件和目標(biāo)步驟

本章節(jié)任務(wù):將excel:13_Switch-Case.xlsx的數(shù)據(jù)按照部門(mén)字段進(jìn)行分類(lèi),將同一個(gè)部門(mén)的數(shù)據(jù)輸出到一個(gè)excel中

?

3.5.2 過(guò)濾記錄

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

?

1.?在下面先填寫(xiě)數(shù)據(jù)的判斷條件

2.?然后再上面選擇下判斷條件為true或者false的輸出步驟

本章節(jié)任務(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)。

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

?

3.5.3 中止

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

?

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

?

3.6 Kettle查詢(xún)控件

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

3.6.1 數(shù)據(jù)庫(kù)查詢(xún)

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

?

1.?選擇合適的數(shù)據(jù)庫(kù)鏈接

2.?輸入要去數(shù)據(jù)庫(kù)里面查詢(xún)的表名

3.?輸入兩個(gè)表進(jìn)行左連接的連接條件

4.?獲取返回字段,得到查詢(xún)表返回的值

本章節(jié)任務(wù):利用表輸入控件獲取到staff表的數(shù)據(jù),然后利用數(shù)據(jù)庫(kù)查詢(xún)控件查詢(xún)到department表的數(shù)據(jù),然后對(duì)兩個(gè)表按照dept_id字段進(jìn)行左連接,并預(yù)覽數(shù)據(jù)

?

3.6.2 流查詢(xún)

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

?

1.?輸入查詢(xún)的數(shù)據(jù)流

2.?輸入兩個(gè)流進(jìn)行匹配的字段(等值匹配)

3.?輸入查詢(xún)出的字段

本章節(jié)任務(wù):用流查詢(xún)控件,將staff和department的數(shù)據(jù)按照dept_id字段進(jìn)行關(guān)聯(lián)起來(lái)

?

3.7 Kettle連接控件

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

3.7.1 合并記錄

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

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

?

1.?舊數(shù)據(jù)源:選擇舊數(shù)據(jù)來(lái)源的步驟

2.?新數(shù)據(jù)源:選擇新數(shù)據(jù)來(lái)源的步驟

3.?標(biāo)志字段:設(shè)置標(biāo)志字段的名稱(chēng),標(biāo)志字段用于保存比較的結(jié)果,比較結(jié)果有下列幾種

①?“identical” – 舊數(shù)據(jù)和新數(shù)據(jù)一樣

②?“changed” – 數(shù)據(jù)發(fā)生了變化;

③?“new” – 新數(shù)據(jù)中有而舊數(shù)據(jù)中沒(méi)有的記錄

④?“deleted” –舊數(shù)據(jù)中有而新數(shù)據(jù)中沒(méi)有的記錄

4.?關(guān)鍵字段:用于定位判斷兩個(gè)數(shù)據(jù)源中的同一條記錄的字段。

5.?比較字段:對(duì)于兩個(gè)數(shù)據(jù)源中的同一條記錄,指定需要比較的字段

本章節(jié)任務(wù):利用合并記錄控件比較合并記錄-新舊excel的數(shù)據(jù),并預(yù)覽數(shù)據(jù),查看標(biāo)志字段的內(nèi)容

?

?

?

3.7.2 記錄集連接

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

?

1.?選擇需要連接的兩個(gè)數(shù)據(jù)流的步驟

2.?選擇連接類(lèi)型,一共有四個(gè):INNER,LEFT OUTER,RIGHT OUTER,F(xiàn)ULL OUTER

3.?從兩個(gè)數(shù)據(jù)流步驟里面選出連接字段

本章節(jié)任務(wù):使用記錄集連接控件對(duì)數(shù)據(jù)庫(kù)表satff和department按照部門(mén)id分別進(jìn)行內(nèi)連接,左連接,右連接,外連接,查看數(shù)據(jù)的不同

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

?

3.8?Kettle統(tǒng)計(jì)控件

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

3.8.1 分組

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

?

1.?選擇分組字段

2.?給其余字段選擇合適的聚合函數(shù)進(jìn)行計(jì)算

本章節(jié)任務(wù):給表staff的數(shù)據(jù)按照部門(mén)進(jìn)行分組,求出各部門(mén)人數(shù)以及各部門(mén)員工的平均年齡。

?

3.9 Kettle映射控件

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

3.9.1 映射

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

?

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

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

?

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

??

???

3.10 Kettle腳本控件

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

3.10.1?執(zhí)行SQL腳本

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

?

1.?選擇合適的數(shù)據(jù)庫(kù)連接

2.?填入要執(zhí)行的sql語(yǔ)句

本章節(jié)任務(wù):利用執(zhí)行sql腳本控件將student表數(shù)據(jù)的atguigu的年齡更新為18。

?

第4章 Kettle作業(yè)

4.1 作業(yè)簡(jiǎn)介

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

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

4.1.1?作業(yè)項(xiàng)

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

1.?轉(zhuǎn)換步驟與步驟之間是數(shù)據(jù)流,作業(yè)項(xiàng)之間是步驟流。

2.?轉(zhuǎn)換啟動(dòng)以后,所有步驟一起并行啟動(dòng)等待數(shù)據(jù)行的輸入,而作業(yè)項(xiàng)是嚴(yán)格按照?qǐng)?zhí)行順序啟動(dòng),一個(gè)作業(yè)項(xiàng)執(zhí)行完以后,再執(zhí)行下一個(gè)作業(yè)項(xiàng)。

3.?在作業(yè)項(xiàng)之間可以傳遞一個(gè)結(jié)果對(duì)象(result object)。這個(gè)結(jié)果對(duì)象里面包含了數(shù)據(jù)行,它們不是以數(shù)據(jù)流的方式來(lái)傳遞的。而是等待一個(gè)作業(yè)項(xiàng)執(zhí)行完了,再傳遞個(gè)下一個(gè)作業(yè)項(xiàng)。

4.?因?yàn)樽鳂I(yè)順序執(zhí)行作業(yè)項(xiàng),所以必須定義一個(gè)起點(diǎn)。有一個(gè)叫“開(kāi)始”的作業(yè)項(xiàng)就定義了這個(gè)點(diǎn)。一個(gè)作業(yè)只能定一個(gè)開(kāi)始作業(yè)項(xiàng)。

4.1.2 作業(yè)跳

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

①無(wú)條件執(zhí)行:不論上一個(gè)作業(yè)項(xiàng)執(zhí)行成功還是失敗,下一個(gè)作業(yè)項(xiàng)都會(huì)執(zhí)行。這是一種藍(lán)色的連接線(xià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)。通常在需要無(wú)錯(cuò)誤執(zhí)行的情況下使用。這是一種綠色的連接線(xiàn),上面有一個(gè)對(duì)鉤號(hào)的圖標(biāo)。

?

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

?

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

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

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

1)?點(diǎn)擊左上角的文件,新建一個(gè)作業(yè)

?

2)?按照下圖設(shè)置作業(yè)項(xiàng)和作業(yè)跳

?

3)?轉(zhuǎn)換作業(yè)項(xiàng)設(shè)置,選擇要嵌入的轉(zhuǎn)換文件

?

4)?發(fā)送郵件作業(yè)項(xiàng)設(shè)置,

?

?

5)?分別嘗試作業(yè)執(zhí)行成功和失敗,查看kettle發(fā)送的郵件信息

第5章 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)雙擊表輸入對(duì)象,填寫(xiě)相關(guān)配置,測(cè)試是否成功

?

?

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

?

?

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

注意:如果需要連接mysql數(shù)據(jù)庫(kù),需要先將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)行成功的話(huà)發(fā)郵件提醒?

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

?

(2) 按圖示拉取組件

?

(3)雙擊Start編輯Start

?

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

?

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

?

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

??

?

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

5.3 Hive-HDFS案例

案例三:將hive表的數(shù)據(jù)輸出到hdfs

(1)因?yàn)樯婕暗絟ive和hbase的讀寫(xiě),需要先修改相關(guān)配置文件。

修改kettle安裝目錄下的data-integration\plugins\pentaho-big-data-plugin下的plugin.properties,設(shè)置active.hadoop.configuration=hdp26,并將如下配置文件拷貝到data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp26下

?

(2)啟動(dòng)hdfs,yarn,zookeeper,hbase集群的所有進(jìn)程,啟動(dòng)hiveserver2服務(wù)

[atguigu@hadoop102 ~]$ hadoop.sh?start???//自己寫(xiě)的hadoop啟動(dòng)腳本

[atguigu@hadoop102 ~]$ zk.sh?start //自己寫(xiě)的zookeeper啟動(dòng)腳本

[atguigu@hadoop102 ~]$ /opt/module/hbase-1.3.1/bin/start-hbase.sh

[atguigu@hadoop102 ~]$ /opt/module/hive/bin/hiveserver2

(3)進(jìn)入beeline,查看10000端口開(kāi)啟情況

[atguigu@hadoop102 ~]$ /opt/module/hive/bin/beeline

Beeline version 1.2.1 by Apache Hive

beeline> !connect jdbc:hive2://hadoop102:10000(回車(chē))

Connecting to jdbc:hive2://hadoop102:10000

Enter username for jdbc:hive2://hadoop102:10000: atguigu(輸入atguigu)

Enter password for jdbc:hive2://hadoop102:10000:(直接回車(chē))

Connected to: Apache Hive (version 1.2.1)

Driver: Hive JDBC (version 1.2.1)

Transaction isolation: TRANSACTION_REPEATABLE_READ

0: jdbc:hive2://hadoop102:10000>(到了這里說(shuō)明成功開(kāi)啟10000端口)

(4)創(chuàng)建兩張表dept和emp

CREATE TABLE dept(deptno int, dname string,loc string)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t';

?

CREATE TABLE emp(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm int,

deptno int)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t';

(5)插入數(shù)據(jù)

insert into dept values(10,'accounting','NEW YORK'),(20,'RESEARCH','DALLAS'),(30,'SALES','CHICAGO'),(40,'OPERATIONS','BOSTON');

?

insert into emp values

(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20),

(7499,'ALLEN','SALESMAN',7698,'1980-12-17',1600,300,30),

(7521,'WARD','SALESMAN',7698,'1980-12-17',1250,500,30),

(7566,'JONES','MANAGER',7839,'1980-12-17',2975,NULL,20);

(6)按下圖建立流程圖

?

(7)設(shè)置表輸入,連接hive

?

?

(8)設(shè)置排序?qū)傩?/p>

?

(9)設(shè)置連接屬性

?

(10)設(shè)置字段選擇

?

(11)設(shè)置文件輸出,點(diǎn)擊瀏覽按鈕

?

選擇存儲(chǔ)路徑為HDFS,并且新建一個(gè)Hadoop?Cluster連接

?

按照集群配置輸入對(duì)應(yīng)的參數(shù)

?

選擇創(chuàng)建好的大數(shù)據(jù)集群連接

?

然后再依次設(shè)置文本文件輸出控件的文件,內(nèi)容,字段三個(gè)設(shè)置頁(yè),注意一定要獲取字段

?

?

(12)保存并運(yùn)行轉(zhuǎn)換,然后查看hdfs

?

5.4 HDFS-Hbase案例

案例四:讀取hdfs文件并將sal大于1000的數(shù)據(jù)保存到hbase中

(1) 在HBase中創(chuàng)建一張表用于存放數(shù)據(jù)

[atguigu@hadoop102 ~]$ /opt/module/hbase-1.3.1/bin/hbase shell

hbase(main):004:0> create 'people','info'

(2)按下圖建立流程圖

?

(3)設(shè)置文件輸入,連接hdfs

?

?

注意千萬(wàn)別忘記獲取字段,然后給字段設(shè)置格式

?

(4)設(shè)置過(guò)濾記錄

?

(5)設(shè)置HBase?output控件

1.選擇一個(gè)大數(shù)據(jù)集群連接

2.選擇上面復(fù)制過(guò)來(lái)的hbase-site.xml

3.去第二個(gè)配置頁(yè)面創(chuàng)建映射,然后保存映射(選擇rowkey字段)

4.再回第一個(gè)配置頁(yè)選擇Hbase表以及剛剛創(chuàng)建好的映射

?

?

注意:若報(bào)錯(cuò)沒(méi)有權(quán)限往hdfs寫(xiě)文件,在Spoon.bat中第119行添加參數(shù)

"-DHADOOP_USER_NAME=atguigu" "-Dfile.encoding=UTF-8"

(6)保存轉(zhuǎn)換并運(yùn)行,然戶(hù)去hbase里面查看數(shù)據(jù)

?

第6章 Kettle資源庫(kù)

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

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

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

?

2) 選擇Database?Repository

?

3)?建立新連接

?

?

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

?

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

?

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

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

?

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

?

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

?

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

?

6.2 文件資源庫(kù)

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

1)選擇connect

?

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

?

3)選擇File?Repository

?

4)填寫(xiě)信息

?

第7章 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ì)減小年老代大小。此值對(duì)系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8。

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

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

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

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

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

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

7、可以使用sql來(lái)做的一些操作盡量用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這種類(lèi)似sql合理的分區(qū),如果刪除操作是基于某一個(gè)分區(qū)的,就不要使用delete row這種方式(不管是deletesql還是delete步驟),直接把分區(qū)drop掉,再重新創(chuàng)建;

11、盡量縮小輸入的數(shù)據(jù)集的大?。ㄔ隽扛乱彩菫榱诉@個(gè)目的);

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


【尚硅谷】大數(shù)據(jù)技術(shù)之Kettle視頻教程的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
舞阳县| 环江| 来安县| 任丘市| 奉贤区| 陈巴尔虎旗| 克拉玛依市| 宜阳县| 鲜城| 化德县| 罗山县| 仙桃市| 光泽县| 固原市| 南部县| 天峻县| 东丰县| 义乌市| 龙门县| 明水县| 特克斯县| 天台县| 海淀区| 五常市| 长阳| 德阳市| 乐东| 山丹县| 黔西| 喀喇沁旗| 建湖县| 宣恩县| 卓尼县| 清徐县| 尼玛县| 甘孜县| 徐闻县| 上思县| 荣昌县| 鄱阳县| 厦门市|