数据清洗黑马程序员 第3章Kettle工具的基本使用 --学习笔记

3.1 Kettle简介

3.1.1 Kettle 概述

      Kettle是一款国外免费开源的轻量级ETL工具,是基于Java语言开发的,可以在Windows、Linux、UNIX系统上运行。

       Kettle工具主要由4个组件组成,分别是Spoon、Pan、Kitchen及Carte组件,具体功能介绍如下。

> Spoon是Kettle集成开发环境,它会提供一个基于SWT的图形用户界面,主要用于构建ETL Jobs(作业)和Transformations(转换),也可用于执行或调试作业、转换,还可用于监控ETL操作的性能。

>Pan是以命令行的方法执行Spoon生成的Transformations程序,运行在后台,并且该组件没有图形化用户界面。

>Kitchen是以命令行的方法执行Spoon生成的Jobs程序,运行在后台,并且该组件没有图形化用户界面。

>Carte是Kettle中的一个重要组件,它是基于Tetty的轻量级HTTP服务器,运行在后台,主要用于远程监控HTTP执行Jobs和Transformations的进度。

3.1.2 Kettle的设计原则

1. 易于开发;

2. 避免自定义开发;

3. 所有功能都能通过用户界面完成;

4. 没有命名限制;

5. 透明;

6. 灵活的数据通道;

7. 只映射需要映射的字段。

3.2 Kettle的下载安装

1. 下载Kettle安装包

Kettle官网下载地址为 https://sourceforge.net/projects/pentaho/files/Data%20Integration/

2. 安装Kettle

3. 配置Kettle

4. 启动Kettle

双击Kettle安装目录下的Spoon.bat脚本,启动Kettle。

3.3 Kettle的基本概念

一个数据抽取过程主要包括创建一个作业,并且每个作业可以包括多个转换操作。

Kettle工具的执行分为两个层次,即转换和作业,这两个层次最主要的区别在于数据传递和执行方式。

3.3.1 转换

转换是ETL解决方案中重要的组成部分之一,主要用于数据的抽取、转换以及加载等操作,其本质是一组图形化的数据转换配置的逻辑结构。一个转换包括一个或多个步骤,如读取文件、过滤输出行、数据清洗或将数据加载到数据库中等步骤。转换中的步骤是通过调连接的。跳定义了一个单向通道,允许数据从一个步骤向另一个步骤流动。在Kettle中,数据的单位是行,数据流就是数据行从一个步骤到另一个步骤的移动。

例子:

图1 转换的例子

从图1中可看出,这个转换例子是实现从数据库中读取数据,并把数据写到文本文件中,该转换包含了步骤、跳、注释以及数据行。

1. 步骤

步骤是转换里面的基本组成部分,也可以称为控件。步骤以图表的方式展现。

一般地,每个步骤都会具有一些关键特性,具体如下:

> 每个步骤都必须有一个名字,并且这个名字在转换范围内唯一。

> 每个步骤都可以读、写数据行。需要注意的是,“生成记录”步骤除外,因为该步骤只用于写数据。

> 步骤将数据写到与之相连的一个或多个输出跳,在传送到跳的另一端的步骤。对于另一端对步骤来说,这个跳就是一个输入跳,步骤通过输入跳接收数据。

> 大多数的步骤都可以有多个输出跳,一个步骤的数据发送可以设置为轮流发送和复制发送。轮流发送是将数据行依次发送给每个输出跳。复制发送是将全部数据行发送给所有的输出跳。

 > 在运行转换时,一个线程运行一个步骤和步骤的多份副本,所以步骤的线程几乎同时运行,数据行就是会连接流过步骤之间的跳。

Kettle转换中的步骤按功能分类可以输入类、输出类、操作类以及脚本类等,每个步骤都完成一种特定的功能。如图1中的“输入表”步骤主要用于向关系型数据库的数据表发出一个SQL查询,并将得到的数据行写到它的输出跳中。“文本文件输出”步骤主要用于从它的输入跳读取数据行,并将数据行写到文本文件中。

