一      关于Kettle

Kettle是一款国外开源的ETL工具,纯java编写,数据抽取高效稳定的数据迁移工具。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流程的控制。

二      本项目中的ETL需求

本项目主要有以下要求:

1、能完成ASCii编码到UTF8编码的转换。

2、稳定。

3、可高效的完成批量数据的转移。

4、能记录、查看(最好能给出分析)转移过程中失败的数据。

5、易于使用,学习成本低。

经测试,以上需求Kettle均可满足,将在之后的操作说明中提及并在最后总结。

三      操作说明

3.1软件获取

在官网http://kettle.pentaho.com/下载,该软件为绿色版,解压后点击Spoon.bat运行,需要JRE环境支持。(此文档中使用4.2.0 stable版本示例)

3.2 基本操作

Kettle左侧的功能区有“主对象树”和“核心对象”两个面板。其中“核心对象”较为常用。右侧为对象的属性编辑区。可以将左侧的对象拖动到右侧编辑区。同时按键盘shift键在两个对象上画线,可连接两个对象。多个对象连接成为一个transformation。

3.3 示例一:Kettle的基本操作和简单应用

场景要求:此demo假设需抽取***.**.**.33上编码为US7ASCII的某一张表中数据提取到本地上编码为UTF-8的库中。

详细步骤:

1、双击Spoon.bat运行软件,点击“没有资源库”,进入主界面。左上角点击”文件-新建-转换“保存为demo.ktr

2、左侧选择“核心对象”面板。”在“输入”文件夹下选择“表输入”并把它拖动到右侧编辑区。

3、双击编辑区的“表输入”图标,编辑数据输入来源。点击“数据库连接”右侧的“新建”按钮,按demo背景中的要求,配置数据库参数。配置后点击“Test”,若配置有误将弹出异常提示,根据提示修正。若无误将显示如下信息:

点击“确定”和“OK”,我们为此表输入对象确定了数据库。

4、继续点击“获取SQL”查询语句,选择输入表。这里我们选择A_GB这张表。

选择输入表后,请务必勾选“允许延迟加载”复选框。(否则可能导致乱码,将在文档最后说明。)其余选项默认,点击“确定”完成表输入对象的编辑。

5、在左侧“核心对象”中的“转换”文件夹中选择“字段选择”功能,拖动到右侧编辑区。按住键盘shift同时鼠标从“表输入”为起点,“字段选择”为终点画一条连接。如图:

6、双击“字段选择”,打开编辑窗口,选择“元数据”面板,点击右侧“获取改变的字段”,将自动列出之前表输入中所有字段。

7、根据要抽取的目标表字段名(输出字段名),给每一个输入字段改成和输出字段相同的名称。同时请务必在Encoding一栏中选择输出库的编码。根据demo的背景要求,此处我们选择GBK。

8、编辑完“字段选择”后点击“确定”关闭窗口。同上,在“输出”文件夹中拖动一个“表输出”到右侧编辑区,并画连接。

9、双击“表输出”打开其编辑窗口。同“表输入”一样,按照demo背景要求,配置好本地库。

10、同“表输入”,选择输出的目标表。选择后在“Darabase fileds”面板中点击“Enter field mapping”映射输入输出关系。

11、因之前已经在“字段选择”中为每一个输入字段改名,这里点“猜一猜”,会根据字段近似度自动匹配映射关系。

映射完输入输出字段的关系,检查无误后,点击“确定”关闭窗口。

12、至此,我们最简单的一个抽取示例的转换建立完毕,点击“校验这个转换”,Kettle会校验并给出简单的报告。此处只有一个警告,经检查并不影响我们的抽取转换工作,点击“关闭”。

13、点击“运行这个转换”,选择“本地执行”,点击“启动”来执行这个转换。

14、转换的过程可以在控制台实时显示。同时“日志”的详细程度是可选的。

15、执行完毕后,控制台日志若无异常信息,说明转换成功,可以去我们本地库查看。发现确实已被导入新库,两者记录数相同且无乱码。

3.4示例二:字段合并、计算等复杂背景下的应用

