基于Kettle的數(shù)據(jù)采集原理以及應用過程
基于Kettle的數(shù)據(jù)采集
一、Kettle是什么
Kettle 是一款國外開源的 ETL 工具,純 Java 編寫,可以在Windows、Linux和Unix上運行,數(shù)據(jù)抽取高效穩(wěn)定,通過提供一個圖形化的用戶環(huán)境來描述你想做什么,而不是你想怎么做,它的數(shù)據(jù)抽取高效穩(wěn)定(數(shù)據(jù)遷移工具)。

二、Kettle用來做什么

作用:
可以說凡是有數(shù)據(jù)整合、轉(zhuǎn)換、遷移的場景都可以使用Kettle,他代替了完成數(shù)據(jù)轉(zhuǎn)換任務(wù)的手工編碼,降低了開發(fā)難度。
同時,我們可以在自己實際業(yè)務(wù)里,使用它來實現(xiàn)數(shù)據(jù)的剖析、清洗、校驗、抽取、轉(zhuǎn)換和加載等各類常見的ETL類工作。
比如,除了ODS/DW類比較大型的應用外,Kettle實際還可以為中小企業(yè)提供靈活的數(shù)據(jù)抽取和數(shù)據(jù)處理的功能。Kettle除了支持各種關(guān)系型數(shù)據(jù)庫,HBase MongoDB這樣的NoSQL數(shù)據(jù)源外,它還支持Excel、Access這類小型的數(shù)據(jù)源。并且通過這些插件擴展,kettle可以支持各類數(shù)據(jù)源。
另外,Kettle的數(shù)據(jù)處理功能也很強大,除了選擇、過濾、分組、連接和排序這些常用的功能外,Kettle里的Java表達式、正則表達式、java腳本、Java類等功能都非常靈活而強大,都非常適合于各種數(shù)據(jù)處理功能。
應用場景:
表視圖模式:這種情況我們經(jīng)常遇到,就是在同一網(wǎng)絡(luò)環(huán)境下,我們對各種數(shù)據(jù)源的表數(shù)據(jù)進行抽取、過濾、清洗等,例如歷史數(shù)據(jù)同步、異構(gòu)系統(tǒng)數(shù)據(jù)交互、數(shù)據(jù)對稱發(fā)布或備份等都歸屬于這個模式;傳統(tǒng)的實現(xiàn)方式一般都要進行研發(fā)(一小部分例如兩個相同表結(jié)構(gòu)的表之間的數(shù)據(jù)同步,如果sqlserver數(shù)據(jù)庫可以通過發(fā)布/訂閱實現(xiàn)),涉及到一些復雜的一些業(yè)務(wù)邏輯如果我們研發(fā)出來還容易出各種bug;
前置機模式:這是一種典型的數(shù)據(jù)交換應用場景,數(shù)據(jù)交換的雙方A和B網(wǎng)絡(luò)不通,但是A和B都可以和前置機C連接,一般的情況是雙方約定好前置機的數(shù)據(jù)結(jié)構(gòu),這個結(jié)構(gòu)跟A和B的數(shù)據(jù)結(jié)構(gòu)基本上是不一致的,這樣我們就需要把應用上的數(shù)據(jù)按照數(shù)據(jù)標準推送到前置機上,這個研發(fā)工作量還是比較大的;
文件模式:數(shù)據(jù)交互的雙方A和B是完全的物理隔離,這樣就只能通過以文件的方式來進行數(shù)據(jù)交互了,例如XML格式,在應用A中我們開發(fā)一個接口用來生成標準格式的XML,然后用優(yōu)盤或者別的介質(zhì)在某一時間把XML數(shù)據(jù)拷貝之后,然后接入到應用B上,應用B上在按照標準接口解析相應的文件把數(shù)據(jù)接收過來;
PS:按照個人見解,kettle所做的事情,就是對數(shù)據(jù)進行各種處理,包括對數(shù)據(jù)進行清洗校驗等,本人使用最多的場景,應該是對數(shù)據(jù)庫的數(shù)據(jù)進行抽取并清洗,通過一個庫抽取到另一個庫的表,抽取過來后,通過存儲過程進行數(shù)據(jù)清洗,將接口表數(shù)據(jù)通過業(yè)務(wù)邏輯的清洗,最終到落地表中。至于為什么要這么做,因為在實際業(yè)務(wù)中,很有可能會依賴到另一個系統(tǒng)的數(shù)據(jù),一般而言,是不允許直接讀取另一個系統(tǒng)的源表數(shù)據(jù)的,更別提直接對數(shù)據(jù)進行編寫代碼來用作調(diào)整。
三、Kettle怎么用
Kettle 簡介
ETL(Extract-Transform-Load的縮寫,即數(shù)據(jù)抽取、轉(zhuǎn)換、裝載的過程),對于企業(yè)或行業(yè)應用來說,我們經(jīng)常會遇到各種數(shù)據(jù)的處理,轉(zhuǎn)換,遷移,了解并掌握一種etl工具的使用,必不可少,支持圖形化的GUI設(shè)計界面,然后可以以工作流的形式流轉(zhuǎn),在做一些簡單或復雜的數(shù)據(jù)抽取、質(zhì)量檢測、數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)過濾等方面有著比較穩(wěn)定的表現(xiàn),使用它減少了非常多的研發(fā)工作量,提高了我們的工作效率
Kettle官網(wǎng) :http://kettle.pentaho.org/
下載的最新版本的kettle是:pdi-ce-7.1.0.0-12
官方入門文檔 :https://wiki.pentaho.com/display/EAI/Getting+Started
ETL工具-Kettle Spoon教程,關(guān)于工具,這篇文章介紹比較完全,不做很詳細的介紹。
Kettle 專業(yè)術(shù)語:
Transformation 轉(zhuǎn)換步驟,可以理解為將一個或者多個不同的數(shù)據(jù)源組裝成一條數(shù)據(jù)流水線。然后最終輸出到某一個地方,文件或者數(shù)據(jù)庫等。
Job 作業(yè),可以調(diào)度設(shè)計好的轉(zhuǎn)換,也可以執(zhí)行一些文件處理(比較,刪除等),還可以 ftp 上 傳,下載文件,發(fā)送郵件,執(zhí)行 shell 命令等
Hop 連接轉(zhuǎn)換步驟或者連接 Job(實際上就是執(zhí)行順序) 的連線 Transformation hop:主要表示數(shù)據(jù)的流向。從輸入,過濾等轉(zhuǎn)換操作,到輸出。
Kettle中有兩種腳本文件,transformation(轉(zhuǎn)換ktr結(jié)尾)和job(任務(wù)kjb結(jié)尾),transformation完成針對數(shù)據(jù)的基礎(chǔ)轉(zhuǎn)換,job則完成整個工作流的控制(工作流程首先由個開始節(jié)點【可以設(shè)置定時執(zhí)行】 可以選擇transformation)。

