目录
1、ETL简介
2、Kettle核心概念
3、CSV文件输入
4、csv文件导出excle
5、文本文件输入
6、Excel输入
7、多文件合并
8、Get data from XML
9、JSON input
10、生成大量数据
11、表输入
12、Excel输出
12、文本文件输出(输出txt、csv文件)
12、SQL文件输出
13、表输出
14、更新
15、插入更新
16、删除
1、ETL简介
ETL:Extract-Transform-Load,即数据抽取、转换、装载的过程。
2、Kettle核心概念
Kettle可以被归为可视化编程语言,因为Kettle可以使用图形化的方式定义复杂的ETL程序和工作流。
Kettle里的图就是转换和作业。
可视化编程一直是Kettle里的核心概念,它可以让你快速构建复杂的ETL作业和减低维护工作量。它通过隐藏很多技术细节,使IT领域更贴近于商务领域。
转化是解决ETL解决方案中最主要的部分,它处理抽取、转换、加载各种对数据行的操作。 转换包含一个或多个步骤,如读取文件、过滤数据行、数据清洗或将数据加载到数据库。
kettle的转换,不能定义一个执行顺序,所有的步骤都是以并发方式执行的,当转化启动后,所有步骤同时启动。
如果想要一个任务沿着顺序执行,就要使用作业。
3、CSV文件输入
输入:就是用来抽取数据或生成数据。是ETL操作的E。
CSV文件:是一种带有固定格式的文本文件。
4、csv文件导出excle
(1)文件---->新建---->转化
(2)核心对象
输入---->CSV文件输入
输出---->Excel输出
(3)箭头是通过按住Shift健,鼠标拖动点击。
(4)双击CSV文件输入
获取字段:
(5)双击Excel输出
可以查看字段
(6)点击运行按钮
成功
5、文本文件输入
成功
6、Excel输入
7、多文件合并
8、Get data from XML
XPath-语法
选取节点XPath使用路径表达式在XML文档中选取节点。节点是通过沿着路径或者step来选取的。
下面列出了最有用的路径表达式:
表达式 | 描述 |
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档总的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
xml数据
<?xml version="1.0" encoding="UTF-8" ?>
<AllRows testDescription="1 - simple functionality test">
<Rows rowID="1">first row chunk of data
<Row><v1>1.1.1</v1><v2>1.1.2</v2></Row>
<Row><v1>1.2.1</v1><v2>1.2.2</v2></Row>
</Rows>
<Rows rowID="2">second row chunk of data
<Row><v1>2.1.1</v1><v2>2.1.2</v2></Row>
<Row><v1>2.2.1</v1><v2>2.2.2</v2></Row>
</Rows>
<Rows rowID="3">third row chunk of data
<Row><v1>3.1.1</v1><v2>3.1.2</v2></Row>
<Row><v1>3.2.1</v1><v2>3.2.2</v2></Row>
</Rows>
</AllRows>
9、JSON input
{
"store":{
"books":[
{
"a":"a1",
"b":"b1",
"c":"c1",
"d":"d1"
},
{
"a":"a2",
"b":"b2",
"c":"c2",
"d":"d2"
},
{
"a":"a3",
"b":"b3",
"c":"c3",
"d":"d3"
}
],
"pencil":{
"color":"red",
"price":11.11
}
},
"experence":10
}
JsonPath表达式 | 结果 |
$.store.books[*].b | ["b1","b2","b3","b4"] |
$..b | ["b1","b2","b3","b4"] |
$.store..d | ["d1","d2","d3","d4"] |
{
"status":"ok",
"response":{
"submissions":[
{
"id":"1",
"books":[
{
"a":"a1",
"b":"b1",
"c":"c1",
"d":"d1"
},
{
"a":"a2",
"b":"b2",
"c":"c2",
"d":"d2"
}
]
},
{
"id":"2",
"books":[
{
"a":"a3",
"b":"b3",
"c":"c3",
"d":"d3"
},
{
"a":"a4",
"b":"b4",
"c":"c4",
"d":"d4"
}
]
}
]
}
}
JSON input 2
通过excel输出,excel输出那字段可以进行选择,选择需要的字段。
10、生成大量数据
可以用于生成大批量测试数据
此处1000指的是生成的数据数量。
如图产生大量的数量。
11、表输入
从数据库中导数据到表
spoon连接本地mysql中会出现很多问题。
问题、mysql驱动版本不匹配:确定本地mysql的版本号,与spoon-lib中的mysql驱动版本(正确,但依旧报错缺query_cache_size)
解决:在mysql的my.ini文件下加入query_cache_size=0配置(但是不可以。。。继续报错)
最终解决:参照网址kettle连接mysql8.0以上版本_梦幻安然-CSDN博客_kettle连接mysql8.0
(1)首先下载对应mysql版本的驱动(我的版本:mysql 的版本8.0.21,spoon的版本9.0.0.0-423),即最好有确定spoon 的lib中有mysql8.0.21版本的驱动。
(2)将下载好的mysql的驱动放到kettle安装文件中的lib下面,然后重启Spoon
(3)连接方式
方式一: 数据库类型选择Generic Database
自定义连接URL填入:jdbc:mysql://localhost:3306/sys?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL(注:sys是你的数据库名称)
自定义驱动类名称填入:com.mysql.cj.jdbc.Driver
方式二:在kettle的安装目录下data-integration\simple-jndi\jdbc.properties加入jdbc的连接信息
MYSQL8_DB/type=javax.sql.DataSource
MYSQL8_DB/driver=com.mysql.cj.jdbc.Driver
MYSQL8_DB/url=jdbc:mysql://localhost:3306/sys?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT //(注:sys是你的数据库名称)
MYSQL8_DB/user=root //(用户名)
MYSQL8_DB/password=root //(密码)
选择mysql连接,连接方式选择JNDI,JNDI名称填写MYSQL8_DB
点击测试之后:
写入SQL语句,预览信息
12、Excel输出
07版的excel输出
在连接第二个箭头是会出现分发和复制,选择复制即可。
此处数据量较大时,进行勾选。
12、文本文件输出(输出txt、csv文件)
小技巧:在此处可以把mysql设为公共数据源,各个转换都可以使用。
输出文件
12、SQL文件输出
获取数据库中的表,以.sql文件方式输出sql语句
13、表输出
案例:从excel中读取id,name,age字段的数据写入数据库ssmbuild的book1表中。
excel输入按照原先的方式;(注意:不要忘记增加)
表输出:在数据库连接方式那可以进行选择,选择共享的数据库。注意此处sql可能报错,我这在varchar里加分配varchar(10)
需要修改的部分。
成功在数据库中创建表。
14、更新
更新:就是把数据库已经存在的记录与数据流里面的记录进行比对,如果不同就进行更新。(注意:如果记录不存在会出现错误)
案例:从Excel读取数据,并把数据更新到book1表中。
Excel数据就是正常选择配置,更新操作如下:
未勾选时会造成错误
成功:更新表中id存在的数据,表中不存在的不进行增加。
15、插入更新
插入更新:把数据库已存在的记录与数据流里面的记录进行对比,如果不同进行更新。如果记录不存在,则插入数据。
Excel输入按照正常配置,插入/更新操作与更新操作类似,按下图进行配置。
16、删除
删除就是删除数据库表中指定条件的数据。
案例:删除book1中id为1的数据。
自定义常量数据:
删除