一.功能简介

kettle主要由转换作为任务点,一个转换代表一次具体的任务,它可以做数据的同步以及很多很多功能。。。总之,他就是你想要完成某种操作的具体实施者。每一个环节可以通过鼠标拖动来将环节添加到主窗口中。 并可通过shift+鼠标拖动,实现环节之间的hop连接。

二、新建转换

我们用一个简单案例做一下吧

1.文件–>新建–>转换

kettle连接mongodb数据库 kettle连接_kettle连接mongodb数据库

2.数据库连接

(1)准备驱动包
如果要连接mysql数据库,要事先下载mysql的jdbc驱动包,所以我们要下载该jar包 (jar包下载详见附录)

下载好后,解压该文件将文件夹中的mysql-connector-java-5.1.48-bin.jar文件复制到kettle所安装的data-integration\lib下即可。

首先连接要操作的数据库(如果涉及跨库,那么目标库也要连接),不要忘记命名’‘连接名称’’

注意: 在数据库链接的过程中,可能会报某个数据库连接找不到的异常。
那是因为你没有对应的数据库java链接驱动,请下载对应驱动后,放入kettle的lib文件夹。
例如mysql-connector-java-5.1.47对应mysql5.7

kettle连接mongodb数据库 kettle连接_数据库_02


驱动下载地址:

4.设置表输入

核心对象>输入>表输入(设置数据源和步骤名称,步骤名称按照需求取)

所以要去“输入”文件夹中你会发现这么有很多组件,如CSV文件输入、文本文件输入等,

步骤名称:就是给该步骤起一个通俗易懂又显而易见的名称,但需要注意在整个转换中步骤名称是唯一的,不可重复。

kettle连接mongodb数据库 kettle连接_kettle连接mongodb数据库_03


【注意】(1)在表输入的sql里,可以自己编写所需要sql语句,并且可使用条件参数,但是要注意如下限制:

kettle连接mongodb数据库 kettle连接_数据库连接_04

(2)获取SQL语句时可以通过“动作”获取表信息、表结构等。

kettle连接mongodb数据库 kettle连接_数据库连接_05

(3)写好SQL后可以通过预览查看语句实现效果

5.设置表输出

kettle连接mongodb数据库 kettle连接_数据库_06


6.进行hop连接

按住shift将控件连接

7.保存并执行转换

kettle连接mongodb数据库 kettle连接_字段_07

8.查看日志

kettle连接mongodb数据库 kettle连接_数据库_08

日志的几个关键输出信息

【日志】:
其中有几个比价关键的输出信息:
I:表示从表中读取了多少行数据;
O:表示向目标表中写入了多少行数据;
R:从之前的步骤中读取了多少行数据;
W:向下一个步骤写入了多少行数据;
U:当前步骤更新过的记录数;
E:当前步骤处理的记录数。

【执行历史】
读、写、输入、输出、更新、拒绝和错误的行数;
激活是运行的状态,错误的话整行都会出现红色背景;
时间就是运行的时间;
速度:就是处理数据的速度,单位为“条记录/秒”。
【步骤度量】
【preview data】

执行完后,可以浏览每个步骤的数据,查看这个Tab页,然后点击不同的组件,就会呈现出每个步骤对外的输出结果集。

三、界面和常用控件

新建转换在左侧会有两个tab:主对象树和核心对象

kettle连接mongodb数据库 kettle连接_数据库_09


(1)主对象树

Run configurations:可以查看当前的运行设置,也可以新建一个,还没用过,后期补充;
DB连接:可以查看当前的数据库连接,双击可以新建一个数据库连接;
Step(步骤):查看当前都用了哪些组件;
Hops(节点连接):查看当前所有的Transformation-Hop,双击可以新建一个Transformation-Hop来连接两个Step,只不过一般不这么用;
数据库分区schemas;
子服务器;
Kettle集群schemas;
Data Services;
Hadoop clusters。

后面5部分的功能,不常用,后期补充

(2)核心对象

核心对象菜单包含的内容较多,列出的是job中可以调用的环节列表,可以通过鼠标拖动的方式对环节进行添加,每一个环节可以通过鼠标拖动来将环节添加到主窗口中。 并可通过shift+鼠标拖动,实现环节之间的连接。

输入: 文本文件输入(本地)、表输入(数据库)、读取系统信息
输出:文件输出(支持多种类型)、表输出、增删改查、数据同步
Streaming(流数据):JMS、Kafka、MQTT等
转换:去重、排序、行操作(行转列、行扁平化)、列操作(列转行、列拆分为多行)、字符串(剪切字符串、字符串操作、字符串剪切)、字段操作(字段选择、将字段值设置为常量、拆分字段、根据字段值来改变序列、设置字段值)

应用:写日志、发邮件、替换null值、处理文件
流程:执行作业、中止、检查空流、空操作、过滤记录等
脚本:扩展功能,编写js脚本,、SQL脚本、正则表达式
Pentaho Server
查询:数据库查询、连接、检查(检查文件是否存在、是否被锁定、表是否存在)、模糊匹配、流查询
连接:join、合并记录、排序合并、记录关联、记录集连接
数据仓库:维度查询、更新;联合查询和更新
检验:数据校验
统计:分析查询、分组、在内存中分组、样本行
Big Data:avro、cassandra、couchDB、hbase、hadoop、mapreduce(MR)、mongodb、orc、Parquet
Agile
加密:pgp加密
作业: 环境变量设置和获取,从结果获取文件、记录;复制文件(记录)到结果
映射:映射、子转换
批量加载:关系型和非关系型数据库的批量加载
内联:socket
不推荐的
历史:表输入 、表输出等

