ETL(Extract-Transform-Load 的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种 ETL 工具的使用,必不可少。“
市面上常用的 ETL 工具有很多,比如 Sqoop,Daax,Kettle,Talend 等,作为一个大数据工程师,我们最好要掌握其中的两到三种,这里我们要学习的 ETL 工具是 Kettle!“**Kettle (新名字PDI,但大家都叫老名字)**是一款国外开源的 ETL 工具,纯java 编写,可以在Window、Linux、Unix 上运行,绿色无需安装,数据抽取高效稳定。
输入控件
输出控件
Excel输出
将输入格式转为Excel输出
文本文件输出
将输入格式转为 txt 输出
更新&插入/更新
更新
将表输入进行 更新操作,要求输入表与输出表数量一致
插入/更新
将表输入进行 插入/更新操作,输出表数量少时会自动插入
删除
以输入表数据为依据 删除输出表中的数据
表输出
将输入表数据输出道 输出表
转换控件
Concat fields
将多个字段拼接成新的字段
值映射
值映射就是把字段的一个值映射成其他的值。在数据质量规范上使用非常多,比如很多系统对应性别 sex 字段的定义不同。所以我们需要利用此控件,将同一个字段的不同的值映射转换成我们需要的值。“
- 选择映射的字段“
- 还可以自定义映射完以后的新字段名
- 可以设置不匹配时的默认值
- 设置映射的值“
增加常量&增加序列
增加常量就是在本身的数据流里面添加一列数据,该列的数据都是相同的值。
增加序列是给数据流添加一个序列字段,可以自定义该序列字段的递增步长。“
字段选择
可以删除字段,修改字段名称,数据类型等等
字符串剪切/操作/替换
字符串的剪切替换,字符串操作可以操作转大小写
去重/排序
去重前必须排序
唯一行(哈希值)
唯一行(哈希值)是给每一行的数据建立哈希值,通过哈希值来比较数据是否重复,因此唯一行(哈希值) 去重效率比较高,也更建议大家使用。
拆分字段
例如将 名字 拆分成 firstName,lastName.注意:拆分字段后原字段就没有了
列拆分为多行
列拆分为多行就是把指定字段按指定分隔符进行拆分为多行,然后其他字段直接复制。
列扁平化
相当于 列拆分为多行 的反向操作。操作前请先排序。用的少
列转行
注意:列转行之前数据流必须按照分组字段进行排序,否则数据会错乱!
- 关键字段:从数据内容变成列名的字段、
- 分组字段:列转行,转变以后的分组字段
- 目标字段:增加的列的列名字段
- 数据字段:目标字段的数据字段
- 关键字值:数据字段查询时的关键字,也可以理解为 key
行转列
与列转行相反
- Key 字段:行转列,生成的列名字段名“
- 字段名称: 原本数据流中的字段名“
- Key 值: Key 字段的值,这个是自己自定义的,一般都跟前面的字段名称一样
- Value 字段:对应的 Key 值的数据列的列名“
应用控件
替换NULL值
可以将NULL值替换成其他默认值,全局替换和针对某个字段
写日志
将日志输出道kettle控制台
流程控制
Switch/case
根据不同的条件跳到不同的操作
过滤记录
和 Switch/case 做对比的话,过滤记录相当于 if-else,可以自定义输入一个判断条件,然后将数据流中的数据一路分为两路。
空操作
一般设置为数据流终点,啥也不做。会在控制台输出报错信息
查询控件
查询是转换里面的第九个分类,查询控件是用来查询数据源里面的数据,并合并到主数据流中。
数据库查询
将表输入的数据,与数据库查询的数据经行左连接
流查询
将两个表输入经行连接查询,设置 lookup 的表为次表,另一个为主表
连接控件
合并记录
合并记录是用于将两个不同来源的数据合并,这两个来源的数据分别为旧数据和新数据,该步骤将旧数据和新数据按照指定的关键字匹配、比较、合并。注意旧数据和新数据需要事先按照关键字段排序,并且旧数据和新数据要有相同的字段名称。“
合并后的数据将包括旧数据来源和新数据来源里的所有数据,对于变化的数据,使用新数据代替旧数据,同时在结果里用一个标示字段,来指定新旧数据的比较结果。
合并操作前先排序记录 主要是用作两个文件的对比
记录集连接
记录集连接可以对两个步骤中的数据流进行左连接,右连接,内连接,外连接。此控件功能比较强大,企业做 ETL 开发会经常用到此控件,但是需要注意在进行记录集连接之前需要对记录集的数据进行排序,并且排序的字段还一定要选两个表关联的字段,否则数据错乱,出现null 值。
kettle 统计控件
提供数据采样和统计功能
分组
按什么字段分组,就需要按什么字段排序
kettle映射控件
映射
映射类似于Java中的方法,在另一个转换中调用我们的映射
kettle脚本控件
执行SQL脚本
跟连接工具差不多,没啥用
作业
作业项是作业的基本构成部分。如同转换的步骤,作业项也可以使用图标的方式图形化展示。但是,作业项和转换步骤有下面几点不同:
- 转换步骤与步骤之间是数据流,作业项之间是步骤流。
- 转换启动以后,所有步骤一起并行启动等待数据行的输入,而作业项是严格按照执行顺序启动,一个作业项执行完以后,再执行下一个作业项。
- “在作业项之间可以传递一个结果对象 (result object)。这个结果对象里面包含了数3据行,它们不是以数据流的方式来传递的。而是等待一个作业项执行完了,再传递个下一个作业项。“
- 因为作业顺序执行作业项,所以必须定义一个起点。有一个叫“开始”的作业项就定义了这个点。一个作业只能定一个开始作业项
作业跳
分三种类型
- 无论上次执行结果成功失败都继续执行下一跳,图标🔒
- 运行当前结果为true时才执行下一个作业,图标,✔
- 当前运行结果失败才执行下一个作业,图标,❌
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2023/05/10/programming/java/kettle/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!