2. 跳

跳是步骤之间带箭头的连接线,即数据的通道,用于连接两个步骤,实现将元数据从一个步骤传递到另一个步骤,支持分发和复制等方式。这里需要注意的是,由于每个步骤都是单独的线程,当启动转换时,每个步骤都会创建各自的线程并接收和推送传递数据,因此数据处理的顺序并不是按照节点连接箭头的顺序执行的。

实际上,跳是两个步骤之间的被称为行集的数据行缓存。若行集满了,则向行集写数据的步骤将停止写入,直到行集里又有空间。若行集空了,则从行集读取数据的步骤就会停止读取,直到行集里又有可读取的数据行。

跳是基于行集缓存的规则允许每个步骤都由一个独立的线程运行,这样并发程序最高;对于Kettle来说,不可能定义一个顺序执行,并且也没有必要确定一个起点和终点,因为所以步骤都是可以并发方式执行的。

需要注意的是,由于转换里的每个步骤都依赖于前一个步骤获取的字段值,因此当创建新跳时,在转换里不能进行循环。

3. 注释

注释是一个特殊的存在,不参与程序的处理,它一文本描述的方式呈现在作业中,只为增强流程的可读性,必要的注释可大大的减少维护成本。

4. 数据行

数据是以数据行是形式沿着步骤流动。一个数据行是从零到多个字段的集合,Kettle中字段的数据类型一共有10种,具体如下表1:

表1 Kettle中字段的数据类型

数据类型相关说明
String字符类型的数据
Number双精度浮点数
BigNumber任意精度数值
Integer带符号长整型(64位)
Internet Address互联网地址
Date带毫秒精度的日期时间值
Serializable序列化的数据
Boolean取值为true或false的布尔值
Binary包括图像、声音、视频及其他类型的二进制数据
Timestamp时间戳

3.3.2 作业

一个作业包含一个或者多个作业项,并且作业项都是以某种顺序进行执行的。作业执行的顺序由作业项之间的跳和每个每个作业项的执行结果决定。

例子:

图2 作业的例子

1. 作业项 

作业项是作业的基本构成部分,也可以称为控。作业项 类似于转换中的步骤,也可以使用图标的方式进行图形化展示。作业项和步骤有很大的区别,具体如下:

> 步骤的名字是唯一的,而作业项可以复制。

> 步骤之间的数据行是以数据流的方式传递的,而作业项之间可以传递一个结果对象,并且结果对象里包含了数据行,但数据行不是以流的方式传递,而是等到一个作业项执行完成后,再传递给下一个作业项。

> 默认情况下,所以步骤都是以并行方式执行,而所有作业项目都是串行方式执行。

2. 作业跳

作业跳是作业项之间的连接线,它定义了作业的执行路径。作业里每个作业项的不同运行结果决定了作业的不同执行路径。

3. 多路径和回溯

Kettle使用一种回溯算法执行作业里的所有作业项,并且作业项的执行结果(真/假)决定执行的路径。回溯算法:假设执行到一条路径的某个节点时,依次执行这个节点的所有子路径,直到没有可执行的子路径,就返回该节点的上一个节点,如此反复。

下面通过一个简单的例子介绍回溯算法,具体如图3所示:

图3 使用回溯算法串行执行多个路径

 在图3中,作业项A、B、C的执行顺序具体如下:

(1) START作业项搜索下一个节点的所有作业项,即作业项A和B。

(2) 执行A作业项。

(3) 搜索A作业项后面的所有作业项,即作业项B。

(4)执行B作业项。

(5) 搜索B作业项后面的作业项,没有找到任何作业项。

(6)回到作业项A,也没有找到其他作业项。

(7) 回到START作业项,发现另一个要执行的作业项C。

(8) 执行C作业项。

(9) 搜索C作业项后面的作业项,没有找到任何作业项。

(10) 回到START作业项,没有找到其他作业项。

(11) 作业结束。