场景要求:要求数据输入来自于两张表,且输出表的某字段需两张输入表的字段进行合并。并可能对某些字段进行字符串操作、日期运算、数学计算等。此示例演示字符串操作、列合并。日期运算和数学计算与此类似,不再敖述。

简略步骤:

1、基本操作同示例一,其中需引入“Replace in string”和“Modified JavaScript Value”对象。

2、表输入:使用一个简单的关连查询,查出所有要抽取的字段和需要合并的列。

3、Replace in string对象:需填写要被替换的输入字段“In Stream field”,这里我们替换APP_CN_NAME字段。是否使用正则表达式“useRegEx”选择“否”,“Search”搜索字符串假设搜索“PERFETTI VAN”,“Replace with”替换为“Replace in string替换后的内容”。“Whole word”是否整个单词和“Case sensitive”大小写敏感均选择“否”。

4、“Modified JavaScript Value”对象:此对象通过编写javaScript脚本来对记录进行高级操作。Kettle内置mozilla的rhino来运行脚本,完成对输入记录的一系列操作。

左侧有大量的字符串、日期、数学运算的库函数可以调用。这里只简单将两列合并为新字段。(若数学、日期运算较复杂,也可以使用“计算器”对象)

此demo中Javascript对象中的值为:

四      Kettle针对此项目的注意事项

4.1 编码问题

项目要求能完成ASCii编码到UTF8编码的转换。资料显示Kettle默认输入、输出均使用UTF-8编码。为保证不乱码需注意:

输入:此项目的输入是ASCii,故在“表输入”编辑面板务必勾选“允许延迟转换”,便会根据数据库自身的编码读入。否则将会默认以UTF-8读入,可能导致乱码。

输出:在输出前请使用“字段选择”对象。同时在“字段选择”的“元数据”面板中设置输出编码。可以指定任意输出字符集。

4.2 效率问题

项目要求ETL工具需高效的完成批量数据的转移。查看日志发现Kettle每次输入5W条记录,经过处理再输出。经测试,100W条记录,从172.16.4.33至本地,耗时14min22s。

4.3异常信息

由于Kettle由Java编写,出错时,其异常信息也按照Java异常信息格式打印。如图某错误的日志为:

其信息是:

13.11.42 by buildguy) : org.pentaho.di.core.exception.KettleDatabaseBatchException:

2012/07/10 09:42:32 - 表输出.0 - ERROR (version 4.2.0-stable, build 15748 from 2011-09-08 13.11.42 by buildguy) : Error updating batch

2012/07/10 09:42:32 - 表输出.0 - ERROR (version 4.2.0-stable, build 15748 from 2011-09-08 13.11.42 by buildguy) : ORA-12899: 列 "SCOTT"."T_TMAAS_APP_TMXZ_APPFORM"."APP_NUM" 的值太大 (实际值: 9, 最大值: 4)

由以上异常信息可明显看出在批量更新时出错,错误在“表输出”时出现,具体原因是SCOTT用户下的T_TMAAS_APP_TMXZ_APPFORM表的APP_NUM字段的输出值太大。经检查,该字段最大长度为4,合并后向其输出的长度为9,故抛此异常。

此信息会对异常有较准确的范围描述和简单的原因分析,有利于分析。但未标明是哪一条记录导致。(由于ETL过程可能有复杂的表关联和字段处理,产生异常不一定是输入流中数据的问题,可也能是关联问题、脚本将字段变换后和输出不匹配等问题。尤其是关联后的记录经脚本处理后与输出表结构不匹配时,软件难以定位原始记录,需人工分析。)

4.4、易用性

Kettle由Java编写,在生产中可方便地与Java项目整合,配合任务调度工具可完成强大的ETL工作,使用较为广泛,参考资料丰富。

原文blog:http://www.cnblogs.com/radio/archive/2013/04/24/3040248.html

