在【數(shù)據(jù)整合】Kettle 應(yīng)用之一 介紹、安裝中我們已經(jīng)介紹了如何安裝Kettle工具。現(xiàn)在我們開始使用Kettle。
Kettle應(yīng)用場景
- 示例1:將數(shù)據(jù)源A庫中的某張表的數(shù)據(jù)插入到數(shù)據(jù)庫B中。
- 示例2:將數(shù)據(jù)源A庫中的某張表的數(shù)據(jù)插入更新到數(shù)據(jù)庫B中。
- 示例3:將數(shù)據(jù)源A庫中的某張表或某幾個表中的字段合并后的數(shù)據(jù)插入到數(shù)據(jù)庫B中。
- 示例4:將數(shù)據(jù)源A庫中的某兩張或多張表級聯(lián)查詢的數(shù)據(jù)插入到數(shù)據(jù)庫B中的一張表中
在此,我們主要對示例1進行說明。
為方便演示,我們在數(shù)據(jù)庫A和數(shù)據(jù)庫B中分別創(chuàng)建表userA和表userB。最終目標為將數(shù)據(jù)表userA中的數(shù)據(jù)插入到數(shù)據(jù)表userB中。
create database testA;
use testA;
create table `userA`(
`id`int(10) primary key,
`name` varchar(50),
`age` int(3)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into userA values(1,'張三',20);
insert into userA values(2,'李四',21);
insert into userA values(3,'王五',22);
create database testB;
use testB;
create table `userB`(
`idB`int(10) primary key,
`nameB` varchar(50),
`ageB` int(3)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
操作步驟
1、運行軟件,進入主界面。點擊左上角的 文件 → 新建 → 轉(zhuǎn)換新建一個轉(zhuǎn)換,并保存,轉(zhuǎn)換的后綴名為ktr。
2、點擊面板左側(cè)的 主對象樹 ,選擇 DB連接 右鍵,選擇 新建 或 新建數(shù)據(jù)庫連接向?qū)?/strong> 分別創(chuàng)建對數(shù)據(jù)庫A和數(shù)據(jù)庫B的連接。
注意: 如果在點擊測試連接時出現(xiàn)下圖所示錯誤,檢查我們的安裝目錄下的lib中是否有對應(yīng)數(shù)據(jù)庫連接的jar包文件(如mysql的jar文件:mysql-connector-java-5.1.6-bin.jar),下載對應(yīng)的jar,放到lib文件夾下,重啟kettle軟件,即可。
3、點擊面板左側(cè)的 核心對象 ,選擇 輸入文件夾下的 表輸入 并把它拖到右側(cè)的編輯區(qū)中。
4、雙擊編輯區(qū)的“表輸入”圖標,編輯數(shù)據(jù)輸入源。
5、點擊面板左側(cè)的 核心對象 ,選擇 轉(zhuǎn)換文件夾下的 字段選擇 并把它拖到右側(cè)的編輯區(qū)中。
6、按住 shift 同時鼠標從 “testA表輸入”到“字段選擇”畫一條連接線。
7、雙擊編輯區(qū)的“字段選擇”,選擇“元數(shù)據(jù)”面板,點擊右側(cè)“獲取改變的字段”,將自動列出輸入表中所有字段。根據(jù)要抽取的目標表中的字段名,給每一個輸入字段修改為對應(yīng)的輸出字段。
注意:此時必須在Encoding欄中選擇輸出庫的編碼格式
8、點擊面板左側(cè)的 核心對象 ,選擇 輸出文件夾下的 表輸出 并把它拖到右側(cè)的編輯區(qū)中,按住 shift 劃線連接 “字段選擇”。
9、雙擊編輯區(qū)的“表輸出”圖標,編輯數(shù)據(jù)輸出目標。
10、然后勾選 指定數(shù)據(jù)庫字段 ,選擇 數(shù)據(jù)庫字段 ,點擊 輸入字段映射,映射輸入輸出關(guān)系。
注意:如果在點擊 輸入字段映射 時,提示如下錯誤:
檢查我們的數(shù)據(jù)庫驅(qū)動jar包版本 mysql-connector-java-5.1.6-bin.jar , 因為測試數(shù)據(jù)庫版本為 MySQL 6.3 , 而使用此版本的數(shù)據(jù)庫驅(qū)動包,會在創(chuàng)建數(shù)據(jù)庫連接的時候發(fā)送測試語句 SET OPTION SQL_SELECT_LIMIT=DEFAULT , 但是5.6及以后的版本都不再支持SET...,此時,我們只需要將驅(qū)動版本升級,只需要將數(shù)據(jù)庫驅(qū)動版本修改為5.1.22以上即可。
11、因為我們在“字段選擇”中修改了每個輸入字段對應(yīng)的輸出字段的名稱,此處,我們點擊 猜一猜 ,將會自動根據(jù)字段近似度自動匹配映射關(guān)系。
12、到這里,我們最簡單的一個提取數(shù)據(jù)的轉(zhuǎn)換已經(jīng)建立完成了,點擊“校驗這個轉(zhuǎn)換”,Kettle會校驗并給出簡單的報告。沒有任何問題。
13、點擊“運行這個轉(zhuǎn)換”,選擇“本地執(zhí)行”,點擊“啟動”來執(zhí)行這個轉(zhuǎn)換。
14、轉(zhuǎn)換成功后,我們可以在控制臺中看到如下信息。檢查本地數(shù)據(jù)庫,數(shù)據(jù)庫A的userA表中的數(shù)據(jù)已經(jīng)全部被導(dǎo)入到了數(shù)據(jù)庫B的userB表中。
注:此示例只適用于目標表為空,或者目標表與源表沒有主鍵沖突的情況