ETL-Kettle学习

ETL-Kettle学习,第1张

ETL-Kettle学习

kettle
  • 学习视频
  • 一、ETL 了解(数据仓库技术)
  • 二、Kettle(工具)
  • 三、Kettle脚本流程
  • 四、Kettle组件
  • 五、Kettle目录
  • 六、Kettle界面
  • 七、 *** 作
    • 1.转换
    • 2.步骤
    • 3.跳
    • 4.数据类型
    • 5.并行
    • 6.作业
  • 八、Kettle转换
    • 1.Kettle输入控件
      • csv文件输入
      • 文本文件输入
      • Excl输入
      • XML输入
      • JSON输入
      • 表输入-数据库
    • 2.Kettle输出控件
      • Excl输出
      • 文本文件输出
      • SQL文件输出
      • 表输出
      • 插入-更新 、 更新
      • 删除
    • 3.转换控件 transform
      • concat fields 合并字段
      • 值映射
      • 增加常量、增加序列
      • 字段选择
      • 计算器
      • 字符串剪切、 *** 作、替换
      • 排序记录、去除重复记录。
      • 唯一行(哈希值)
      • 拆分字段
      • 列拆分为多行
      • 行扁平化
      • 列转行
      • 行转列
    • 4.应用控件
      • 替换null值
      • 写日志
    • 5.kettle流程控件
      • switch/case 控件
      • 过滤记录
      • 空 *** 作
      • 终止-中止
    • 6.查询控件
      • 数据库查询
      • 流查询
    • 7.连接控件
      • 合并记录
      • 记录集连接
    • 8.统计控件
      • 分组
    • 9.映射控件
    • 10.脚本控件
      • 执行SQL脚本
  • 九、kettle作业
    • 1.作业项
    • 2.作业跳
    • 3.邮件
  • 问题记录
    • 1.kettle8 获取时间多九个0
    • 2.kettle-sql输出-navicat导入sql文件中文乱码
    • 3.kettle8 表输出 出现中文乱码

学习视频

https://www.bilibili.com/video/BV1NT4y1c7o8?p=1

一、ETL 了解(数据仓库技术)

etl是 extract(抽取)-transform(转换)-load(加载)的缩写。对应的是数据处理的过程,抽取=》转换=》加载。

二、Kettle(工具)

是一款etl 工具,etl工具还有很多。

Kettle是一款国外开源的ETL工具,纯Java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。

Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。——就是你想达到什么样的目的,不需要管后台如何 *** 作。就是你想要房子,不用管如何建造的。

Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

Kettle(现在已经更名为PDI,Pentaho Data Integration-Pentaho数据集成)。

三、Kettle脚本流程

Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。


作业是一步一步的执行,必须等前面的执行完成才能进行下一步。转换是全部启动。转换属于多个步骤中的一步。

四、Kettle组件

五、Kettle目录


还有一些主要的脚本,使用spoon.bat/spoon.sh 启动Kettle 工具,第一次启动可能会慢一些

六、Kettle界面

connet链接区,设置连接资源库数据库,密码账户都是admin。登录后,打开本地文件再保存,就存到服务器数据库。
还有本地资源库可以生成


双击空白工作区获取跳的信息。

七、 *** 作

拖入 *** 作步骤,创建输入输出模块,按住shift连接步骤。连接线也叫跳。

输入模块使用


输出模块使用
注意文件名后缀,如果扩展名和文件名都有后缀会添加两个后缀,可以删除文件名后缀

可以获取字段,进行格式调整,设置宽度。0是取到整数位

1.转换

在转换中,以行为单位进行转换,一行数据从输入跳到输出,再开始第二行数据跳。

2.步骤


分发是把总的数据分开发送,总5,会给1两条,给2三条数据。复制是都能有5条数据

3.跳

4.数据类型

5.并行

6.作业

八、Kettle转换

在处理数据的时候能获取字段,预览到数据基本没问题。转换是多线程的

1.Kettle输入控件

常用控件

csv文件输入

csv文件数据默认用逗号隔开


文件大可以调NIO

文本文件输入


Excl输入

