快速上手kettle(二)小试牛刀
一 、前言
上一期中大概介绍了下kettle,并已经把kettle下载安装完了。
这一期我们就来简单体验下kettle怎么进行数据转换的。
二 、两个小目标
我们这里呢就以两个小案例来体验下kettle
- 将csv文件通过kettle转换成excel文件
- 将excel文件通过kettle写入到数据库表中
三、 kettle核心概念介绍
kettle 被称为可视化编程语言,可以完成复杂的etl工作流。kettle里的代码就是转换和作业。
所以呢,我们首先就来说说转换和作业。
3.1 转换
从下面截图中,我们看到转换包含了很多核心对象,说明其包含了很多功能。后面有得我们学的了(开个玩笑)
| --转换包含元素 | --转换核心对象 | |
|---|---|---|
![]() |
![]() |
![]() |
转换(transaformation)负责数据的输入、转换、校验和输出等,kettle中转换完成了ETL的全部工作
转换由多个步骤 (Step) 组成。包含各种文件格式的数据输入/输出 (如csv文件输入、sql文件输出、sql脚本执行、各种查询等等)
如果各个步骤之间需要数据库操作,我们就需要建立DB连接
各个步骤之间使用跳(Hops)来连接。我们可以将跳理解为一条道路,数据有一个步骤(驿站)通过跳(道路)流向下一步骤(驿站)
kettle中最小的数据单元是行

3.1.1 步骤(Step)
步骤是转换里的基本组成部分,上面截图中包含了两个步骤
①CSV文件输入
②Excel输出
每个步骤都会涉及到读、写数据行
步骤将数据写到与之相连的一个或多个输出跳(hop),再传送到跳的另一端的步骤
大多数的步骤都可以有多个输出跳。一个步骤的数据发送可以被设置为分发和复制

3.1.2 跳(Hop)
跳是两个步骤(驿站)之间的道路(带箭头的连线)
跳是两个步骤之间的数据行缓存
当行集满了,向行集写数据的步骤将停止写入,直到行集里又有了空间。
当行集空了,从行集读取数据的步骤停止读取,直到行集里又有可读的数据行

可以通过如下方式查看和修改行缓存大小
| ①右键转换-->设置 | ② 选择"杂项"tab页 |
|---|---|
![]() |
![]() |
3.1.3 元素据
每个步骤在输出数据行时都有对字段的描述,这种描述就是数据行的元数据
通常包含下面一些信息。
①名称:数据行里的字段名是唯一的。
②数据类型:字段的数据类型。
③格式:数据显示的方式,如Integer的#、0.00。
④长度:字符串的长度或者BigNumber类型的长度。
⑤精度:BigNumber数据类型的十进制精度。
⑥货币符号:¥
⑦小数点符号:十进制数据的小数点格式。不同文化背景下小数点符号是不同的,一般是点(.)或逗号(,)。
⑧分组符号:数值类型数据的分组符号,不同文化背景下数字里的分组符号也是不同的,一般是点(.)或逗号(,)或单引号(’)
这里的输入文件十csv格式数据,所以分组符号是逗号","

3.1.4 数据类型
数据以数据行(可以理解为一个表格中的一行) 的形式沿着步骤移动,每个数据行又有多个字段元素(可以理解为一个单元格)构成
就像在excel中,每个单元格都可以设置数据格式一样,这里数据行中的字段也有自己的数据类型.
常见的数据类型有以下几种
| --数据类型 | --说明 |
|---|---|
String |
字符类型数据 |
Number |
双精度浮点数 |
Integer |
带符号长整型(64位) |
BigNumber |
任意精度数据 |
Date |
带毫秒精度的日期时间值 |
Boolean |
取值为true和false的布尔值类型 |
Binary |
二进制字段可以包含图像、声音、视频及其他类型的二进制数据 |

3.1.5 并发执行
我们经常需要处理大量的数据,所以设计了跳这样的行集缓存规则,使得每个步骤就是一个独立线程.所有步骤都以并发方式执行.
当转换启动后,所有步骤都同时启动,从它们的输入跳中读取数据,并把处理过的数据写到输出跳.
直到输入跳里不再有数据,就中止步骤的运行。
当所有的步骤都中止了,整个转换就中止了
如果想要一个任务沿着指定的顺序执行,那么就要使用下面所讲的“作业”来做流程控制
3.2 作业
负责定义一个完成整个工作流的控制,如将转换的结果发送邮件给相关人员.
因为转换(transformation)以并行方式执行,所以必须存在一个串行的调度工具来执行转换,这就是 Kettle中的作业
四、实践操作
4.1 案例1 将csv文件转换成excel文件
4.1.1 在kettle中新建一个转换

