数据抽取工具 kettle转换
转换控件
转换控件是转换里面的第四个分类,转换控件也是转换中的第三大控件,用来转换数据。转换是ETL里面的T(Transform),主要做数据转换,数据清洗的工作。ETL整个过程中,Transform的工作量最大,耗费的时间也比较久,大概可以占到整个ETL的三分之二。
由于Kettle中自带的转换控件比较多,本文只挑出开发中经常使用的几个转换控件来进行讲解,详情如下图。
Concat fields
转换控件Concat fields,顾名思义,就是将多个字段连接起来形成一个新的字段。
本章节任务:将staff表的firstname和lastname拼接起来,形成name字段,然后再将数据插入到新表emp中
提示:如果涉及到中文乱码问题,请参考资料:Mysql中文乱码问题
值映射
值映射就是把字段的一个值映射成其他的值。在数据质量规范上使用非常多,比如很多系统对应性别sex字段的定义不同。所以我们需要利用此控件,将同一个字段的不同的值,映射转换成我们需要的值。
1. 选择映射的字段
2. 还可以自定义映射完以后的新字段名
3. 可以设置不匹配时的默认值
设置映射的值
本章节任务:将staff表的sex字段,映射成男or女,然后再插入到emp表中。
增加常量&增加序列
增加常量就是在本身的数据流里面添加一列数据,该列的数据都是相同的值。
增加序列是给数据流添加一个序列字段,可以自定义该序列字段的递增步长。
本章节任务:给表staff的数据加一列固定值slary和一个递增的number序列,在控制台预览下数据即可,不用输出。
字段选择
字段选择是从数据流中选择字段、改变名称、修改数据类型。
本章节任务:在上一章节的转换之后,添加字段选择控件,移除掉firstname字段,并且将lastname重命名为name,将slary重命名为money,然后再次预览数据,查看数据的变化
计算器
计算器是一个函数集合来创建新的字段,还可以设置字段是否移除(临时字段)。我们可以通过计算器里面的多个计算函数对已有字段进行计算,得出新字段。
本章节任务:在上一节的任务基础之上,添加计算器控件对money和number字段进行相乘,得出新字段acount,然后预览数据。
字符串剪切&替换&操作
转换控件中有三个关于字符串的控件,分别是剪切字符串,字符串操作,字符串替换。
剪切字符串是指定输入流字段裁剪的位置剪切出新的字段。
字符串替换是指定搜索内容和替换内容,如果输入流的字段匹配上搜索内容就进行替换生成新字段。
字符串操作是去除字符串两端的空格和大小写切换,并生成新的字段。
本章节任务:在上一节任务之后,添加剪切字符串,字符串替换,字符串操作三个控件,利用这三个控件分别对sex字段进行剪切,替换,操作(去空格,转大小写)
排序记录&去除重复记录
去除重复记录是去除数据流里面相同的数据行。但是此控件使用之前要求必须先对数据进行排序,对数据排序用的控件是排序记录,排序记录控件可以按照指定字段的升序或者降序对数据流进行排序。因此排序记录+去除重复记录控件常常配合组队使用。
本章节任务:利用excel输入控件读取input目录下的06_去除重复记录.xlsx,然后对里面重复的数据进行按照id排序并去重
唯一行(哈希值)
唯一行(哈希值)就是删除数据流重复的行。此控件的效果和(排序记录+去除重复记录)的效果是一样的,但是实现的原理不同。排序记录+去除重复记录对比的是每两行之间的数据,而唯一行(哈希值)是给每一行的数据建立哈希值,通过哈希值来比较数据是否重复,因此唯一行(哈希值)去重效率比较高,也更建议大家使用。
本章节任务:利用唯一行(哈希值)控件对06_去除重复记录.xlsx去重,并且查看最后输出的数据跟上个任务有何区别
拆分字段
拆分字段是把字段按照分隔符拆分成两个或多个字段。需要注意的是,字段拆分以后,原字段就会从数据流中消失。
本章节任务:将07_拆分字段.xlsx里面的NBA球星的姓名,拆分成姓跟名。
列拆分为多行
列拆分为多行就是把指定字段按指定分隔符进行拆分为多行,然后其他字段直接复制。具体效果如下图:
1. 选择要拆分的字段
2. 设置合适的分割符
3. 设置分割以后的新字段名
4. 选择是否输出新数据的排列行号,行号是否重置
本章节任务:对08_列拆分为多行.xlsx的数据按照hobby字段进行拆分为多行,然后将新数据输出到excel文件中,查看数据。
行扁平化
行扁平化就是把同一组的多行数据合并成为一行,可以理解为列拆分为多行的逆向操作。但是需要注意的是行扁平化控件使用有两个条件:
1) 使用之前需要对数据进行排序
2) 每个分组的数据条数要保证一致,否则数据会有错乱
1. 选择扁平化的字段
2. 填写目标字段,字段个数跟每个分组的数据一致
本章节任务:将09_行扁平化.xlsx的数据按照hobby字段进行扁平化
列转行
列转行,顾名思义多列转一行,就是如果数据一列有相同的值,按照指定的字段,将其中一列的字段内容变成不同的列,然后把多行数据转换为一行数据的过程。具体效果如下图:
注意:列转行之前数据流必须按照分组字段进行排序,否则数据会错乱!
1. 关键字段:从数据内容变成列名的字段
2. 分组字段:列转行,转变以后的分组字段
3. 目标字段:增加的列的列名字段
4. 数据字段:目标字段的数据字段
5. 关键字值:数据字段查询时的关键字,也可以理解为key
6. 类型:要给目标字段设置合适的类型,否则会报错
本章节任务:将input目录下的10_列转行.xlsx的数据进行列转行,熟悉列转行控件的使用
行转列
行转列,一行转多列,就是把数据字段的字段名转换为一列,把数据行变为数据列。我们也可以简单理解为行转列控件是列转行控件的逆向操作。具体如下图:
1. Key字段:行转列,生成的列名字段名
2. 字段名称:原本数据流中的字段名
3. Key值:Key字段的值,这个是自己自定义的,一般都跟前面的字段名称一样
4. Value字段:对应的Key值的数据列的列名
本章节任务:将input目录下的11_行转列.xlsx用excel控件输入,然后行转列,熟悉行转列控件的使用。
Mysql中文乱码问题:
将作业或者转换信息存入mysql后,查询是发现是乱码的。这时可以修改mysql的编码。
(1)先关闭mysql服务, sudo service mysql stop
(2)找到mysql的配置文件my.cnf(安装方式不同目录可能不同,我的在/usr/my.cnf),添加如下配置:
character_set_server = utf8
init_connect='SET NAMES utf8'
(3)重启mysql服务,查看编码
show variables like '%char%';
转载自:https://juejin.cn/post/7137857054428889118