Excel输入控件也是很常用的输入控件,一般企业里会用此控件对大量的Excel文件进行ETL *** 作。使用Excel输入控件步骤如下:
1)按照读取的源文件格式指定对应的表格类型为xls还是xlsx
2)选择并添加对应的excel文件e
3)获取excel的sheet工作表e
4)获取字段,并给每个字段设置合适的格式
5)预览数据

XML输入

获取包含数据的路径,例如下面的student。


JSON输入

json文件如果获取不到数据可能和路径有关系,不能存在中文目录
JSONPath



第一个输入json,先获取指定的json数据,id和data,在进行第二步输入json,从data中获取field和value,需要用JSONpath获取节点路径。最后再输出excel。

表输入-数据库

在Kettle目录的lib下存放jar包,如果没有jar包,后放入的包需要重启软件。
kettle连接数据库不成,需要注意kettle和mysql版本是否兼容。还要注意lib放入mysql驱动。


连接数据库报错 5.4版本 ,jdk1.8
错误连接数据库 [mysql-Kettle] : org.pentaho.di.core.exception.KettleDatabaseException:
Error occurred while trying to connect to the database

Error connecting to database: (using class org.gjt.mm.mysql.Driver)
java.lang.StackOverflowError

org.pentaho.di.core.exception.KettleDatabaseException:
Error occurred while trying to connect to the database

Error connecting to database: (using class org.gjt.mm.mysql.Driver)
java.lang.StackOverflowError

放入驱动后重新启动软件,发现还是连接数据库失败,更新了kettle版本8.2.
重新连接测试成功



数据库连接只支持1个转换,如果想数据库支持多个转换,需要右键-共享,共享数据库。

2.Kettle输出控件

输出常用控件

Excl输出

Kettle中自带了两个Excel输出,一个Excel输出,另一个是Microsoft Excel输出。

Excel输出只能输出xls文件(适合Excel2003)
Microsoft Excel输出可以输出xls和xlsx文件(适合Excel2007及以后)xlsx是压缩过的xls,体积小。

1)选择合适的扩展名
2)点击浏览,补全输出文件的路径已经文件名

在内容可以不获取字段,也能成功生成数据。

文本文件输出

文本文件输出控件,顾名思义,这是一个能将数据输出成文本的控件,比较简单,在企业里面也比较常用。
1.设置对应的目录和文件名
2.设置合适的扩展名,比如txt,csv等
3.在内容框设置合适的分隔符,比如分号,逗号,TAB等
4.在字段框里获取字段,并且给每个字段设置合适的格式

SQL文件输出

SQL文件输出一般跟表输入做连接,然后将数据库表的表结构和数据以sql文件的形式。注意选择编码格式。
导出,然后做数据库备份的这么一个工作。
1.选择合适的数据库连接
2.选择目标表-目标表是创建的表名,可以选择数据库的,也可以自己写
3.勾选增加创建表语句和每个语句另起一行
4.填写输出文件的路径和文件名
5.扩展名默认为sql,这个不需要更改

表输出

1.选择合适的数据库连接
2.选择目标表,目标表可以提前在数据库中手动创建好,也可以输入一个数据库不存在的表,然后点击下面的SQL按钮,利用kettle现场创建
3.如果目标表的表结构和输入的数据结构不一致,还可以自己指定数据库字段
获取数据库字段,然后删除不需要字段。

表输出需要提前建表,或者在表输出中的sql 中建立新表。还要注意新表的字段类型是否与旧表的一致。

插入-更新 、 更新

更新和插入/更新,这两个控件是kettle提供的将数据库已经存在的记录与数据流里面的记录进行对比的控件。企业级ETL经常会用到这两个控件来进行数据库更新的 *** 作

两者区别:
更新是将数据库表中的数据和数据流中的数据做对比,如果不同就更新,如果数据流中的数据比数据库表中的数据多,那么就报错。

插入/更新的功能和更新一样,只不过优化了数据不存在就插入的功能,因此企业里更多的也是使用插入/更新。


选择目标表后,获取字段,用来查询的关键字,表字段是目标表的字段,流里的字段是输入流的字段,来自表输入或其他。选择要更新的字段

删除