4.1.2选择输入控件并设置
核心对象-->输入-->CSV文件输入 (将控件拖入工作区)
| ① 选择CSV文件输入控件 | ②将控件拖入工作区 |
|---|---|
![]() |
![]() |
| ③ 选择源文件 | ④ 检查csv数据是否正常读出 |
![]() |
![]() |
4.1.3 选择输出控件并设置
| ① 选择Excel输出控件 | ②将控件拖入工作区 |
|---|---|
![]() |
![]() |
| ③ 设置输出文件名 | |
![]() |
4.1.4 按住shift 通过跳将输入输出两步骤连接起来

4.1.5 点击启动按钮执行转换

4.1.6查看日志,并检查是否成功
| ①日志没报错 | ②文件也写入成功了 |
|---|---|
![]() |
![]() |
4.2 案列2 将excel文件导入MySQL数据库
4.2.1和上面步骤一样我们需要新建一个转换

4.2.2 新建数据库连接
由于案例2需要涉及到MySQL数据库,所以我们需要建立DB连接
①下载MySQL驱动(需要下载对应版本的) 我用的是MySQL5.7 ,所以这里下载5.1.37 版本驱动
官方地址:https://downloads.mysql.com/archives/c-j/

② 将下载的好的MySQL驱动包放入lib文件夹下

③新建DB连接

注: 如果没有下载驱动包或者驱动包版本与MySQL版本不一致,会包如下错误

4.2.3 拖入Excel输入控件并设置
① 将Excel输入控件拖入工作区

②设置Excel输入控件




直到点击预览记录后获取到如下截图所示数据,说明输入设置成功了

4.2.4 拖入表输出控件并设置
① 将表输出控件拖入工作区

② 通过跳 将输入输出控件连接起来

③设置需要导入数据的目标表

④ 匹配数据库字段

4.2.5 点击启动按钮进行转换

4.2.6 查看日志并检查MySQL数据表中是否有数据
①日志显示转换成功

② 我们再来看看数据库test的t_tv 表中也有数据了

