kettle

产品介绍

 

 

做什么事情首先都要规划好,不能走一步算一步。心里有规划,做起事情来就事半功倍。

 

 Kettle是一款国外开源的ETL工具,纯java编写,可以在WindowLinuxUnix上运行,绿色无需安装,数据抽取高效稳定。

Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。

Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。

Kettle中有两种脚本文件transformationjobtransformation完成针对数据的基础转换,job则完成整个工作流的控制。

作为Pentaho的一个重要组成部分,现在在国内项目应用上逐渐增多。

 

      在个人的看来,ETL的工具能够实现各类数据库的数据交互,如oracle数据实时同步到mysql中,msql同步到oracle中等等,其中kettle都能实现这个过程!ETL:数据抽取(从源端数据抽取)、数据的清洗转换(数据库间的映射关系)、数据的加载(insert的过程)!最主要的一点实时进行调度的功能!

 

 

       ETLBI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直接关接到BI项目的成败。ETL也是一个长期的过程,只有不断的发现问题并解决问题,才能使ETL运行效率更高,为项目后期开发提供准确的数据。

  ETL的设计分三部分:数据抽取、数据的清洗转换、数据的加载。在设计ETL的时候也是从这三部分出发。数据的抽取是从各个不同的数据源抽取到ODS(这个过程也可以做一些数据的清洗和转换),在抽取的过程中需要挑选不同的抽取方法,尽可能的提高ETL的运行效率。ETL三个部分中,花费时间最长的是T(清洗、转换)的部分,一般情况下这部分工作量是整个ETL2/3。数据的加载一般在数据清洗完了之后直接写入DW中去。

 

       ETL的实现有多种方法,常用的有三种,第一种是借助ETL工具如OracleOWBSQL server 2000DTSSQL Server2005SSIS服务、informatic等实现,第二种是SQL方式实现,第三种是ETL工具和SQL相结合。前两种方法各有优缺点,借助工具可以快速的建立起ETL工程,屏蔽复杂的编码任务,提高速度,降低难度,但是欠缺灵活性。SQL的方法优点是灵活,提高ETL运行效率,但是编码复杂,对技术要求比较高。第三种是综合了前面二种的优点,极大的提高ETL的开发速度和效率。

 

 

 

 

 

 

1.        在本安装

 

2.           安装JDK

 

略!安装此软件前需要安装JDK,此软件是Java开发,必须运行在Java的环境下!

 

IP地址

操作系统

安装软件

 

10.86.7.75

Winxp

JDKpdi-ce-4.2.0-stable.tar.gz

 

10.86.87.107

Redhat5.7 64bit

Oracle数据库

 

10.86.7.99

Win2003 64bit

Oracle数据库

 

10.86.87.155

Redhat5.7 64bit

Mysql5.5

 

 

 

 

 

3.         Kettle实现

 

 

Kettle模块介绍

 

ETLExtract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于

金融IT 来说,经常会遇到大数据量的处理,转换,迁移,所以了解并掌握一种

etl工具的使用,必不可少。

 

Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高

效稳定。Kettle中有两种脚本文件,transformationjobtransformation完成针

对数据的基础转换,job则完成整个工作流的控制。

 

 

运行kettle

 

        解压文件pdi-ce-4.2.0-stable.tar.gz,进入目录后,点击文件Spoon.bat!无须对软件进行安装

 

 

 

 

4 实现Mysql数据库抽取oracle数据库的过程

 

 

源用户

 10.86.87.107数据库用户dms01

一)创建了表wangmin,其中包含两个字段

 

SQL> desc wangmin

Name Type         Nullable Default Comments

---- ------------ -------- ------- --------

ID   NUMBER                                

NAME VARCHAR2(50) Y

 

二)查看表数据

 

 

注:表中有16条数据

 

创建目标用户表及数据

 

Mysql数据库中用户dms下,创建表min

 

 

 

 

 

创建表:

 

 

create table etl_table(id int,name varchar(50));

 

新建转换

 

 

文件=>新建=>转换

 

 

 

创建DB连接

 

    一)创建源端数据库DB连接(oracle)

 

DB连接=>新建

 

 

  二)创建目标端数据库DB连接(Mysql)

 

    

 

 

 

 

实现表的数据抽取配置

 

一)核心对象=>输入=>表输入

 

 

 

二)核心对象=>输出=>插入/更新

 

 

 

 

三)建表输入和插入/更新的关系

 

