15
Kettle 笔笔 4 笔笔笔笔笔 笔笔 笔笔 2014-03-18 笔笔笔笔 [email protected] Kettle 笔笔 4 笔笔笔笔笔 笔笔笔笔 一体,: 笔笔笔笔笔 笔笔笔笔笔笔笔笔笔笔 笔 笔笔笔笔 笔 笔笔笔笔笔 笔 笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔 笔 笔笔 笔 笔笔笔 笔 笔 :,一,、、, 笔笔笔笔笔笔笔 笔笔笔 笔 笔笔 笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔 笔笔笔 笔笔笔笔笔笔笔笔 笔 笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔 笔笔 、、;一(一, sqlserver 笔 笔笔 笔笔 笔笔 笔 笔 /笔笔笔笔 笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔笔 ),一一 笔笔笔笔笔笔笔笔笔 bug笔 笔 笔笔笔笔笔笔 :一, A 笔 B 笔笔笔笔 笔笔 A 笔 B 笔笔笔笔笔笔笔 C 笔笔 笔笔 一, A笔B笔 笔笔笔笔笔笔笔 一,,; 笔笔笔笔: 笔笔笔笔笔笔笔A笔B 笔 笔笔笔笔笔 ,, XML 笔笔 笔笔笔 A笔笔笔 XML 笔笔笔笔笔笔 ,一 XML 笔笔笔笔笔笔笔 1

Kettle笔记 4 简单的案例

Embed Size (px)

Citation preview

Page 1: Kettle笔记 4 简单的案例

Kettle 笔记 4 简单的案例作者:张孟志日期:2014-03-18

联系方式:[email protected]

Kettle 笔记 4 简单的案例

简单概括一下数据转换的几种具体应用场景,按网络环境划分主要包括:表视图模式:这种情况我们经常遇到,就是在同一网络环境下,我们对各

种数据源的表数据进行抽取、过滤、清洗等,例如历史数据同步、异构系统数

据交互、数据对称发布或备份等都归属于这个模式;传统的实现方式一般都要

进 行 研 发 ( 一 小 部 分 例 如 两 个 相 同 表 结 构 的 表 之 间 的 数 据 同 步 , 如 果

sqlserver 数据库可以通过发布/订阅实现),涉及到一些复杂的一些业务逻辑

如果我们研发出来还容易出各种 bug;前置机模式:这是一种典型的数据交换应用场景,数据交换的双方 A 和 B

1

张孟志, 14年3月17日,
其实Kettle自带了大量的案例。在samples目录下有“Kettle file repository”类型资源库创建的案例。
Page 2: Kettle笔记 4 简单的案例

网络不通,但是 A 和 B 都可以和前置机 C 连接,一般的情况是双方约定好前置

机的数据结构,这个结构跟 A 和 B 的数据结构基本上是不一致的,这样我们就

需要把应用上的数据按照数据标准推送到前置机上,这个研发工作量还是比较

大的;文件模式: 数据交互的双方 A 和 B 是完全的物理隔离,这样就只能通过以

文件的方式来进行数据交互了,例如 XML 格式,在应用 A 中我们开发一个接口

用来生成标准格式的 XML,然后用优盘或者别的介质在某一时间把 XML 数据

拷贝之后,然后接入到应用 B 上,应用 B 上在按照标准接口解析相应的文件把

数据接收过来;综上 3 种模式如果我们都用传统的模式无疑工作量是巨大的,那么怎么做

才能更高效更节省时间又不容易出错呢?答案是我们可以用一下 Kettle!

在本文中将演示两个案例,一个是读取 CSV 文件数据后转换为 XML 文件

保 存 —— CSV2XML , 一 个 是 数 据 库 inputdb 中 的 user 表 同 步 到 数 据 库

outputdb 的 user 表——DB2DB。

2

Page 3: Kettle笔记 4 简单的案例

CSV2XML

1.准备一个 CSV 文件——CSV2XML.CSV,里面是需要读取的数据。last_name, name

Suarez,Maria

Guimaraes,Joao

Rush,Jennifer

Ortiz,Camila

Rodriguez,Carmen

da Silva,Zoe

2.新建一个转换,保存(到资源库)。

3.分别将 CSV 文件输入(输入)、Java Script 代码(脚本)和 XML 输出(输出)组件

拖到主工作台上,按住 Shift 键,同时,点击一个组件,形成被选中的状态,拖

动到目标组件上。于是,形成一个数据流向的箭头(hop)。显示效果如下图所示,

下面将展示组件配置。

3

Page 4: Kettle笔记 4 简单的案例

