简介
Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。
Kettle家族目前包括4个产品:Spoon、Pan、CHEF、Kitchen。
SPOON 允许你通过图形界面来设计ETL转换过程(Transformation)。
PAN 允许你批量运行由Spoon设计的ETL转换 (例如使用一个时间调度器)。Pan是一个后台执行的程序,没有图形界面。
CHEF 允许你创建任务(Job)。 任务通过允许每个转换,任务,脚本等等,更有利于自动化更新数据仓库的复杂工作。任务通过允许每个转换,任务,脚本等等。任务将会被检查,看看是否正确地运行了。
KITCHEN 允许你批量使用由Chef设计的任务 (例如使用一个时间调度器)。KITCHEN也是一个后台运行的程序。
我们主要讲解spoon。
一、配置仓库管理
点击右上角配置数据存储位置
点击Repository Manager…
数据库存储则是将所创建的文件保存到数据库,这样可以保证数据的安全性。(长时间的传输可能出现数据库连接超时)。
文件存储则是将文件保存到本地磁盘,两种可视情况而定。
二、转换的使用
配置BD连接,必须先把数据库连接的jar包放在kettle安装目录下的lib包。如:mysql-connector-java-5.1.38.jar
如下:配置了一个oracle和一个mysql的数据库
新建一个转换: 文件 —> 新建 —> 转换
简单的数据转换最常用的就是CSV文件输入和表输入两种了,其他的可以在作业中用到。
输出有以上几种,下面我们示范一个从数据库读取数据,输出一个csv文件。
写完后点击预览查看是否正确
下面看文本文件输出
点击执行,生成csv文本
三、作业
比如说我们要同时同步五张表的数据则可以新建一个作业,多线程去同步五张表的数据
四、定时执行任务
我们将作业保存在数据库中,windows下一般用任务调度来执行,linux可以用crotable实现
新建一个bat文件
然后将这个bat文件添加到windows定时任务中就可以了
五、java代码
kettle也支持java代码及js脚本等
假设有表person,有字段id,name,code,若code为空,则取name,若不为空加上999,然后更新原表数据。
表输入如下:
Java代码如下:
更新如下:
执行成功后查看数据库数据:
六、性能优化
Oracle:
defaultRowPrefetch = 20000 (可以根据内存情况定)
预取条数默认值,oracle默认为10,可以增加该值来减少数据库请求以提高查询效率
Mysql:
defaultFetchSize:设置一次读取多少条数据,不设置读大表可能会出现OOM问题
rewriteBatchedStatements:批量插入,可以提高插入数据的性能
useServerPrepStmts:如果服务器支持,是否使用服务器端预处理语句? 默认值为“真”(如果数据类型不一 致,可能会出现丢失精度问题)
useCursorFetch:使用FetchSize必须启用
useCompression:与服务器进行通信时采用zlib压缩(真/假)? 默认值为“假”。
提交数量可以根据内存情况尽量给大,最大5W条。
根据电脑内存修改spoon.bat
PENTAHO_DI_JAVA_OPTIONS=”-Xms8192m””-Xmx8192m” “-XX:MaxPermSize=4096m”