删除控件可以删除数据库表中指定条件的数据,企业里一般用此控件做数据库表数据删
除或者跟另外一个表数据做对比,然后进行去重的 *** 作。
1.选择数据库连接
2.选择目标表
3.设置数据流跟目标表要删除数据的对应字段


根据所选择的字段,一般选择主键,删除重复的数据。

3.转换控件 transform

转换控件是转换里面的第四个分类,转换控件也是转换中的第三大控件,用来转换数据。
转换是ETL里面的T(Transform),主要做数据转换,数据清洗的工作。ETL整个过程中,
Transform的工作量最大,耗费的时间也比较久,大概可以占到整个ETL的三分之二。

concat fields 合并字段


值映射

功能:用来替换字段里的值


值映射就是把字段的一个值映射成其他的值。在数据质量规范上使用非常多,比如很多系统对应性别sex字段的定义不同。所以我们需要利用此控件,将同一个字段的不同的值,映射转换成我们需要的值。 类似于替换
1.选择映射的字段
2.还可以自定义映射完以后的新字段名e
3.可以设置不匹配时的默认值
4.设置映射的值

增加常量、增加序列

增加常量就是在本身的数据流里面添加一列数据,该列的数据都是相同的值。
增加序列是给数据流添加一个序列字段,可以自定义该序列字段的递增步长。



字段选择

字段选择是从数据流中选择字段,进行修改名称,修改数据类型。
先获取所有字段,需要改名的进行改名,需要删除的在移除中选择字段。

计算器

字符串剪切、 *** 作、替换

功能:
剪切用来截取某一部分的字符串
替换 用来替换字符串




排序记录、去除重复记录。

功能:先排序后去重


去除重复记录是去除数据流里面相同的数据行。但是此控件使用之前要求必须先对数据进行排序,对数据排序用的控件是排序记录,排序记录控件可以按照指定字段的升序或者降序对数据流进行排序。因此排序记录+去除重复记录控件常常配合组队使用。


唯一行(哈希值)

功能:去重,且不用排序,输出是乱序
排序记录+去除重复记录对比的是每两行之间的数据,

而唯一行(哈希值)是给每一行的数据建立哈希值,通过哈希值来比较数据是否重复,因此唯一行(哈希值)去重效率比较高,也更建议大家使用。

拆分字段

功能:拆分一个字段


拆分字段是把字段按照分隔符拆分成两个或多个字段。需要注意的是,字段拆分以后,原字段就会从数据流中消失。 拆分字段的时候注意设置拆分字段的类型

列拆分为多行

功能:
列拆分为多行就是把指定字段按指定分隔符进行拆分为多行,然后其他字段直接复制。
就是把一列里面的多组数据,拆分为多行。


效果图


行扁平化

行扁平化就是把同一组的多行数据合并成为一行,可以理解为列拆分为多行的逆向 *** 作。
但是需要注意的是行扁平化控件使用有两个条件:
1)使用之前需要对数据进行排序
2)每个分组的数据条数要保证一致,否则数据会有错乱

每组要合并的数据条数要一样。

列转行

功能:将一列的数据作为字段转为行。

行转列

功能:把一行字段的数据转换成一列。

4.应用控件

替换null值

替换NULL值,顾名思义就是将数据里面的null值替换成其他的值,此控件比较简单,但是在企业里面也会经常用到。
1.可以选择替换数据流中所有字段的null值
2.也可以选择字段,在下面的字段框里面,根据不同的字段,将null值替换成不同的值

写日志

写日志控件主要是调试的时候使用,此控件可以将数据流的每行数据打印到控制台,方便我们调试整个程序。 可以加在任何一个数据流上,显示当前数据。
1.选择日志级别
2.可以输入自定义输出的语句
3.选择要输出打印的字段

5.kettle流程控件

switch/case 控件

Switch/case控件,最典型的数据分类控件,可以利用某一个字段的数据的不同的值,让数据流从一路到多路。

过滤记录

和Switch/case做对比的话,过滤记录相当于if-else,可以自定义输入一个判断条件,然后将数据流中的数据一路分为两路。

空 *** 作

什么也不做

终止-中止