4. 根据 CSV2XML.CSV,依次配置 CSV 文件输入、Java Script 代码和 XML 输出

组件。配置 CSV 文件输入,配置内容简明易懂,不一一详述。点击“获取字段”

可以从配置的文件(文件名)中获取到 CSV 文件第一行数据,并作为字段。注

意这个字段名必须为英文字符并且不能有空格。“预览”可以查看配置的结果,

这就知道配置是否有错误。

配置 Java Script 代码。“CSV 文件输入”的字段在这里是输入参数,可以直

4

张孟志, 14年3月17日,
其实有空格应该也是可以解决的,这里只是想减少不必要的麻烦。
Page 5: Kettle笔记 4 简单的案例

接作为变量使用。最下方的字段表格框可以定义这个步骤输出的参数,最终输

出参数将包括“CSV 文件输入”的字段和这里定义的字段。“测试脚本”可以

查看配置的结果,这就知道配置是否有错误。

配置 XML 输出。

5

Page 6: Kettle笔记 4 简单的案例

5.保存转换后运行。按 F9,或选择“运行”-->“执行转换”,在执行转换界面“启动”转换。

6.查看日志与结果。执行转换过程会有信息输出到控制台。重点查看“步骤度量”、“日志”。

6

Page 7: Kettle笔记 4 简单的案例

查看输出的 XML 文件——CSV2XML.xml。<?xml version="1.0" encoding="GBK"?>

<Rows>

<Item><LASTNAME>Suarez</LASTNAME> <NAME>Maria</NAME> <MSG>Suarez.Maria posted a blog at

2014-02-01 15&#x3a;54&#x3a;53</MSG> </Item>

<Item><LASTNAME>Guimaraes</LASTNAME> <NAME>Joao</NAME> <MSG>Guimaraes.Joao posted a blog

at 2014-02-01 15&#x3a;54&#x3a;53</MSG> </Item>

<Item><LASTNAME>Rush</LASTNAME> <NAME>Jennifer</NAME> <MSG>Rush.Jennifer posted a blog at

2014-02-01 15&#x3a;54&#x3a;53</MSG> </Item>

<Item><LASTNAME>Ortiz</LASTNAME> <NAME>Camila</NAME> <MSG>Ortiz.Camila posted a blog at

2014-02-01 15&#x3a;54&#x3a;53</MSG> </Item>

<Item><LASTNAME>Rodriguez</LASTNAME> <NAME>Carmen</NAME> <MSG>Rodriguez.Carmen posted a

blog at 2014-02-01 15&#x3a;54&#x3a;53</MSG> </Item>

<Item><LASTNAME>da Silva</LASTNAME> <NAME>Zoe</NAME> <MSG>da Silva.Zoe posted a blog at

2014-02-01 15&#x3a;54&#x3a;53</MSG> </Item>

</Rows>

XML 文件确实按照我们的定义生成了,但好像有字符集表示错误。为什么

会这样呢?启动自己编译的 Kettle4.4再运行一下这个转换试试。Kettle4.4 是没

有字符集表示错误的,这又说明旧有系统升级可能带来问题,建议使用旧的稳

7

Page 8: Kettle笔记 4 简单的案例

定版本。从下面开始我们将使用自己编译的 Kettle4.4。

DB2DB

一个没有数据库的复杂系统是很难想象的。而数据库多种多样,也是千差

万别。因此对旧有系统产生的数据做 ETL 的重要工作之一就是操纵各种数据库。

由于设备限制,在这里只演示 MySQL 数据库抽取数据到 MySQL 数据库,对于

Kettle 用户而言,不同的数据库只是在资源库中连接配置不同罢了。DB2DB 的目标是将数据库 inputdb 中的 user 表同步到数据库 outputdb

的 user 表。1.创建数据库/表。

//命令行 root 用户登录@>mysql -u root -p@>密码//创建 input 用户CREATE USER input IDENTIFIED BY 'input';//创建 inputdb 数据库CREATE database inputdb;//赋权 inputgrant all privileges on inputdb.* to input identified by 'input';//刷新系统权限表flush privileges;

//创建 output 用户CREATE USER output IDENTIFIED BY 'output';//创建 outputdb 数据库CREATE database outputdb;//赋权 output

8

张孟志, 14年3月17日,
如果计算机配置比较好,建议使用Oracle/MySQL等多数据库方案。
Page 9: Kettle笔记 4 简单的案例

grant all privileges on outputdb.* to output identified by 'output';//刷新系统权限表flush privileges;

exit;