点键盘按shift键,拖拽即可连线。

 

实现源表的数据抽取配置

 

一)表输入配置

 

双击表输入=>选择数据库连接

 

 

二)获取SQL查询语句

 

 

二)预览

 

 

实现目标表的数据抽取配置

 

此操作在Mysql数据库中进行。

 

一)选择数据库连接,及目标表

 

 

此过程与上面类似,故这里省略!

 

二)映射字段

 

 

 

 

 

注:在映射字段中,就显示了那些需要抽取的字段!

运行,执行ETL过程

 

一)点击图标如下:

 

 

注:完成ETL操作

 

 

查看目标源数据

 

 

 

注:数据与源端一致!

 

 

在源端插入数据再进行ETL过程

 

一)源端插入数据

二)执行

 

 

 

三)查看目标端数据

 

 

 

 

注:数据只插入一条,说明它是基于源端数据插入时才插入的!

实现调度(此过程已经重新配置映射关系)

 

创建JOB

 

一)新建=>作业=>通用

 

 

 

二)编写Transformation

选择生成的oracle-mysql的脚本

 

 

三)设置调度时间间隔

 

点击start

 

四)运行JOB

 

点击run this JOB

 

JOB输入文件格式

 

 

 

 

对源端插入数据

 

 

查看目标端数据情况

 

过两分钟后,查看目标端数据情况:

 

 

 

注:数据已经传输到mysql数据库中,已经实现整个ETL过程!

 

Mysql乱码产生原因

 

由于oracle数据库的字符集为al32uft8,mysql中的字符集为latin1.如下:

 

 

解决方案:

一)修改数据库字符集

mysql> alter database dms DEFAULT CHARACTER SET utf8;

Query OK, 1 row affected (0.01 sec)

 

mysql> show create database dms;

+----------+--------------------------------------------------------------+

| Database | Create Database                                              |

+----------+--------------------------------------------------------------+

| dms      | CREATE DATABASE `dms` /*!40100 DEFAULT CHARACTER SET utf8 */ |

+----------+--------------------------------------------------------------+

1 row in set (0.00 sec)

二)修改my.cnf配置文件

1 查看原character_set_server字符集

mysql> show variables like 'character%';

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | utf8                       |

| character_set_connection | utf8                       |

| character_set_database   | utf8                       |

| character_set_filesystem | binary                     |

| character_set_results    | utf8                       |

| character_set_server     | latin1                     |

| character_set_system     | utf8                       |

| character_sets_dir       | /opt/mysql/share/charsets/ |

+--------------------------+----------------------------+

8 rows in set (0.00 sec)

2 修改my.cnf

 

my.cnf中添加character_set_server=utf8如下:

 

[mysqld]

port            = 3306

socket          = /tmp/mysqld.sock

skip-external-locking

character_set_server=utf8

 

3.重启mysql

[mysql@SR3 init.d]$ ./mysql restart

Shutting down MySQL..[  OK  ]

rm: cannot remove `/var/lock/subsys/mysql': Permission denied

Starting MySQL..[  OK  ]

[mysql@SR3 init.d]$

 

4 查看修改后的character_set_server

 

 

mysql> show variables like 'character%';

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | utf8                       |

| character_set_connection | utf8                       |

| character_set_database   | utf8                       |

| character_set_filesystem | binary                     |

| character_set_results    | utf8                       |

| character_set_server     | utf8                       |

| character_set_system     | utf8                       |

| character_sets_dir       | /opt/mysql/share/charsets/ |

+--------------------------+----------------------------+

8 rows in set (0.00 sec)

 

mysql>

 

mysql删除数据再执行调度

 

一)删除数据

 

 

delete from etl_table

 

二)执行调度

此步骤略!

 

 

三)查看数据是否乱码

 

 

 

注:乱码问题解决!谢谢!

 

7  总结(ETL优点及缺点)

 

一)优点

1        能实现各类数据库间的数据交互(OracleDb2MysqlMssql)

2        实现数据抽取、转换、加载的过程

3        实现任务调度能功能

4        针对于个别表

5        通过映射,只会迁移想要的字段的数据

6        数据实现同步的好工具

7        在kettle中,transformationjob都会生成.kjb方面的文件!

8        异构数据库数据处理都是以上类似的过程,这里就不做重复操作

)缺点

1 不适合数据库迁移(很多表的时候),添加工作复杂

2 各数据库的转换需要字符集的一致!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值