ETL是EXTRACT(抽取)、TRANSFORM(转换)、LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环也是工作量较大的一块。当前知道的ETL工具有informatica, datastage,kettle,ETL Automation,sqoop,SSIS等等。这里我们聊聊kettle的学习吧(如果你有一定的kettle使用,推荐看看Pentaho Kettle解决方案,这里用kettle实践kimball的数据仓库理论。)。

  内容有:认识kettle、安装kettle、简单入门实例、进阶实例、Linux中kettle部署、kettle发邮件、常见错误

  认识kettle

  kettle是纯java开发,开源的etl工具。可以在Linux、windows、unix中运行。有图形界面,也有命令脚本还可以二次开发。(官方社区:http://forums.pentaho.com/;官网wiki:http://wiki.pentaho.com/display/COM/Community+Wiki+Home;源码地址:https://github.com/pentaho/pentaho-kettle)

  安装kettle

  1、kettle是基于java开发的,所以需要java环境(下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html)

  

  2、kettle使用时,需要访问相关的关系型数据库,则需要下载对应的链接驱动。比如我们访问MySQL,则下载相应的驱动解压后放入kettle文件的lib目录下

  

  3、下载kettle并解压到自定义位置。kettle其实是以前的叫法,现在官方称为:PDI(Pentaho Data Integeration)。在windows中,双击目录中的Spoon.bat启动kettle.

  

  简单的kettle实例

  1、新建作业/转换(功能区:文件 --> 新建 --> 作业;新建-->转换)

    一个作业(job,文件以kjb结尾)的主体是转换(transform,以ktr结尾),job主要来设置调度,可以有影子拷贝,任一拷贝信息修改所有拷贝的都被修改;transform做主体的内容,控件名称唯一。

  2、三个控件(start、转换、成功)和流程线(hop);

    start:job开始的地方,可以设置开始的时间、频率、周期等(但要求kettle不能关闭,有点挫)

    转换:后续详解

    成功:job结束

    流程线:关联两个控件(实体),指定数据流。同时还可以设置是否可用、分发模式、错误输出等;添加方式:按住shift进行鼠标拖动

    

  3、转换的工作

    新建的转换:job中需引用该转换文件

    加入我们现在要同步MySQL中的一张表。在转换中要有输入和输出。

    

    > 表输入:先配置链接(完成后测试一下是否OK),再输入查询sql(比如:select id from tab2 limit 10;)

    

    >excel输出。,指定输出路径

    

    > 完成转换的配置后保存,在job中引用保存的文件。我们来跑一下吧~

    

    

    > 完成,结束!

    

     进阶实例:

    百度上看到了一篇关于kettle的作业,但是没有详细的过程。这里以此说明,全图过程如下。

    

    作业说明:生成 100 个随机数,随机数取值于[0,100)之间, 计算小于等于 50 的随机数个数和 大于50 的随机数个 数。 并把这两个统计数字放在数据库表的一行的两列中, 即输出的结果有一行,一行包括两列,每列是一个统 计值。

    第一步:生成随机数(输入-->生成随机数;需要生成100个随机数,右击控件,选择"改变开始开始...数量"为100)

    

    第二步:增加常量(转换-->增加常量;给变量取个名称,类型和值。)

    

    第三步:计算器(转换-->计算器;给出你的计算逻辑和计算出的字段;)

    

    第四步:两个分支,一个输出;一个过滤;输出指定Excel,并执行数据发送模式(√:复制发送模式)

    第五步:设置过滤(流程-->过滤记录);并双击控件填写对应的条件;

    

    第六步:分组(统计-->分组),双击控件后有两个需要关注,一个是分组(相当于group by);一个是聚合(相当于count、sum等函数)

    第七步:记录关联(连接-->记录关联(笛卡尔输出));这是一个join操作,但是没有on条件;但是控件中提供了sql中where条件的刷选

    

    第八步:输出

    Linux上部署kettle任务

    kettle的"开始"控件虽然可以进行调度,但要求程序一直运行。在实际工作中通常在windos中测试,放到Linux中以crontab的方式进行调度。在Linux中以kitchen.sh执行job任务,pan.sh执行transform任务;这里我们以上面为实例,如何在Linux中进行部署。

    第一步:通过WinSCP将kettle拷贝到Linux中,在拷贝路径中执行. kitchen.sh ,如果有参考消息输出则没有问题

    

    第二步:对于已在windos中执行成功的地址、文件名、用户等参数进行变量替换。执行export KETTLE_HOME=/home/shj,会生成/home/shj/.kettle目录,通过编辑目录下的kettle.properties文件来设置变量。实例中,我们仅仅需要替换两个输出文件的地址为变量即可。

    

    第三步:修改kettle目录下的.sh文件权限为可执行(chmod a+x  *.sh);并执行文件。

    

    这里说明:/norep:表示不往资源库中写日志,Do not log into the repository

           /file:使用文件,The filename (Job XML) to launch

    第四步:验证结果。

    

     kettle中发送邮件

    kettle发送邮件还是比较简单的,我们需要一个邮件发送的控件和对应的账号密码等自有信息

    简单的流程:

    

    需要配置发送邮件控件:

    

    

    这样执行后,邮件就发送出去了。那么如何在kettle生产中利用邮件功能呢?我们可以将kettle的转换信息、统计信息、错误信息以文件的形式放入到指定的位置(或形成指定的参数),使用邮件以附件形式发送这些信息。

    流程:

    

    1、这里我们新增控件:添加文件到结果文件中;配置转换中的输出的文件

    2、发送邮件中我们增加附件的配置,如下图

    

    补充:如果觉得kettle发送的正文信息太多,可以配置邮件信息中,只发送邮件注释(注释信息需要自己写,如果是动态的话需要开发)

    

    常见错误

    第一种:Timestamp:Unable to get timestamp from resultset at index 3**,如图。这个错误需要在db链接的选线中设置命令参数zeroDateTimeBehavior(值:convertToNull  )

    

    

    第二种:字段的空被替换成了null值。这是kettle默认的设置,需要我们在kettle.properties中增加设置(KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y)。

    

    补充,在设计流程时我们并不希望出错了作业就停止了,而是继续执行并将错误信息以某种方式反馈出来。这时,我们可以通过“定义错误处理”来实现。

    

    并将错误信息输出,供后续引用。

    

原创博客,转载请注明出处!欢迎邮件沟通:shj8319@sina.com

ETL工具--kettle篇(17.10.09更新)的更多相关文章

  1. 开源ETL工具kettle系列之常见问题

    开源ETL工具kettle系列之常见问题 摘要:本文主要介绍使用kettle设计一些ETL任务时一些常见问题,这些问题大部分都不在官方FAQ上,你可以在kettle的论坛上找到一些问题的答案 1. J ...

  2. 可用于Hadoop下的ETL工具——Kettle

    看大家分享了好多hadoop相关的一些内容,我为大家介绍一款ETL工具——Kettle.    Kettle是pentaho公司开源的一款ETL工具,跟hadoop一样,也是java实现,其目的就是做 ...

  3. ETL工具kettle基本使用

    1.下载kettle:https://sourceforge.net/projects/pentaho/files/Data%20Integration/7.0/pdi-ce-7.0.0.0-25.z ...

  4. 大数据之ETL工具Kettle的--1功能介绍

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行. 说白了就是,很有必要去理解一般ETL工具必备的特性和功能,这样才更好的掌握Kettle的使用. ...

  5. ETL工具-KETTLE教程专栏1----术语和定义

    1-资源库 资源库是用来保存转换任务的,用户通过图形界面创建的的转换任务可以保存在资源库中.        资源库可以使多用户共享转换任务,转换任务在资源库中是以文件夹形式分组管理的,用户可以自定义文 ...

  6. ETL工具Kettle使用以及与Java整合实现数据清洗

    本文主要讲述kettle的使用和与Java整合,具体下载与安装请自行百度! kettle有两种脚本方式:转换和工作,工作中可以添加转换.以下以转换为例. 1.新建一个转换, 2.在工作中经常用到的是表 ...

  7. 八步学会数据迁移:ETL工具kettle使用方法

    一.目的 将不同服务器上的表合并到另外一个服务器上.例如:将服务器1上的表A和服务器2上的表B,合并到服务器3上的表C 要求:表A需要被裁剪(去掉不必要的字段).表B需要增加一些字段 二.使用方法 ( ...

  8. ETL利器Kettle

    ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析 ...

  9. etl学习系列1——etl工具安装

    ETL(Extract-Transform-Load的缩写,即数据抽取.转换.装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种etl工具的使用,必不可 ...

随机推荐

  1. Head First设计模式之策略模式

    这是学习的第一个设计模式,而书中写的实例相对比较复杂,参考了网上的文章进行总结 一.定义 策略模式(strategy pattern): 定义了算法族, 分别封闭起来, 让它们之间可以互相替换, 此模 ...

  2. 关于Python的函数(Method)与方法(Function)

    先上结论: 函数(function)是Python中一个可调用对象(callable), 方法(method)是一种特殊的函数. 一个可调用对象是方法和函数,和这个对象无关,仅和这个对象是否与类或实例 ...

  3. VS2015 查看类之间的继承关系

    ---恢复内容开始--- 1. 右击项目名称,单击"查看"菜单下的"查看类图"菜单: 2.生成的类图如下:

  4. J2EE 项目 org.apache.jasper.JasperException: 解决方法

    项目从一个电脑转移到另一台电脑总是有各种意外qaq~ 刚放假把从实验室的项目拷回自己的电脑回家继续coding,结果出了这个错误.... 各个地方都调试原来是Tomcat版本问题!!!我电脑上的是6. ...

  5. vue2.0 资源文件assets和static的区别

    资源文件处理 在我们的项目结构里,有两个资源文件的路径,分别是:src/assets 和 static/.那这两个到底有什么区别呢? Webpacked 资源 为了回答这个问题,我们首先需要理解web ...

  6. angular4.0项目文件解读

    这篇文章我觉得是很有用的,便于我们对ng项目的理解,同时在配置项目时,也能够很快的定位到相应文件. 摘录的别人的文章,首先感谢那个路人兄弟,下面就开始学习吧. File 文件 Purpose 用途 e ...

  7. angular4.0常用依赖汇总

    Routes 路由配置 Router 路由跳转 ActivatedRoute 路由参数 FormsModule 表单配置(在app.module.ts中注入在imports下) EventEmitte ...

  8. CentOS7下安装Docker-Compose

    Docker-Compose是一个部署多个容器的简单但是非常必要的工具. 安装Docker-Compose之前,请先安装 python-pip 安装 python-pip 1.首先检查linux有没有 ...

  9. .net4.5中HttpClient使用注意点

    .net4.5中的HttpClinet是个非常强大的类,但是在最近实际项目运用中发现了些很有意思的事情. 起初我是这样用的: using (var client = new HttpClient()) ...

  10. ML笔记_机器学习基石01

    1  定义 机器学习 (Machine Learning):improving some performance measure with experience computed from data ...