四、Kettle簡單使用
Kettle的具體使用:
最簡單的使用例子,將源庫中的源表采集到目標庫中的目標表,就是把a庫中某一張表,直接抽到b庫的表中
前置
安裝與使用,
kettle是開源的免費工具,可以直接去官網(wǎng)進行下載,同時由于kettle是Java編寫,需要配置jdk,建議1.8以上。(工具需要可留郵箱)
下載到本地后,運行Spoon.bat的腳本文件

安裝成功,并執(zhí)行腳本文件后,會出現(xiàn)一個基于windows的可視化的程序,如下

實操
1.新建轉(zhuǎn)換(倆庫之間的采集的建立)

在新增的轉(zhuǎn)換中,新建數(shù)據(jù)連接,包括目標庫與源庫倆個連接

連接信息可如下圖填寫

填寫完成后,可以點擊測試,如果測試結(jié)果如下,為成功建立
數(shù)據(jù)庫建立后,新增輸入-表輸入(配置源表數(shù)據(jù)來源)


配置內(nèi)容如下

輸入配置完后,配置輸出-插入更新(配置目標表信息,以及字段名配置)

配置內(nèi)容如下

輸入與輸出都配置完成后,通過Hop(連接線),將輸入與輸出進行連接。【選中輸入后,按住shift,拖拽至輸出即可】

配置完成后進行測試,點擊左上角的運行按鈕

2.新建作業(yè)(Job)【用于調(diào)用剛剛那個轉(zhuǎn)換,包括定時調(diào)用與立即調(diào)用】
新增一個作業(yè),如下

在新增的作業(yè)中,新增一個START(配置調(diào)用時間)

配置如下,可以自己進行時間的配置

在新增的作業(yè)中,新增一個轉(zhuǎn)換(配置剛剛保存的那個轉(zhuǎn)換)

配置信息如下

同理,用Hop把倆者連接
連接后進行測試作業(yè)是否正常執(zhí)行,如下后作業(yè)也新建成功。

小結(jié)
至此,kettle三元素中的轉(zhuǎn)換(Trancer),作業(yè)(Job),連接線(Hop),都全部使用過了。起碼是完成了最基本的數(shù)的抽取,完成了,最簡單的kettle的使用,至于一些復雜的參數(shù)傳遞,業(yè)務(wù)上的清洗放到后面介紹。