Kettle應用場景
- 示例1:將數據源A庫中的某張表的數據插入到數據庫B中。
- 示例2:將數據源A庫中的某張表的數據插入更新到數據庫B中响蕴。
- 示例3:將數據源A庫中的某張表或某幾個表中的字段合并后的數據插入到數據庫B中。
- 示例4:將數據源A庫中的某兩張或多張表級聯查詢的數據插入到數據庫B中的一張表中
在此,我們主要對示例4進行說明绿聘。
為方便演示,我們在數據庫A中創(chuàng)建“用戶表”次舌、“商品表”斜友、“訂單表”,在數據庫B中創(chuàng)建“訂單詳細信息表”垃它。最終目標為根據用戶表鲜屏、商品表、訂單表獲取訂單詳細信息表国拇,最終目標結果如下洛史。
create database testA;
use testA;
-- 用戶表
create table `user`(
`id`int(10) primary key,
`name` varchar(50),
`age` int(3)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into user values(10001,'張三',20);
insert into user values(10002,'李四',25);
insert into user values(10003,'王五',22);
-- 商品表
create table `goods`(
`id`int(10) primary key,
`name` varchar(50),
`price` float(16)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into goods values(1000001,'蘋果',6.5);
insert into goods values(1000002,'橘子',2.5);
insert into goods values(1000003,'香蕉',1.5);
-- 訂單表
create table `order`(
`id`int(10) primary key,
`user_id` varchar(50),
`goods_id` int(10)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `order` values(1,10001,1000001);
insert into `order` values(2,10001,1000002);
insert into `order` values(3,10003,1000001);
insert into `order` values(4,10003,1000001);
insert into `order` values(5,10002,1000002);
insert into `order` values(6,10002,1000003);
create database testB;
use testB;
-- 訂單詳情表
create table `order_detail`(
`id`int(10) primary key,
`user_name` varchar(50),
`user_age` int(3),
`goods_name` varchar(50),
`goods_price` float(16)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
操作步驟
1、運行軟件酱吝,進入主界面也殖。點擊左上角的 文件 → 新建 → 轉換新建一個轉換,并保存,轉換的后綴名為ktr忆嗜。
2己儒、點擊面板左側的 主對象樹 ,選擇 DB連接 右鍵捆毫,選擇 新建 或 新建數據庫連接向導 分別創(chuàng)建對數據庫A和數據庫B的連接闪湾。
注意: 如果在點擊測試連接時出現下圖所示錯誤,檢查我們的安裝目錄下的lib中是否有對應數據庫連接的jar包文件(如mysql的jar文件:mysql-connector-java-5.1.6-bin.jar)绩卤,下載對應的jar途样,放到lib文件夾下,重啟kettle軟件濒憋,即可何暇。
3、點擊面板左側的 核心對象 凛驮,選擇 輸入文件夾下的 表輸入 并把它拖到右側的編輯區(qū)中裆站。
4、雙擊編輯區(qū)的“表輸出”圖標黔夭,編輯數據輸入源遏插。此處為多表聯合查詢,所以表輸入我們配置的表為訂單表(關聯關系表)
5纠修、點擊面板左側的** 核心對象 ,選擇 查詢 ** 文件夾下的 ** 數據庫查詢 **厂僧,并把它拖到右側的編輯區(qū)中扣草,按住 shift 畫線連接 “表輸入”,如下圖颜屠。
6辰妙、雙擊編輯區(qū)的“數據庫查詢”,圖標甫窟,配置級聯查詢關系密浑。
- 配置用戶表關聯查詢:
(1)步驟名稱寫入“user”,數據庫連接選擇我們user表所在的數據庫粗井,如果數據源未配置尔破,可查看步驟2,進行配置浇衬。
(2)選擇數據庫之后懒构,我們通過“表名”后的 “瀏覽”按鈕,選擇我們的關聯表“user”耘擂。
(3)查詢所需關鍵胆剧,即為兩表之間的關聯字段,操作符根據需要醉冤,此處選擇 “=”秩霍。
(4) 查詢表返回的值篙悯,即為我們需要通過關聯表“user”,獲取到的字段铃绒。
- 類似的鸽照,我們按照上述方法,配置商品表關聯查詢匿垄。
7移宅、點擊面板左側的** 核心對象 ,選擇 輸出 ** 文件夾下的 ** 插入/更新 **椿疗,并把它拖到右側的編輯區(qū)中漏峰,按住 shift 畫線連接 “數據庫查詢”(goods),如下圖届榄。
8浅乔、雙擊右側編輯區(qū)的“查詢/更新”圖標,編輯輸出數據對應關系铝条。
用來查詢的關鍵字靖苇,此處只選擇主鍵id,表示這里按照id查詢班缰,如果此id存在贤壁,則更新數據,若不存在則插入數據埠忘。
9脾拆、到這里,我們最簡單的一個級聯查詢的轉換已經建立完成了莹妒,點擊“校驗這個轉換”名船,Kettle會校驗并給出簡單的報告斩箫。沒有任何問題梧油。
10、點擊“運行這個轉換”蔑穴,選擇“本地執(zhí)行”鉴腻,點擊“啟動”來執(zhí)行這個轉換迷扇。
11、轉換成功后爽哎,我們可以在控制臺中看到如下信息谋梭。檢查本地數據庫。
此時倦青,我們看到瓮床,雖然我們的數據已經成功提取了,但是中文部分出現了亂碼。
我們可以進入 主對象樹 → DB連接 → testA(數據源) ** 隘庄,雙擊“testA”踢步,選擇“高級”,在下方輸入 set names gbk;丑掺,設置編碼格式為gbk(此處為我本地環(huán)境問題需要設置為gbk編碼)获印,根據實際情況設置編碼格式。
再次啟動這個轉換街州,我們可以看到兼丰,數據已經正常顯示。
注意:
- “數據庫查詢”組件的作用是使用前面“表輸入”查詢到的一條或多條記錄再查詢其他表中的數據唆缴,其本質類似于我們常用的Master-Detail table query鳍征,在查詢到主表的某條記錄后,自動返回字表中匹配的記錄面徽。
- “數據庫查詢”組件的作用相當于 左連接查詢 艳丛,我們使用時,需注意趟紊。