Kettle 浅入浅出

前言

最近又要迭代客户定制化的数据处理系统了。提到数据处理,不禁想到了以前使用过的 ETL 处理工具 Kettle。本文将对 Kettle 做一些简单的介绍。

Kettle 介绍

在介绍 Kettle 前先了解下什么是 ETL,ETL 是 Extract-Transform-Load 的缩写,即数据抽取、转换、装载的过程,对于企业或行业应用来说,经常会遇到各种异构数据的处理、转换、迁移等操作,这些操作有可能会面对大量的数据和繁琐的步骤,因此就萌生了一些 ETL 处理工具,市面上常见的 ETL 工具有很多,比如 Sqoop、DataX、Kettle、Talend 等,本篇文章就主要来介绍下 Kettle 工具。

Kettle(水壶)是一款国外开源的 ETL 工具,现在已经更名为 PDI,Pentaho Data Integration-Pentaho 的缩写,由纯 java 编写,可以在 Window、Linux、Unix 上运行,绿色无需安装,数据抽取高效稳定。它可以处理各种异构数据库中的数据,并且提供了可视化图形界面的方式进行操作,让你思路主要关注在如果处理数据上,而不是如何实现处理的过程,特点如下图介绍:
Kettle 浅入浅出_第1张图片
Kettle 的官网地址如下:

https://community.hitachivantara.com/home

如上图介绍,Kettle 分了两种脚本文件,transformation(转换)和 job(作业),transformation 主要完成对数据的处理和转换,job 则完成整个工作流的控制,一个 job 可以包含多个 transformation,如下图所示:
Kettle 浅入浅出_第2张图片
Kettle 浅入浅出_第3张图片
另外在 Kettle 中又包含了4个核心组件,分别如下:

  • 勺子(Spoon.bat/Spoon.sh):图像化界面,可以通过图形化界面交互方式开发 transformation 和 job。
  • 煎锅(Pan.bat/pan.sh):可以用命令行的形式执行由 Spoon 编辑的 transformation 和 job。
  • 厨房(Kitchen.bat/kitchen.sh):可以使用命令行调用由 Spoon 编辑好的 job。
  • 菜单(Carte.bat/carte.sh):一个轻量级的 Web 容器,用户建立远程 ETL Server。

Kettle 安装

安装前,需要电脑上已经安装配置好 jdk 环境,版本建议1.8及以上。

下载 kettle 压缩包:

https://sourceforge.net/projects/pentaho/files/Pentaho%209.1/

Kettle 为绿色软件,下载后可以解压到任意本地路径,但注意尽量不要带有中文路径,不然会出现意想不到的效果。

其中 Kettle 的目录说明如下:
Kettle 浅入浅出_第4张图片
Kettle 浅入浅出_第5张图片

Kettle 使用基本介绍

双击解压目录下的 Spoon.bat 即可启动图形化界面工具,启动过程有点慢耐心等待下,如果启动失败,可以修改下 JVM 的最堆内存的大小,Spoon.bat 文件下:
Kettle 浅入浅出_第6张图片
等待片刻后会进到如下页面:
Kettle 浅入浅出_第7张图片
在“工具栏/文件/新建”下可以选择创建一个转换和作业:
Kettle 浅入浅出_第8张图片

转换

转换(transaformation)主要负责数据的输入、转换、校验和输出等工作。转换由多个 Step(步骤)组成,如文本文件输入,过滤输出行,执行 SQL 等。各个步骤之间使用 Hop(跳)来链接。
Kettle 浅入浅出_第9张图片
Step 是转换里的基本的组成部分,比如上面的 CSV 文件输入和 Excel 输出,一个 Step 有如下几个关键特性:

  • Step 需要有一个名字,这个名字在同一个转换范围内唯一。
  • Step 将数据写到与之相连的一个或多个输出 Hop,再传送到指向的另一端的 Step。
  • 大多数的 Step 都可以有多个输出,当出现多个输出时可以选择复制或分发,复制是所有的记录被同时发送到所有的目标步骤,分发是目标步骤轮流接收记录:
    Kettle 浅入浅出_第10张图片
    Hop 是 Step 之间带箭头的连线,定义了数据的通路。Hop 实际上是两个 Step 之间被称之为行集的数据行缓存,行集的大小可以在转换的设置里定义。当行集满时,向行集写数据的 Step 将停止写入,直到行集里又有了空间。当行集空了,从行集读取数据的 Step 停止读取,直到行集里又有可读的数据行。