input 用户创建表并插入初始数据。//命令行 input 用户登录@>mysql -u input -p@>密码//使用 inputdb 数据库use inputdb;//创建 user 表create table user (id int not null,userid varchar(30) not null,username varchar(200) not null) default charset=utf8;//插入数据,这句很重要(查询也需要),不然会乱码set names gb2312;insert into user values(1,'lisi','李四');

9

Page 10: Kettle笔记 4 简单的案例

insert into user values(2,'zhangsan','张三');insert into user values(3,'wangwu','王五');exit;

output 用户创建表。//命令行 output 用户登录@>mysql -u output -p@>密码//使用 outputdb 数据库use outputdb;//创建 user 表create table user (id int not null,user_id varchar(30) not null,user_name varchar(200) not null) default charset=utf8;exit;

读者请注意,input 和 output 的 user 表字段名并不相同。2.配置资源库的连接。将 MySQL 的 JDBC 连接 jar 包放入依赖包扩展目录下,例如(F:\kettle4.4\

distrib\libext\JDBC)。启动 Kettle4.4 的 Spoon,可以看到为 Kettle5配置的资源库 mysql4kettle。为

什么?因为现在这个值已经是 Kettle设置的系统参数了。

10

Page 11: Kettle笔记 4 简单的案例

输入 admin密码直接进入 Spoon。Kettle4.4汉化得并不完整,很多地方还是

英文。我们进入探索资源库的 Connections Tab页。新增两个数据库连接,分别

对应 inputdb/outputdb。

11

Page 12: Kettle笔记 4 简单的案例

3. 新建一个转换,保存(到资源库)。4.分别将表输入(输入)和插入/ 更新(输出)组件拖到主工作台上,按住

Shift 键,同时,点击一个组件,形成被选中的状态,拖动到目标组件上。于是,

形成一个数据流向的箭头(hop)。显示效果如下图所示。

5.配置表输入和插入/ 更新组件。表输入组件配置,数据库连接下拉列表框中选择 inputdb,也可以在旁边编

12

Page 13: Kettle笔记 4 简单的案例

辑这个数据库连接或新建。在 SQL语句文本框中数据从 inputdb 抽取数据的 SQL

语句。“预览”可以看到这个配置的数据输入结果。

插入/ 更新组件配置,数据库连接下拉列表框中选择 outputdb,,也可以

在旁边编辑这个数据库连接或新建。目标表为 outputdb 中需要插入/更新记录的

表。用来查询的关键字,这个表格框用来填写更新的关联字段,通常是主键。

更新字段,填写的是 outputdb 中 user 表需要插入/更新记录的字段,注意与输

入数据的字段匹配。

13

Page 14: Kettle笔记 4 简单的案例

6. 保存转换后运行。按 F9,或选择“Action”-->“执行”,在执行转换界面“Launch”转换。7. 查看日志与结果。执行转换过程会有信息输出到控制台。重点查看“步骤度量”、“日志”。

查看 outputdb 数据库中的 user 表。//命令行 output 用户登录

14

Page 15: Kettle笔记 4 简单的案例

@>mysql -u output -p@>密码//使用 outputdb 数据库use outputdb;//这句很重要(查询也需要),不然会乱码set names gb2312;select * from user;

8.创建 Job。如果我们需要让这个转换定时执行怎么办呢,那么我们需要建立一个作业

Job。新建一个作业(Job),保存(到资源库)。

9.分别将 START(通用)和 Transformation(通用)组件拖到主工作台上,

按住 Shift 键,同时,点击一个组件,形成被选中的状态,拖动到目标组件上。15

Page 16: Kettle笔记 4 简单的案例

于是,形成一个数据流向的箭头(hop)。显示效果如下图所示。

10.配置 START 和 Transformation 组件。START 组件就是一个调度组件,可以配置这个作业什么时间执行。例如:

每天的 12 点执行。

Transformation 组件配置,使用“Kettle file repository”类型资源库的时候通

过“转换文件名”选取转换文件配置这个作业需要执行的转换;“ Kettle

database repository”类型资源库则使用“转换名称”选取一个资源库中的转换对

象配置这个作业需要执行的转换。

16

Page 17: Kettle笔记 4 简单的案例

11. 保存作业后运行。按 F9,或选择“Action”-->“执行”,在执行作业界面“Launch”作业。

案例之后

通过这两个简单的案例,是不是觉得 Kettle 简约而不简单。但通常能领悟

到这几个事实。1.业务比技术重要。2.数据的异构性与造成 ETL 的繁杂。3.调度与执行是 ETL 的核心。

17