kettle-学习参考的更多相关文章

  1. Mongoose学习参考文档——基础篇

    Mongoose学习参考文档 前言:本学习参考文档仅供参考,如有问题,师请雅正 一.快速通道 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model ...

  2. Kettle学习之Spoon简单使用

    kettle学习之Spoon使用 2018-08-04 10:40:01 首先介绍两个博客入门: https://blog.csdn.net/zzq900503/article/details/785 ...

  3. Kettle 学习导航帖整理

    最近在学习Kettle,期间收集了很多帖子,在此整理汇总以备后续查询或分享,如果有更好的学习资源也欢迎在评论区留言,谢谢. Kettle入门: Kettle简介:百度百科https://baike.b ...

  4. stm32 学习参考(转)

    源:stm32 学习参考 单片机裸机下写一个自己的shell调试器     LWIP_STM32_ENC28J60_NETCONN_TCP_SERVICER(5)     LWIP_STM32_ENC ...

  5. Android repo 学习参考

    /*************************************************************************** * Android repo 学习参考 * 说 ...

  6. 学习参考:《Python语言及其应用》中文PDF+英文PDF+代码

    学习简单的数据类型,以及基本的数学和文本操作,学习用Python内置的数据结构来处理数据: 掌握Python的代码结构和函数的用法:使用模块和包编写大规模Python程序:深入理解对象.类和其他面向对 ...

  7. 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码

    在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...

  8. 学习参考《高性能MySQL(第3版)》中文PDF+英文PDF

    学习mysql数据库时推荐看看mysql 领域的经典之作<高性能mysql(第3版)>,共分为16 章和6 个附录,内容涵盖mysql 架构和历史,基准测试和性能剖析,数据库软硬件性能优化 ...

  9. 学习参考《Python数据分析与挖掘实战(张良均等)》中文PDF+源代码

    学习Python的主要语法后,想利用python进行数据分析,感觉<Python数据分析与挖掘实战>可以用来学习参考,理论联系实际,能够操作数据进行验证,基础理论的内容对于新手而言还是挺有 ...

  10. 学习参考《矩阵分析与应用(第二版)张贤达》PDF

    要想深入理解机器学习,或者对人工智能的某个领域有所研究,都必须掌握矩阵及其应用. 学习<矩阵分析与应用第2版>时,会发现总结了大量线性代数的知识,主要是给工科生用的.归纳了不少论文中的解法 ...

随机推荐

  1. Tomcat 下载及配置

    1.下载 下载地址:http://tomcat.apache.org/ 进去后下拉到底部 2.解压 Tomcat不需要安装,直接解压即可.解压后会得到这么一个文件夹 3.在MyEclipse中配置To ...

  2. Java面向对象(类、封装)

    面向对象 今日内容介绍 u 面向对象 u 封装 第1章 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. l 面向过程的程序设计方式,是遇到一 ...

  3. mysql(数据库,sql语句,普通查询)

    第1章 数据库 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. l 什 ...

  4. nmap扫描开放端口

    nmap 192.168.1.1  -p1-65535 指定端口范围使用-p参数,如果不指定要扫描的端口,Nmap默认扫描从1到1024再加上nmap-services列出的端口 nmap-servi ...

  5. TCP/IP协议分析含义与功能

    TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即网络接口层.IP层.传输层和应用层.TCP/IP是一组专业化协议,包括IP.TCP.UDP.ARP.ICMP以及其它的一些被称为子协 ...

  6. (转载)WPF:DataGrid设置行、单元格的前景色

    WPF:DataGrid设置行.单元格的前景色 0. 说明 /********************************** 本示例实现功能1.DataGrid基本操作2.列标题样式3.内容居中 ...

  7. 转载《五大免费采集器哪个好,火车头,海纳,ET,三人行,狂人采集 》

    在目前的站长圈内,比较流行的采集工具有很多,但是总结起来,比较出名的免费的就这么几个:火车头,海纳,ET,三人行,狂人. 下面我们对这几款采集工具作一个简单的评比. 1.火车头 基本上人人都知道,那就 ...

  8. 使用tensorflow object_detection API训练自己的数据遇到的问题及解决方法

    1.Windows下出现找不到object_detection包的问题. 解决方法 在Anaconda3\soft\Lib\site-packages新建一个pth文件,将PedestrianDete ...

  9. Unity四元素运用之风向标跟随箭头

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class WindVane ...

  10. ueditor1_3_6 一点问题记录

    文件:getRemoteImage.php 第49行: if ( !in_array( $fileType , $config[ 'allowFiles' ] ) || stristr( $heads ...