第一个:终止运行中的流程
第二个:直接终止流程
第三个:一条条的运行,不符合的终止,复合的继续。

6.查询控件

数据库查询

数据库查询就是从数据库里面查询出数据,然后跟数据流中的数据进行左连接的一个过程。
左连接的意思是数据流中原本的数据全部有,但是数据库查询控件查询出来的数据不一定全部会列出,只能按照输入的匹配条件来进行关联。


左查询,以流中的数据为主表查询。

流查询

流查询控件就是查询两条数据流中的数据,然后按照指定的字段做等值匹配。注意:流查询在查询前把数据都加载到内存中,并且只能进行等值查询。
流里的值查询

7.连接控件

合并记录

功能:合并更新数据


合并记录是用于将两个不同来源的数据合并,这两个来源的数据分别为旧数据和新数据,该步骤将旧数据和新数据按照指定的关键字匹配、比较、合并。

注意:旧数据和新数据需要事先按照关键字段排序,并且旧数据和新数据要有相同的字段名称。

合并后的数据将包括旧数据来源和新数据来源里的所有数据,对于变化的数据,使用新数据代替旧数据,同时在结果里用一个标示字段,来指定新旧数据的比较结果。



记录集连接

功能:连表查询


记录集连接可以对两个步骤中的数据流进行左连接,右连接,内连接,外连接。
此控件功能比较强大,企业做ETL开发会经常用到此控件,但是需要注意在进行记录集连接之前,需要对记录集的数据进行排序,并且排序的字段还一定要选两个表关联的字段,否则数据错乱,出现null值。两个表用相同的字段进行排序,然后再连接查询

8.统计控件

分组控件,类似于group by,分组之前进行排序,按分组字段排序最好。

分组

功能:对数据分组和计算值。

9.映射控件

映射类似于一个方法,输入规范类似于入参,输出规范类似于输出的数据。


创建映射方法:输出映射规范不用写。


调用映射(子映射)方法

10.脚本控件

执行SQL脚本

就是连接到数据库,写一些sql语句执行。可单独执行,也可以复合使用

九、kettle作业

大多数ETL项目都需要完成各种各样的维护工作。例如,如何传送文件;验证数据库表是否存在等等。而这些 *** 作都是按照一定顺序完成。因为转换以并行方式执行,就需要一个可以串行执行的作业来处理这些 *** 作。一个作业包含一个或者多个作业项,这作业项以某种顺序来执行。 作业执行顺序由作业项之间的跳(job hop)和每个作业项的执行结果来决定。

1.作业项

作业项是作业的基本构成部分。如同转换的步骤,作业项也可以使用图标的方式图形化展示。但是,作业项和转换步骤有下面几点不同:
1.转换步骤与步骤之间是数据流,作业项之间是步骤流。

2.转换启动以后,所有步骤一起并行启动等待数据行的输入,而作业项是严格按照执行顺序启动,一个作业项执行完以后,再执行下一个作业项。

3.在作业项之间可以传递一个结果对象(result object)。这个结果对象里面包含了数据行,它们不是以数据流的方式来传递的。而是等待一个作业项执行完了,再传递个下一个作业项。

4.因为作业顺序执行作业项,所以必须定义一个起点。有一个叫“开始”的作业项就定义了这个点。一个作业只能定一个开始作业项。

2.作业跳

3.邮件



问题记录 1.kettle8 获取时间多九个0

需要在查询时间的时候对时间格式进行格式化

DATE_FORMAT(Sdate,"%Y-%m-%d %H:%i:%s") AS endTime


2.kettle-sql输出-navicat导入sql文件中文乱码

从kettle sql输出文件,在navicat查询sql文件,发现中文乱码。一开始以为是kettle或者数据库的编码格式不对,后来查看数据库编码格式是utf8,kettle连接数据库的时候在高级设置字符集,也没有用。后来打开编辑发现中文显示正常,发现右下角编码格式不正确,重新保存 设置编码格式utf-8.

在sql输出的内容里选择编码格式即可。

3.kettle8 表输出 出现中文乱码


可以在数据库连接中,设置命名参数 characterEncoding utf8。


或者查看mysql中文乱码解决方案

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5698539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存