四.两个案例

1.简单的数据表插入和更新

步骤如下:

(1)新建表输入
核心对象-->输入-->表输入(往下拖在后面),用鼠标拖拽到右面版
(2)双击表输入,进入编辑状态 
选择数据库连接和编辑sql语句,例如:select * from 表名
在这一步可以点击预览,查看自己是否连接正确。
(3)选择插入\更新
核心对象-->输出-->插入\更新,用鼠标拖拽到右面板
(4)连接“表输入”和“插入\更新”
按住shift,鼠标连接,从表输入指向插入更新(这个操作叫做hop操作)
(5)编辑“插入\更新”
双击进入编辑状态
数据库连接、目标表、
用来查询的关键字:用来做对比的字段,kettle会判断用来插入还是更新,一般用id
更新字段:填入表字段、流字段和是否更新(Y/N)
【注意:】目标模式:oracle数据库,选择用户,mysql不用选择
(6)保存
选一个位置保存文件
(7)点击运行按钮,运行文件
2.多表连接并跨库输出

下面我们要讲的例子是:读取一个MySQL数据库中的两张表的信息,做Join连接,再输出到另一个MySQL数据库中。

源数据:

数据库1:有两张表user用户表和goods商品表(表结构如下)
数据库2:备用

kettle连接mongodb数据库 kettle连接_字段_10


kettle连接mongodb数据库 kettle连接_kettle连接mongodb数据库_11


具体步骤如下

(1)新建转换:新建>转换

(2)设置输入和数据库连接
两个表输入(一个来自user表,一个来自goods表)

kettle连接mongodb数据库 kettle连接_数据库_12

(3)设置记录集连接:核心对象>连接>记录集连接

kettle连接mongodb数据库 kettle连接_数据库连接_13


kettle连接mongodb数据库 kettle连接_数据库连接_14


(4)预览快捷键F10

kettle连接mongodb数据库 kettle连接_数据库_15


(5)跨库创建表,设置表结构

在数据库2中建一个简单表,有相应字段

mysql> create table test(
    -> gid int not null,
    -> name varchar(20) not null,
    -> price int,
    -> category varchar(40),
    -> id int)
    -> engine=innodb default charset utf8;

查看一下表结构

mysql> desc test;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| gid      | int(11)     | NO   |     | NULL    |       |
| name     | varchar(20) | NO   |     | NULL    |       |
| price    | int(11)     | YES  |     | NULL    |       |
| category | varchar(40) | YES  |     | NULL    |       |
| id       | int(11)     | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

(6)跨库表输出:设置数据库字段

kettle连接mongodb数据库 kettle连接_字段_16


kettle连接mongodb数据库 kettle连接_数据库连接_17


说明:

步骤名称:记住不可重复。

数据库连接:这里我们又新建了一个test。

目标模式:就是选择数据库连接中的数据库,但是这里数据库连接里已经选择了数据库,所以点击“浏览”获取不到任何信息。

目标表:就是整合后的数据要导入的表,通过点击“浏览”打开“数据库浏览器”进行选择,也可以手动填写。

提交记录数量:在数据表中用事务插入行的行数,如果N比0大,每N行提交一次连接。否则,不使用事务,速度会慢一些。

裁剪表:就是对目标表执行“Truncate Table”操作,清空其原始数据,之前我们着重介绍过,希望你没有忘记它。

指定数据库字段:这个是必须勾选的,反正每次我都会勾选。勾选后,Tab页“数据库字段”的“获取字段”和“输入字段映射”才会可点击。

两个Tab页

  • Tab页“主选项”
  • 表分区数据:使用这个选项可以在多个表之间拆分数据。
  • 表名定义在一个字段:使用这些选项可以拆分数据到一个或多个表里,目标表名可以用你指定的字段来定义。例如如果你想存储顾客性别数据,这些数据可能会存储到表M和表F里面(female 女性和male 男性表)。这个选项可以阻止这些字段插入到对应的表里。
  • 批量插入:如果你想批量插入的话,就使用这个选项。这个选项的速度最快,默认被选上。
  • 返回一个自动产生的关键字:往表中插入行时,是否产生一个关键字。
  • 自动产生关键字的字段名称:指定包含关键字的输出字段的字段名称。
  • 指定数据库字段:只导入指定的字段,多余的字段忽略。
  • Tab页“数据库字段”
  • 获取字段:Kettle会把上一个步骤“记录集连接”输入过来的所有字段都拉取出来,并与目标表的字段做名称上的对应,若目标表没有的字段直接命名为输入字段名。有点绕口哈。如你感觉Kettle自动生成的映射有问题,你可以点击相应的字段名,会出现下列列表供你选择应该对应的字段名。

输入字段映射:初次点击也许会报错,因为有些表字段在目标表中并不存在,若这些字段确实不需要你可以删除它们。删除后再点击“输入字段映射”

SQL:点击右下角的“SQL”,会对“插入的字段”中的“表字段”与目标表的字段进行对比,若有目标表不存在的表字段会出现如下对话框:

(7)运行F9

都是绿色的√号,说明该转换成功执行,没有任何错误

【注意】

其实这是同一个数据库的信息获取,完全可以通过编写SQL用单个“表输入”解决,就像第二个“表输入”中的SQL语句。这里为了例子的丰富性,就用两个“表输入”加“记录集连接”来呈现。实际中,我们经常要从不同的数据源整合数据,再导入到其他的数据库,这个例子是非常简单的基础运用。