由于没有定义作业的执行顺序,上述执行顺序为A->B->C,上述执行顺序也可以为作业项            C->A->B。

4. 作业项结果

作业项的执行结果不仅决定了作业的执行路径,还向下一个作业项传递了一个结果对象,结果对象包含一组数据行、一组文件名、行数、错误数以及脚本作业项的退出状态。

3.4 Kettled的基本功能

3.4.1 转换管理

1. 数据准备

创建一个数据库personal,并在该数据库中创建两个数据表,即数据表personal_a和数据表personal_b,如下图4、5所示:


图4 数据表personal_a

 图5 数据表personal_b

2. 打开Kettle工具,创建转换

通过使用Kettle工具创建一个转换field_stitching,如下图6所示:

图6 创建转换 fielf-stitching

 3. 配置“表输入”控件

双击图6中的“表输入”控件,进入界面,点击“新建”按钮,配置MySQL数据库连接,配置完成后点击“确认”。之后单击“获取SQL查询语句...”按钮,弹出“数据库浏览器”窗口,展开field_stitching,并选中“表”菜单下的数据表personal_a,单击“确定”按钮,会出现如下图7所示的界面,单击“是”,在之后出现的界面中单击“确定”按钮,就完成“表输入”控件的配置。

图7 选择是否在SQL里面包含字段名

4. 配置“JavaScript代码”控件

双击图6中的“JavaScript代码”控件,进入“JavaScript代码”界面之后,现在Script 1窗口编写JavaScript脚本代码,再单击“获取变量”,之后再字段窗口的“改名为”字段处添加新的字段名称username, 如下图8所示:

图8 配置“JavaScript代码”控件

5. 配置“插入/更新”控件

双击图6中的“插入/更新”控件,进入“插入/更新”界面, 单击“新建”按钮,匹配MySQL数据库连接,匹配完成后单击“确认”按钮。之后单击目标表右侧的“浏览”按钮,弹出“数据库浏览器”窗口,展开field_stitching,并选中“表”菜单下的数据表personal_b,单击“确定”按钮,再单击“获取字段”按钮等等,单击“编辑映射”出现如下图9所示的界面,单击“确定”,再单击“确定”按钮,完成“插入/更新”控件的配置。

 图9 配置源字段与目标字段的映射匹配

 6. 运行转换field_stitching

单击转换工作区顶部的按钮,运行创建的转换field_stitching,如下图10所示: 

 图10 运行field_stitching

7. 查看数据表personal_b中的数据

图11 数据表personal_b

 3.4.2 作业管理

1.打开Kettle工具,创建作业

通过使用Kettle工具,创建一个作业send_email,并添加Start控件、“发送邮件”控件、“成功”控件语句作业跳连接线,具体如下图12所示:

图12 创建作业send_email

 2. 配置Start控件

双击图12中的Start控件,进入“作业定时调度”界面,单击“类型”后下拉列表框,选择“时间间隔”定时,并设置以秒计算的间隔是10,以分钟计算的间隔是0,单击“确定”按钮,完成Start控件的配置,具体如图13所示:

 图13 设置发送邮件的时间间隔

3. 配置“发送邮件”控件

双击图12中的“发送邮件”控件,进入“发送邮件”界面,在图14中添加发件人和收件人的相关信息,如下图14所示;单击图14中的“服务器”选项卡,若发件人的邮箱是网易163邮箱,则填写具体如图15所示;单击“邮件消息”选项卡,具体如图16所示,之后单击“确定”按钮,完成“发送邮件”控件的配置。

图14 添加收件人、发件人相关信息

图15 配置邮件服务器

 

 图16 配置邮件消息

4.运行send_email作业

单击转换工作区顶部的按钮,运行创建的转换send_email作业,实现发送邮件的功能,如下图17所示: 

图17 运行send_email作业

 5. 查看邮箱的收件箱

通过查看QQ邮箱,验证是否收到发送的邮件,具体如图18所示:

 图18 邮件内容

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值