到此通过两个案例小试牛刀之后都转换成功了,是不是有点小成就感呢。
其实这只是kettle工具的冰山一角,从kettle那么多核心对象可以看得出来,它还有很多很多很多得玩法等着我们去开启。
本期内容到此就结束了,希望内容对你有所帮助,我们下期再见 (●'◡'●)
上一篇:快速上手kettle(一)壶之简介
下一篇:快速上手kettle(三):kettle常用输入控件使用(小编正在玩命更新中)
快速上手kettle(二)小试牛刀的更多相关文章
- Netron开发快速上手(二):Netron序列化
Netron是一个C#开源图形库,可以帮助开发人员开发出类似Visio的作图软件.本文继前文”Netron开发快速上手(一)“讨论如何利用Netron里的序列化功能快速保存自己开发的图形对象. 一个用 ...
- socket网络编程快速上手(二)——细节问题(5)(完结篇)
6.Connect的使用方式 前面提到,connect发生EINTR错误时,是不能重新启动的.那怎么办呢,是关闭套接字还是直接退出进程呢?如果EINTR前,三次握手已经发起,我们当然希望链路就此已经建 ...
- socket网络编程快速上手(二)——细节问题(4)
5.慢系统调用及EINTR 还记得前面readn和writen函数么?里面有个EINTR,现在就来谈谈这个,这个很重要. Linux世界有个叫信号的东西,感觉他就像一位隐士,很少遇到他,而他又无处不在 ...
- Laravel入门及实践,快速上手ThinkSNS+二次开发
温馨提示: l 本文纯干货,文字和代码居多,且适合零基础Laravel学习者: l 本文会新建一个名为 blog 的 Laravel 程序,这是一个非常简单的博客. l 欢迎随时关注ThinkSNS ...
- WCF快速上手(二)
服务端是CS程序,客户端(调用者)是BS程序 一.代码结构: 二.服务接口Contract和实体类Domain INoticeService: using Domain; using System; ...
- socket网络编程快速上手(二)——细节问题(3)
3.SIGPIPE问题 人怕牺牲,我们写的程序也一样,人有死不瞑目,程序又何尝不是?程序跑着跑着,突然就崩掉了.好一点的牺牲前告诉你些打印,差点的也能用core文件等一些手段查出死在哪了,最惨不忍睹的 ...
- socket网络编程快速上手(二)——细节问题(2)
2.TCP数据包接收问题 对初学者来说,很多都会认为:客户端与服务器最终的打印数据接收或者发送条数都该是一致的,1000条发送打印,1000条接收打印,长度都为1000.但是,事实上并不是这样,发送打 ...
- socket网络编程快速上手(二)——细节问题(1)
三.细节问题一个也不能少 Socket编程说简单也简单,程序很容易就能跑起来,说麻烦还真是麻烦,程序动不动就出问题.记得刚开始写网络代码的时候,那真是令人抓狂的经历,问题一个套一个,一会服务器起不来了 ...
- Netron开发快速上手(一):GraphControl,Shape,Connector和Connection
版权所有,引用请注明出处:<<http://www.cnblogs.com/dragon/p/5203663.html >> 本文所用示例下载FlowChart.zip 一个用 ...
- C/ C++ 快速上手
C++ 快速上手 (一)https://www.cnblogs.com/cosmo89929/archive/2012/12/22/2828745.html C++ 快速上手 (二)https://w ...
随机推荐
- 声网 X 在线自习室 同学陪伴、老师监督的在线自习是如何火出圈的?
实时互联网像触角一样,通过情景的共享延伸开来,链接着我们彼此的线下.线上生活,形成一张不可分割的网络.随着社交直播.在线教育.视频会议成为大众生活不可或缺的一部分的同时,智能手表.智能作业灯.视频双录 ...
- 基于深度学习的农作物叶片病害检测系统(UI界面+YOLOv5+训练数据集)
摘要:农作物叶片病害检测系统用于智能检测常见农作物叶片病害情况,自动化标注.记录和保存病害位置和类型,辅助作物病害防治以增加产值.本文详细介绍基于YOLOv5深度学习模型的农作物叶片病害检测系统,在介 ...
- ByteHouse:基于 ClickHouse 的实时计算能力升级
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 ByteHouse 是火山引擎数智平台旗下云原生数据分析平台,为用户带来极速分析体验,能够支撑实时数据分析和海量离 ...
- 跨域解决方案CORS
这里说的 js 跨域是指通过 js 在不同的域之间进行数据传输或通信,例如通过 ajax 向一个不同的域请求数据,或者通过 js 获取页面中不同域中(iframe)的数据.只要协议.域名.端口有任何一 ...
- Redis Cluster集群搭建及节点的添加、删除
系统性学习,移步IT-BLOG 一.什么是 Redis Cluster Redis 是在内存中保存数据的,而我们的电脑一般内存都不大,这也意味着 Redis 不适合存储大数据,适合存储大数据的是 Ha ...
- GO实现Redis:GO实现Redis协议解析器(2)
本文实现Redis的协议层,协议层负责解析指令,然后将指令交给核心database执行 echo database用来测试协议层的代码 https://github.com/csgopher/go-r ...
- 设计模式(三十)----综合应用-自定义Spring框架-自定义Spring IOC-定义bean、注册表相关类
现要对下面的配置文件进行解析,并自定义Spring框架的IOC对涉及到的对象进行管理. <?xml version="1.0" encoding="UTF-8&qu ...
- JAVA网络编程样例
这篇文章主要用来总结Java在网络编程中的知识点 下面是一个Java客户端与服务端通信的样例程序 //Server public class Server { public static void m ...
- Java多线程(一篇从0讲透)
多线程 思维导图看天下: 1. 概述 并行与并发 并行 :指两个或多个事件在同一时刻发生(同时发生) 并发 :指两个或多个事件在同一个时间段内发生.(交替执行) 线程与进程 进程:是指一个内存中运行的 ...
- 「刷起来」Go必看的进阶面试题详解
勤学如春起之苗,不见其增日有所长:辍学如磨刀之石,不见其损日有所亏. 本文的重点:逃逸分析.延迟语句.散列表.通道.接口. 1.逃逸分析 逃逸分析是Go语言中的一项重要优化技术,可以帮助程序减少内存分 ...













