文章目录
- 一、入门
-
- 1.Kettle简介
- 2.Kettle下载
- 3.Kettle部署
- 4.界面简介
- 5.快速体验
- 6.执行结果
- 7.核心概念
- 二、输入控件
-
- 1.csv文件输入
- 2.文本文件输入
- 3.Excel输入
- 4.多文件合并
- 5.Get data from XML
- 6.Json input
- 7.生成记录
- 8.表输入(数据库表)
- 9.自定义常量数据
- 三、输出控件
-
- 1.Excel输出
- 2.文本文件输出
- 3.SQL文件输出
- 4.表输出(数据库表)
- 5.更新(数据库表)
- 6.插入/更新(数据库表)
- 7. 删除(数据库表)
- 四、转换控件
-
- 1.Concat fields
- 2.值映射
- 3.增加常量
- 4.增加序列
- 5.字段选择
- 6.计算器
- 7.剪切字符串+字符串替换+字符串操作
- 8.排序记录+去除重复记录
- 9.唯一行(哈希值)
- 10.拆分字段
- 11.列拆分为多行
- 12.列转行
- 13.行转列
- 14.行扁平化
- 五、Kettle应用控件
-
- 1.替换null值
- 2.写日志
- 3.发送邮件
- 六、流程控件
-
- 1.Switch/case
- 2.过滤记录
- 3.空操作
- 4.中止
- 七、查询控件
-
- 1.HTTP client
- 2.数据库查询
- 3.数据库连接
- 4.流查询
- 八、连接控件
-
- 1.合并记录
- 2.记录关联(笛卡尔积)
- 3.记录集连接
- 九、统计控件
-
- 1.分组
- 十、映射控件
-
- 1.映射(子转换)
- 2.映射输入规范
- 3.映射输出规范
- 十一、脚本控件
-
- 1.javascript脚本
- 2.java脚本
- 3.sql脚本
- 十二、作业
-
- 1.作业
- 2.参数
- 3.常量传递
- 4.转换命名参数
- 5.设置变量-获取变量
- 6.作业里设置变量
- 7.发送邮件
配套资料:
https://download.csdn.net/download/weixin_40844116/13453630
一、入门
1.Kettle简介
ETL是数据抽取、转换、加载。
Spoon是图形界面接口。
Kettle包含job和transformation两种脚本
2.Kettle下载
下载网址:https://sourceforge.net/projects/pentaho/files/
https://community.hitachivantara.com/docs/DOC-1009855
国内镜像地址:http://mirror.bit.edu.cn/pentaho/Pentaho%208.2/client-tools/
3.Kettle部署
4.界面简介
工具栏
工具图表
树形列表
工作区
5.快速体验
抽取:输入。
转换:转换。
加载:输出。
新建加载,拖动图标,修改参数,获取字段,连接步骤(shift+拖动连线),完成运行。
6.执行结果
日志:显示错误行、清空日志、设置日志显示级别
步骤度量
Metrics
Preview data
7.核心概念
-
可视化编程:使用图形化的方式定义复杂的ETL程序和工作流
-
转换:是ETL解决方案中最主要的部分,它处理抽取、转换、加载各种对数据行的操作。
-
步骤:拖动的图标
①步骤需要有一个名字,这个名字在转换范围内唯一。
②每个步骤都会读、写数据行(唯一例外是“生成记录”步骤,该步骤只写数据)。
③步骤将数据写到与之相连的一个或多个输出跳,再传送到跳的另一端的步骤。
④大多数的步骤都可以有多个输出跳。一个步骤的数据发送可以被被设置为分发和复制,分发是目标步骤轮流接收记录,复制是所有的记录被同时发送到所有的目标步骤。 -
跳:步骤之间带箭头的连线,跳定义了步骤之间的数据通路。
跳实际上是两个步骤之间的被称之为行集的数据行缓存(行集的大小可以在转换的设置里定义)。 -
数据行:数据以数据行的形式沿着步骤移动。一个数据行是零到多个字段的集合
- 字段包含下面几种数据类型
①String:字符类型数据
②Number:双精度浮点数。
③Integer:带符号长整型(64位)。
④BigNumber:任意精度数据。
⑤Date:带毫秒精度的日期时间值。
⑥Boolean:取值为true和false的布尔值。
⑦Binary:二进制字段可以包含图像、声音、视频及其他类型的二进制数据。 - 每个步骤在输出数据行时都有对字段的描述,这种描述就是数据行的元数据。
通常包含下面一些信息。
①名称:行里的字段名应用是唯一的。
②数据类型:字段的数据类型。
③格式:数据显示的方式,如Integer的#、0.00。
④长度:字符串的长度或者BigNumber类型的长度。
⑤精度:BigNumber数据类型的十进制精度。
⑥货币符号:¥
⑦小数点符号:十进制数据的小数点格式。不同文化背景下小数点符号是不同的,一般是点(.)或逗号(,)。
⑧分组符号:数值类型数据的分组符号,不同文化背景下数字里的分组符号也是不同的,一般是点(.)或逗号(,)或单引号(’)
- 并行:跳的这种基于行集缓存的规则允许每个步骤都是由一个独立的线程运行,这样并发程度最高。
二、输入控件
文件浏览选择后需要点击<添加>,字段需要点击<获取字段>
1.csv文件输入
输入CSV文件(是一种带有固定格式的文本文件)
列分隔符:一般是逗号
包含列头行:勾选带上表头
文件编码:GBK、UTF-8等根据实际情况选取
2.文本文件输入
输入txt文件
分隔符:根据实际情况选取
3.Excel输入
输入xls和xlsx的excel文件
表格类型(引擎):excel类型(xls或xlsx)
4.多文件合并
例如【Excel输入】步骤中,可以添加多个文件或目录,设置通配符号
5.Get data from XML
XML 指可扩展标记语言(EXtensible Markup Language), XML 被设计用来传输和存储数据。
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
XPath语法:
示例:
循环读取路径:要到达最底层的路径,注意不要中文,最好复制
XML路径:以最底层为当前位置
考虑名称空间
Xpath参考:https://www.w3school.com.cn/xpath/index.asp
6.Json input
- JSON
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
JSON核心概念:数组、对象、属性
数组:[ ]
对象:{ }
属性:key:value - JSONPath
JSONPath类似于XPath在xml文档中的定位,JsonPath表达式通常是用来路径检索或设置Json的。
其表达式可以接受“dot–notation”(点记法)和“bracket–notation”(括号记法)格式
点记法:$.store.book[0].title
括号记法:$[‘store’][‘book’][0][‘title’]
jsonpath参考:https://www.cnblogs.com/jpfss/p/10973590.html
7.生成记录
数据仓库中绝大多数的数据都是业务系统生成的动态数据,但是其中一部分维度数据不是动态的,比如:日期维度。静态维度数据就可以提前生成。这一步周生成的数据都是相同的,需要其他步骤在此基础上修改。
8.表输入(数据库表)
根据自己数据库版本MySQL驱动下载:https://dev.mysql.com/downloads/connector/j/
放在\pdi-ce-8.2.0.0-342\data-integration\lib目录
连接mysql8数据库参考:https://blog.csdn.net/weixin_40818105/article/details/86248915(修改jdbc.properties文件)
连接好的数据库可以右击设置为共享。
连接后填写查询语句。
9.自定义常量数据
自定义常量数据就是生成key-value形式的常量数据。
元数据:常量名称、类型
数据:值
三、输出控件
1.Excel输出
【Exel输出】输出xls
【Microsoft Excel 输出】输出xls或xlsx(选择扩展名)
2.文本文件输出
数据操作常见的格式是:TXT和CSV(修改扩展名)
3.SQL文件输出
SQL文件输出可以导出数据库表的结构和数据。
选择数据库,选择目标表,输出的是一个sql文件,里面是建表语句和插入数据语句。
4.表输出(数据库表)
将数据导入数据库表。
选择数据库连接,输入目标表/新建的表名,如果是新建表可以sql按钮执行新建语句。
指定数据库字段可以手动选择数据库字段。
5.更新(数据库表)
更新就是把数据库已经存在的记录与数据流里面的记录进行比对,如果不同就进行更新。
注意:如果记录不存在,则会出现错误!
选择目标表,指定用来查询的字段和要更新的字段
忽略查询失败避免中断报错
6.插入/更新(数据库表)
插入更新就是把数据库已经存在的记录与数据流里面的记录进行比对,如果不同就进行更新。
如果记录不存在,则会插入数据!
7. 删除(数据库表)
删除就是删除数据库表中指定条件的数据。
将目标表里的数据按照流里面的字段条件删除。
可以协同【输入-自定义常量数据】
四、转换控件
1.Concat fields
Concat fields就是多个字段连接起来合并一个新的字段。
2.值映射
就是把字段的一个值映射成其他的值。
选择字段名、填写目标字段名(映射后的),不匹配的默认值
对应源值和目标值
3.增加常量
增加常量就是在本身的数据流里面添加一列数据,该列的数据都是相同的值。
增加一列常量。
4.增加序列
给数据流添加一个序列字段。
数据库来生成序列只支持Oracle
使用转换计数器生成序列,填写起始值、步长、最大值
5.字段选择
字段选择是从数据流中选择字段、移除字段、改变名称、修改数据类型、更改字段顺序等改变数据结构的操作。
6.计算器
计算器是一个函数集合,以现有字段为基础,来创建新的字段,还可以设置字段是否移除(临时字段)
7.剪切字符串+字符串替换+字符串操作
- 剪切字符串:
是指定输入流字段裁剪的位置剪切出新的字段。
设置起始位置(0开始计数)和结束位置,类似mid函数 - 字符串替换:
是指定搜索内容和替换内容,如果输入流的字段匹配上搜索内容就进行替换生成新字段。
类似substitute函数 - 字符串操作:
是去除字符串两端的空格和大小写切换,并生成新的字段。
类似trim函数
8.排序记录+去除重复记录
将记录先排序,将相邻的两行对比去重
9.唯一行(哈希值)
对所有记录寻找唯一值,从而去重
10.拆分字段
把字段按照分隔符拆分成两个或多个字段
拆分字段后,原字段就不在数据流中
11.列拆分为多行
12.列转行
如果数据一列有相同的值,按照指定的字段,把多行数据转换为一行数据
去除一些原来的列名,把一列数据变为字段
注意:列转行之前必须进行数据流排序(排序记录)
关键字段:要转成行的字段(相当于透视表里的列)
分组字段:相同值,可以进行合并分组的字段(相当于透视表的行)
目标字段:关键字段的内容,转成行的列名
数据字段:(相当于透视表中的值)
类型:指定数据字段的数值类型
13.行转列
把数据字段转换为一列,把数据行变为数据列(列转行逆运算)
Key字段:要转成列的新字段名
Value字段:原来值要转成的新字段名
14.行扁平化
把同一组的多行数据合并成为一行
注意:
只有数据流的同类数据行记录一致的情况才能使用(张三2行其他人也是2行)
数据流必须排序,否则结果会不正确
目标字段的个数取决于组内记录条数(张三和所有人都是两条,目标字段数就是2个)
五、Kettle应用控件
1.替换null值
将空值替换成指定值
选择字段:针对该字段的空值进项替换
2.写日志
在调试的时候使用,把日志信息打印到日志窗口
选择日志级别,写日志(测试信息)、字段
3.发送邮件
企业邮箱
六、流程控件
1.Switch/case
让数据流从一路到多路
switch字段:要判断的字段
数据类型:switch字段数据类型
case值:值(条件)-目标步骤(结果)
输出步骤有多个
2.过滤记录
让数据流从一路到两路(if-else)
输出步骤有两个
3.空操作
一般作为数据流的重点,什么都不操作,可以结合switch或过滤进行记录筛选剔除
4.中止
数据流的终点,如果有数据到这里,将会报错。用来校验数据的时候使用。
七、查询控件
1.HTTP client
使用get方式提交请求,获取返回的页面内容
该步骤需要联网,设置字段名后,获取返回字段值是xml或者json,解析后输出。
要访问的url可以直接输入,或者使用【自定义常量数据】定义字段后从字段获取,解析xml使用【Get data from xml】
2.数据库查询
就是数据库里面的左连接
两表关联后,把左边的表数据查询出来。
3.数据库连接
可以执行两个数据库(例如不同的schema,例如mysql库和oracle库)的查询,和单参数的表输入
案例:将MYTEST下的departments表连接到MYSQL下的employees先将departments进行表输入
结果相当于两个表进行join
4.流查询
在查询前将数据都加载到内存中,并且只能进行等值查询
先将两个表excel输入成流
相当于select employees.*,departments.dep_name from employees left join departments on employees.dep_id=departments.id
八、连接控件
结果集通过关键字进行连接
1.合并记录
将两个不同来源的数据合并,这两个来源分别为旧数据和新数据,改步骤将旧数据和新数据按照指定的关键字匹配、比较、合并。
需要设置:新数据来源和旧数据来源
标志字段:用于保存比较的结果
- identical:旧数据和新数据一样
- changed:数据发生了变化
- new:新数据中有而旧数据中没有的记录
- deleted:旧数据中有而新数据中没有的记录
关键字段:用于定位两个数据院中的同一条数据
比较字段:两个数据源中的同一条记录中,指定需要比较的字段
合并新数据源与旧数据源数据,对于变化的数据,新的替代旧的,同时结果里用一个标志字段来指定比较结果。
注意:新数据和旧数据需要实现按照关键字段排序;新数据和旧数据要有相同的字段名称
2.记录关联(笛卡尔积)
3.记录集连接
九、统计控件
1.分组
分组是按照某一个或某几个进行分组,同时可以将其余字段按照某种规则进行合并。
注意:分组前按照分组字段排序(仅需按照分组字段排序)
设置分组字段,指定聚合信息。
十、映射控件
用来定义子转换,便于封装和重用
1.映射(子转换)
用来配置子转换,对子转换进行调用的一个步骤
2.映射输入规范
输入字段,由调用的转换输入
3.映射输出规范
向调用的转换输出所有列,不做任何处理
案例:从t_orders表中获取数据,根据u_id查询t_users表,获取用户信息,并把数据保存到excel
十一、脚本控件
直接通过程序代码完成一些复杂的操作。
1.javascript脚本
两种模式:兼容和不兼容(老版本)
- 获取字段
不兼容:
myVar=FieldName;
兼容:根据字段类型的不同,使用不同的方法
myVar=FieldName.getString();
myVar=FieldName.getNumber(); - 字段赋值
不兼容:
FieldName=myVar;
兼容:
FieldName.setValue(myVar); - 在脚本中使用java类
不兼容:
var myVar = new java.lang.String(‘appple’);
兼容:
var myVar = new Packages.java.lang.String(‘appple’);
案例:生成100条从2000.1.1开始的日期维度数据
上一步已经生成两个字段
2.java脚本
-Main
Main函数对应一个processRow()函数(用来处理数据流)
案例:从excel读取数据,生成newcode字段,如果code的列为null就是用name列来替换,否则就在code列的后面加上123,结果保存在excel
3.sql脚本
可以执行一个update语句,用来更新某个表中的数据
案例:从t_user表找到lisi,把age的值更改为33
双击
执行的时候输入
十二、作业
ETL中需要完成各种维护工作,例如传送文件、验证数据库表是否存在 ,这些作业按照一定顺序完成,这就需要可以串行执行的作业来处理(转换是以并行方式执行)
一个作业包含一个或多个作业项,这些作业项以某种顺序来执行,作业执行顺序由作业项之间的跳job hop和每个作业项的执行结果来决定
作业项:是作业的基本构成(类似转换中的步骤)
作业项之间可以传递一个结果对象,包含数据行,但不是以数据流的方式来传递,而是等待一个作业项执行完了,再传递下一个作业项。
必须设置起点
作业跳:作业项之间的连接线
无条件执行(蓝色,锁)运行结果结果为真时执行(绿色,勾)执行结果为假(红色,禁止),可以点击切换
1.作业
转换作业项需要指定一个存在的转换项
“start”里面可以设置定时任务
“转换”右击关联可用的转换
2.参数
参数的传递会涉及到业务数据如何抽取
- 全局参数
全局参数定义是通过当前用户下.kettle文件夹中的kettle.properties文件来定义。
采用“键=值”对的方式来定义,例如start_date=20130101
注意:在配置全局变量时需要重启kettlle 才会生效 - 局部参数
局部参数变量时通过"Set Varibles"与"Get Varibles"方式来设置
注意:在"Set Varibles"时在当前转换当中是不能马上使用,需要在作业中的下一步骤中使用。 - 参数使用
%%变量名%%
${变量名}
在sql中使用变量时需要把“是否替换变量”勾选上,否则无法使变量生效。
编辑-编辑kettle.properties文件
3.常量传递
先自定义常量数据,在表输入的sql语句里面使用?来替换。
?的替换顺序就是常量定义的顺序
4.转换命名参数
在转换的内部定义的变量,作用范围是在转换内部。
在转换的空白处右键,选择【转换设置】就可以看见
5.设置变量-获取变量
转换-作业-设置变量、获取变量
注意:“获取变量”时在当前转换当中是不能马上使用,需要在作业中的下一步骤中使用
6.作业里设置变量
作业-通用-设置变量
方式1. 先获取再使用
方式2:直接使用
7.发送邮件
只有企业邮箱才可以,个人邮箱不行,并且需要在邮件设置中开通客户端授权码。
地址:收件人邮箱、发件人邮箱
服务器:SMTP服务器、端口号;用户验证、用户名、密码(授权码)