关注【郑大钱呀
】【公】【众】【号】,我们一起交流,一起学习,写作不易,还请大家多多关注。
文章目录
前言
本期我们主要学习Kettle中的转换组件,主要包括:Concat fields组件、值映射组件、增加常量组件、增加序列组件、字段选择组件、计算器组件、剪切字符串组件、字符串替换组件、字符串操作组件、去除重复记录与排序记录组件、拆分字段组件、列拆分多行组件、列转行组件、行转列组件、行扁平化组件
Concat fields组件
该组件的作用很简单,类似于编程语言中的拼接字符串,就是把多个字段的值拼接成一个新的字符串,比如:
firstname = 'Maical'
lastname = 'Chen'
concat_str = firstname + lastname
下面看一个具体案例操作,我们有一张user
表,数据如下:
此时我们想把这三个字段拼接到一起,并写
入到一个text文件中,首先我们拖拽相关组件,并建立连接,如下图:
由于表输入和文本文件输出,我们之前的文章讲过了就不在叙述了,我们重点讲解一下Concat fields组件
,双击该组件,进入配置界面,如下图:
配置完成后,点击启动,最后我们看一下结果:
值映射组件
由于数据分析的时候,数据的来源是非常多,但是不同的数据源,可能对于同一含义字段的定义是不同的,比如A系统中性别的定义为:0 男,1 女,B系统中定义为:man 男 ,woman 女,我们为了数据仓库的数据能够规范,所以会将其统一标准,此时就需要使用到值映射组件,示例如下,我们现在有一张表如下:
我们现在想要将表中的性别列,0转换成男,1转换成女,并输出到文本,具体操作如下,还是先拖拽组件,建立连接,如下图:
我们双击值映射
组件,配置组件,如下图:
最后我们启动执行一下,看一下结果,如下图:
增加常量组件
该组件的作用,主要是用来,为当前的数据再增加一列,里面的内容是固定的,比如现在有一张用户表,如下图:
由于他们都是大聪明公司的员工,所以需要为他们增加一个公司的字段,并输出到一个文本中,具体操作如下,先拖拽组件,建立连接,如下:
双击增加常量控件,进入配置页面,如下图:
最后我们启动执行一下,看一下结果,如下图:
增加序列组件
增加序列
组件与增加常量
组件,都是用来增加字段信息的,但是区别的是增加序列的值是可变的
,增加常量组件值是不可变的
,下面我们先感受一下,有一张表,如下:
我们想把信息添加上序号,并输出到文本中,具体操作如下,老规矩,拖组件,建连接,如下图:
双击增加序列组件
,进入配置页面,如下图:
最后我们启动执行一下,看一下结果,如下图:
字段选择组件
字段选择组件,可以从数据中筛选字段也可以改变字段的名称和数据类型,我们看个不太聪明的示例,纯属为了演示,我们有一张表,数据如下:
我们先按照老规矩,先拖拽控件,建连接,如下图:
下面我们双击字段选择组件,进行配置,当前表里有四个字段,我们现在不需要remark字段,只需要三个字段怎么配置呢,如下:
然后我们觉得sex字段我们也不想要,这个时候我们不在选择和修改里
删,我们在删除里去掉,如下图:
然后我们又觉得id
这个字段名字,太平淡,不洋气,我们想把它改成index
,并把数据类型改成整型
,如下图:
最后我们启动执行一下,看一下结果,如下图:
计算器组件
计算器组件主要是用来做计算的,比如加减乘除、四舍五入等等,里面支持的运算很多,如下表:
功能 | 描述 | 必须填 |
---|---|---|
- | 空(不做处理,返回值为NULL) | A |
Set field to constant A | 创建一个具有恒定值的字段。 | A |
Create a copy of field A | 创建具有给定字段值的字段的副本。 | A |
A + B | A加B。 | A and B |
A - B | A减B。 | A and B |
A * B | A乘B。 | A and B |
A / B | A除B。 | A and B |
A * A | A的平方。 | A |
SQRT( A ) | A的平方根。 | A |
100 * A / B | A在B中的百分比。 | A and B |
A - ( A * B / 100 ) | 减去A的B%。 | A and B |
A + ( A * B / 100 ) | 将B%添加到A。 | A and B |
A + B *C | A加B乘以C。 | A, B and C |
SQRT( A* A + B* B ) | 计算(A平方+B平方)的平方根. | A and B |
ROUND( A ) | 返回最接近参数的Integer。通过将结果加1/2,取下限,并将结果转换为int类型,将结果舍入为整数。换句话说,结果等于表达式的值:floor(a + 0.5)。如果需要舍入方法“将一半舍入为偶数”,请使用以下方法ROUND(A,B),不带小数位(B = 0)。 | A |
ROUND( A, B ) | 将A舍入到最接近的偶数,并用B小数表示。使用的舍入方法为“半舍入到偶数舍入”,也称为无偏舍入,收敛舍入舍入,统计学家舍入,荷兰舍入,高斯舍入,奇偶舍入,银行家舍入或零舍入舍入,并广泛用于簿记中。这是IEEE 754计算函数和运算符中使用的默认舍入模式。在德国,它通常被称为“ Mathematisches Runden”。 | A and B |
STDROUND( A ) | 将A舍入到最接近的整数。使用的舍入方法是“从零开始舍入一半”,也称为标准或通用舍入。在德国,它被称为“kaufmännischeRundung”(在DIN 1333中定义)。 | A |
STDROUND( A, B ) | 与STDROUND(A)中使用的舍入方法相同,但十进制为B。 | A and B |
CEIL( A ) | 上限函数将数字映射到后面的最小整数。 | A |
FLOOR( A ) | 底函数将数字映射到最大的先前整数。 | A |
NVL( A, B ) | 如果A不为NULL,则返回A,否则返回B。请注意,有时您的变量将不是null而是空字符串。 | A and B |
Date A + B days | 在日期字段A中添加B天。 | A and B |
Year of date A | 计算日期字段A的年份。 | A |
Month of date A | 计算日期字段A的月份。 | A |
Day of year of date A | 计算日期A在一年中的某天(1-365)。 | A |
Day of month of date A | 计算日期A在一个月中的某天(1-31)。 | A |
Day of week of date A | 计算星期几(1-7)。 | A |
Week of year of date A | 计算一年中的星期(1-54)。 | A |
ISO8601 Week of year of date A | 计算一年中的星期ISO8601样式(1-53)。 | A |
ISO8601 Year of date A | 计算年份ISO8601样式。 | A |
Byte to hex encode of string A | 将字符串中的字节编码为十六进制表示形式。 | A |
Hex encode of string A | 以自己的十六进制表示形式编码字符串。 | A |
Char to hex encode of string A | 将字符串中的字符编码为十六进制表示形式。 | A |
Hex decode of string A | 从其十六进制表示形式解码字符串(当A为奇数长度时,添加前导0)。 | A |
Checksum of a file A using CRC-32 | 使用CRC-32计算文件的校验和。 | A |
Checksum of a file A using Adler-32 | 使用Adler-32计算文件的校验和。 | A |
Checksum of a file A using MD5 | 使用MD5计算文件的校验和。 | A |
Checksum of a file A using SHA-1 | 使用SHA-1计算文件的校验和。 | A |
Levenshtein Distance (Source A and Target B) | 计算Levenshtein距离:http://en.wikipedia.org/wiki/Levenshtein_distance | A and B |
Metaphone of A (Phonetics) | 计算单词A的变音位(语音学),用于将单词按照英文发音进行索引。详见:http : //en.wikipedia.org/wiki/Metaphone | A |
Double metaphone of A | 计算A的双重音位:http : //en.wikipedia.org/wiki/Double_Metaphone | A |
Absolute value ABS(A) | 计算A的绝对值。 | A |
Remove time from a date A | 删除A的时间值。 | A |
Date A - Date B (in days) | 计算A日期字段和B日期字段之间的天数差异。 | A and B |
A + B + C | A加B加C。 | A, B, and C |
First letter of each word of a string A in capital | 转换字符串中每个单词的第一个字母。 | A |
UpperCase of a string A | 将字符串转换为大写。 | A |
LowerCase of a string A | 将字符串转换为小写。 | A |
Mask XML content from string A | 转义XML内容;用&value替换字符。 | A |
Protect (CDATA) XML content from string A | 指示XML字符串是常规字符数据,而不是非字符数据或具有更特定的受限结构的字符数据。给定的字符串将包含在<![CDATA [String]]>中。 | A |
Remove CR from a string A | 从字符串中删除回车符。 | A |
Remove LF from a string A | 从字符串中删除换行符。 | A |
Remove CRLF from a string A | 从字符串中删除回车符/换行符。 | A |
Remove TAB from a string A | 从字符串中删除制表符。 | A |
Return only digits from string A | 仅输出仅输出字符串中的数字(0-9)。 | A |
Remove digits from string A | 从字符串中删除所有数字(0-9)。 | A |
Return the length of a string A | 返回字符串的长度。 | A |
Load file content in binary | 将给定文件的内容(在字段A中)加载为二进制数据类型(例如图片)。 | A |
Add time B to date A | 将时间添加到日期,将日期和时间作为一个值返回。 | A and B |
Quarter of date A | 返回日期的四分之一(1到4)。 | A |
variable substitution in string A | 将变量替换为字符串。 | A |
Unescape XML content | 从字符串取消转义XML内容。 | A |
Escape HTML content | 在字符串中转义HTML。 | A |
Unescape HTML content | 在字符串中取消转义HTML。 | A |
Escape SQL content | 转义字符串中的字符以适合传递给SQL查询。 | A |
Date A - Date B (working days) | 计算日期字段A和日期字段B之间的差异(仅工作日为星期一至星期五)。 | A and B |
Date A + B Months | 在日期字段A中添加B个月。 | A |
Check if an XML file A is well formed | 验证XML文件输入。 | A |
Check if an XML string A is well formed | 验证XML字符串输入。 | A |
Get encoding of file A | 猜测给定文件的最佳编码(UTF-8)。 | A |
Dameraulevenshtein distance between String A and String B | 计算字符串之间的Dameraulevenshtein距离:http : //en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance | A and B |
NeedlemanWunsch distance between String A and String B | 计算字符串之间的NeedlemanWunsch距离:http : //en.wikipedia.org/wiki/Needleman%E2%80%93Wunsch_algorithm | A and B |
Jaro similitude between String A and String B | 返回两个字符串之间的Jaro相似系数。 | A and B |
JaroWinkler similitude between String A and String B | 返回两个字符串之间的Jaro相似系数:http : //en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance | A and B |
SoundEx of String A | 将字符串编码为Soundex值。 | A |
RefinedSoundEx of String A | 检索给定字符串对象的RefinedSoundEx代码。注意:Metaphone,Double Metaphone, Soundex和RefinedSoundEx:这些算法都是利用单词的发音来做匹配,也称为语音算法。这些语音算法的缺点是以英语为基础,所以基本不能用于法语,西班牙语,荷兰语等其他语种。 | A |
Date A + B Hours | 在日期字段A中添加B小时 | A and B |
Date A + B Minutes | 在日期字段A中添加B分钟 | A and B |
Date A - Date B (milliseconds) | 从日期字段A减去B毫秒 | A and B |
Date A - Date B (seconds) | 从日期字段A减去B秒 | A and B |
Date A - Date B (minutes) | 从日期字段A减去B分钟 | A and B |
Date A - Date B (hours) | 从日期字段A中减去B小时 | A and B |
Hour of Day of Date A | 提取给定日期的小时部分 | A |
Minute of Hour of Date A | 提取给定日期的分钟部分 | A |
Second of Hour of Date A | 提取给定日期的秒部分 | A |
这里我们演示一个简单的示例,我们现在有一张商品表
此时我们想算出每种商品进货的总金额(数量*价格
),并输出到文本中,具体操作如下,先拖拽控件,建连接,如下图:
双击计算器组件,进入配置页面,如下图:
最后我们启动执行一下,看一下结果,如下图:
剪切字符串组件
剪切字符串,就是将一个字符串中的一部分单独拿出来,比如我们想要获取姓名
中姓
,就可以使用该操作,示例如下,我们老规矩,先拖拽控件,建链接,如下图:
双击剪切字符串
组件进行配置,如下图:
最后我们启动执行一下,看一下结果,如下图:
字符串替换组件
字符串替换,就是替换字符串中的内容,比如我们有一张用户表,信息如下:
我们想要将姓名中的呀,都去掉,操作如下,老规矩,先拖拽控件,建链接,如下图:
双击字符串替换
组件进行配置,如下图:
最后我们启动执行一下,看一下结果,如下图:
字符串操作组件
字符串操作组件,主要为两类操作即:去除空格,和大小写,假如我们有一张用户表,信息如下:
有的名字左右有空格,大小写也规范,此时我们想把他们统一了,具体操作如下,老规矩,先拖拽控件,建链接,如下图:
双击字符串操作
组件进行配置,如下图:
最后我们启动执行一下,看一下结果,如下图:
去除重复记录与排序记录组件
该组件的作用就是去掉重复的记录,排序组件就是对数据进行排序,为什么我们要把它们放在一起讲呢,是因为,去除重复记录之前需要先排序,此时我们有一张用户表,数据如下:
由于没有设置主键,有很多重复的数据,此时我们想要查看有多人,要求去重后,输出到文本文件,具体操作如下,老规矩,先拖拽控件,建链接,如下图:
我们双击排序记录
组件,进入配置界面
然后我们双击去除重复记录
组件,进入配置界面,如下图:
最后我们启动执行一下,看一下结果,如下图:
唯一行(哈希值)组件
唯一行(哈希值)组件
,与去除重复记录
组件的作用都是一样的,都是去重行,但是两者实现的原理不一样,唯一行(哈希值)组件
的效率要高一些,我们还是以刚才的数据为例,使用唯一行(哈希值)组件
进行去重,使用该组件去重时,不需要结合排序组件
使用,具体操作如下,老规矩,先拖拽控件,建链接,如下图:
我们双击唯一行(哈希值)
组件,进入配置界面,如下图:
最后我们启动执行一下,看一下结果,如下图:
拆分字段组件
所谓拆分字段组件,就是将一个字段的值,拆分成多个字段
,比如把姓名
拆分姓
和名
,具体操作如下,老规矩,先拖拽控件,建链接,如下图:
我们双击拆分字段
组件,进入配置界面,如下图:
最后我们启动执行一下,看一下结果,如下图:
列拆分多行组件
该组件就是把某个字段拆分成多行数据,比如有一个人喜欢很多水果,我们可以把它喜欢的每一种水果拆分成一条数据,比如我们有一张表用户表,数据如下:
每个人喜欢多个水果,我们把每个人喜欢的每一种水果都拆分成一条记录,步骤如下,老规矩,先拖拽控件,建链接,如下图:
我们双击列拆分为多行
组件,进入配置界面,如下图:
最后我们启动执行一下,看一下结果,如下图:
列转行组件
列转行组件,就是如果数据一列有相同的值,按照指定的字段,就把多行数据转换为一行数据,原来的列名去掉,将指定的列变成新的列,可能有点绕,举个例子,有一张选课表,记录了各位同学的选课情况,如下图:
上面一共是有八条记录,由于语文、数学、英语、体育,是大家都要填的,此时我们想把这几个行数据,转换成字段,也就是如下图:
这样由于字段的增加,数据行数就减少了,具体我们该如何实现呢,由于在使用列转行组件时需要提前排序才行,所以我们的流程如下图:
这里我们重点讲解列列转行组件
,双击该组件,进入配置页面,如下图:
最后我们启动执行一下,看一下结果,如下图:
行转列组件
行转列,与上面的列转行相反,也就是将下面的数据
通过行转列,转换成这样
具体操作如下,流程如下图:
这里我们重点讲解列行转列控件
,双击该组件,进入配置页面,如下图:
最后我们启动执行一下,看一下结果,如下图:
行扁平化组件
所谓行扁平化就是把同一组的多行数据,合并称为一行,只有同类数据行记录一致,才能使用,感觉和列转行组件的作用差不多
,行扁平化数据也需要排序,否则结果会不准确,我们看下示例,原始数据如下:
我们看下行扁平化的效果,流程图如下:
这里我们重点讲解列行扁平化组件
,双击该组件,进入配置页面,如下图:
最后我们启动执行一下,看一下结果,如下图:
结尾
本期的内容就到这里了,如有不足之处还请大家多多指正,欢迎大家留言、关注、转发、收藏,谢谢。