其中转换属性可以双击空白处:
Kettle 浅入浅出_第11张图片

数据元数据

每个步骤在输出数据行时都有对字段的描述,也就是数据行的元数据。元数据通常包含下面一些信息。

  • 名称:数据行里的字段名是唯一的
  • 数据类型:字段的数据类型
  • 格式:数据显示的方式,如 Integer 的 #、0.00
  • 长度:字符串的长度或者 BigNumber 类型的长度
  • 精度:BigNumber 数据类型的十进制精度
  • 货币符号:¥
  • 小数点符号:十进制数据的小数点格式。不同文化背景下小数点符号是不同的,一般是点(.)或逗号(,)
  • 分组符号:数值类型数据的分组符号,不同文化背景下数字里的分组符号也是不同的,一般是点(.)或逗号(,)或单引号(’)
    Kettle 浅入浅出_第12张图片

数据的类型

Kettle 中的数据区分了数据的类型,类型包含如下几种:

  • String:字符类型数据
  • Number:双精度浮点数。
  • Integer:带符号长整型(64位)。
  • BigNumber:任意精度数据。
  • Date:带毫秒精度的日期时间值。
  • Boolean:取值为 true 和 false 的布尔值。
  • Binary:二进制字段可以包含图像、声音、视频及其他类型的二进制数据。

作业

作业(Job),负责定义一个完成整个工作流的控制,比如将转换的结果发送邮件给相关人员。因为转换(transformation)以并行方式执行,如果需要一个串行的调度工具来执行转换,就可以使用作业:
Kettle 浅入浅出_第13张图片

Kettle 数据处理案例

例如有如下 CSV 数据,其中字段分别表示:用户ID、用户名、性别、成绩1、成绩2、成绩3 :
Kettle 浅入浅出_第14张图片

id,name,sex,grade1,grade2,grade3
1,小明,,90,80,70
2,小红,,91,81,71
3,小兰,,92,82,72
4,小爱,,93,83,73
5,张三,,94,84,74
6,李四,,95,85,75
7,王五,,96,86,76
8,赵六,,97,87,77
9,小六,,98,88,78
10,小七,,99,89,79

现有需求:要求计算出每个人的总成绩和平均分,将结果输出到 Excel 中。

新建一个转换:
Kettle 浅入浅出_第15张图片
拖入一个 CSV 文件输入:
Kettle 浅入浅出_第16张图片
双击 CSV 文件输入,选择 CSV 文件、编码等:
Kettle 浅入浅出_第17张图片
可以点击预览查看数据:
Kettle 浅入浅出_第18张图片
下面拖入一个 计算器 ,计算成绩总和:
Kettle 浅入浅出_第19张图片
按住 Shift 连接上 CSV 文件输入和计算器:
Kettle 浅入浅出_第20张图片
双击计算器,修改名称,并指定计算方式:
Kettle 浅入浅出_第21张图片
此时可以运行下看下计算结果:
Kettle 浅入浅出_第22张图片
Kettle 浅入浅出_第23张图片
可以看到已经计算出了总成绩,下面计算平均分数的话还需要一个常量3:
Kettle 浅入浅出_第24张图片
双击进入修改名称和指定常量值:
Kettle 浅入浅出_第25张图片
下面再拖一个计算器,计算平均分数,参数如下:
Kettle 浅入浅出_第26张图片
到这可以运行下看下结果:
Kettle 浅入浅出_第27张图片
可以看到已经计算出平均成绩了,下面就可以输出到 Excel 中了,拖入一个 Excel 输出:
Kettle 浅入浅出_第28张图片
双击进入修改属性:
Kettle 浅入浅出_第29张图片
再进入到字段下指定输出的字段,其中 num 字段仅仅是为了计算用的,这里删除掉:
Kettle 浅入浅出_第30张图片
最后运行转换,到输出目录下查看 Excel 中的内容:
Kettle 浅入浅出_第31张图片
Kettle 浅入浅出_第32张图片
已经写入处理后的数据。

你可能感兴趣的:(java,etl)