目录
一.记录集连接
1.简单介绍
记录集连接是将具有相同关键字字段的两个记录表进行合并。
案例:某年级的月考成绩分散在“月考语文成绩.xls”“月考英语成绩.xls”两个文件中, 为了统计学生考试成绩的总分,需要使用记录集连接组件,将成绩数据合并在一 起,并计算出总分。
2.建立转换并添加控件
“语文成绩”,“英语成绩”控件位Excel输入控件,“语文成绩排序”和“英语成绩排序”为
排序记录控件。
3.配置各控件
(1)双击进入语文成绩控件,点击浏览找到“月考语文成绩.xls”“月考英语成绩.xls”两个 文件,并点击增加,具体如下图。
点击工作表,添加工作表,用于浏览数据,具体如下
点击字段,获取字段,具体如下
预览数据
(2)英语成绩控件和语文成绩控件的具体配置一样,这里不再做演示。
(3)双击进入语文成绩排序控件,按照学号将数据进行升序排序,具体配置如下。
(4)英语成绩排序和语文成绩排序配置一样,再不做演示。
(5)双击进入记录集连接控件,具体配置如下。
(6)计算器控件,双击进入,添加一个新字段“totle”,计算公式选择"A+B",字段A设置为
语文,字段B设置为英语,值类型设置为Number,具体如下。
(7)字段选择控件,双击进入,添加如下字段,具体如下图。
到这里控件配置结束!!
4.保存运行
从上图可以清楚看到,它合并了语文成绩和英语成绩,并计算出了总分。
二.多路数据合并连接
1.简单介绍
记录集连接是两个记录集的合并,而3个及以上的记录集,采用多路数据合并连接的方式。多路数据合并连接英文名称为Multiway merge join,是对多个记录集的合并,效率更高,速度更快。
案例:由于某次月考成绩分散在“月考语文成绩.xls”“月考英语成绩.xls”“月考数学成绩.xls”3个文件中,为了统计学生语数英的考试分数,需要使用多路数据合并连接组件,合并这3个文件的成绩数据,并计算总分。
2.建立转换并添加控件
“语文成绩”,“英语成绩”,“数学成绩”控件为Excel输入控件,“语文成绩排序”,“英语成绩排序”,"数学成绩排序"为排序记录控件,“多数据合并”控件为Multiway merge join控件。
3.配置各控件
(1)“语文成绩”,“英语成绩”,“数学成绩”三个控件的配置和记录集连接中的配置是一样
一样的,这里不再演示。
(2)“语文成绩排序”,“英语成绩排序”,"数学成绩排序"三个控件的配置和记录集连接中
的配置是一样的,这里不再演示。
(3)多数据合并控件,双击【Multiway merge join】组件,弹出【Multiway merge join
】对话框,进行参数设置,【Input Step1】参数设置为“语文成绩排序”,同一行的【Join
Keys】参数设置为“学号”。也可以单击同一行【Select Keys】按钮,弹出【Join keys】对话
框,在【Keys】表中的第1行,单击【Key Field】下的第一个输入框,在下拉框中选择“学
号”,单击【确定(O)】按钮,添加“学号”字段名称至【Join Keys】参数中,如图所示。
【Multiway merge join】组件的参数包含【Step name】组件名称、Input StepN
(N=1,2,3,…)输入组件名称、【Join Keys】连接关键字(Input StepN与【Join Keys】参
数需两两配对)和【Join Type】连接类型参数。有关参数说明如表所示。
参数名称 | 说明 |
Step name | 表示多路数据合并连接组件名称,在单个转换工程中,名称必须唯一。默认值是【Multiway merge join】的组件名称 |
Input StepN | 表示合并连接的第N(N=1,2,3,4,…)个输入组件的名称,在下拉框中选择输入组件名称。默认值为空 |
Join Keys | 表示对应所在行Input StepN输入组件的连接关键字段。单击所在行的【Select Keys】按钮,在弹出的对话框中选择字段名称。默认值为空 |
Join Type | 表示多个源数据表的连接类型。在下拉框中选择连接类型,默认值为INNER。连接类型如下 FULL OUTER:连接结果包含来自多个数据源表的所有记录,而不匹配的记录,字段值被系统设为空(null) INNER:只有在多个源数据表中具有相同关键字段值的记录才会包含在连接结果中(内连接) |
(4)计算器控件,双击进入,添加一个新字段“totle”,计算公式选择"A+B+C",字段A设置
为数学,字段B设置为英语,字段C设置为语文,值类型设置为Number,具体如下。
(5)字段选择控件,双击进入,添加如下字段,具体如下图。
(6)排序记录控件,对过滤后的数据按照学号进行一个升序,具体如下。
4.保存运行
三.单变量统计
1.简单介绍
单变量统计是对数据进行单个变量的数据统计,以字段为单变量,可以分别对多个字段进行数据统计,统计类型有N(统计数量)、最小值、最大值、平均值、样本标准差、中位数和任意百分位数等。
案例:在“2018年上学期期末考试成绩.xls”文件中,为了了解学生考试的统计数据,对语文和数学两门主科进行数据统计,使用单变量统计组件,分别统计学生的考试人数、最低分、最高分、平均分和中位数等。
2.建立转换并添加控件
3.配置各控件
(1)Excel输入控件再上面的案例中都已经介绍,在这里不再演示,只给出获取字段部分。
(2)单变量统计控件,双击进入控件,具体配置如下。
【单变量统计】组件的参数包含组件的基础参数和【Input fields andderived stats】参数,有关参数说明如表所示。
参数名称 | 说明 | |
基础参数 | Step name | 表示单变量统计组件名称,在单个转换工程中,名称必须唯一。默认值是【单变量统计】组件名称 |
Input fields andderived stats | Input field | 表示进行统计的字段名称,单击下拉框选择字段名称,默认值为空 |
N | 表示是否统计字段记录数量,从下拉框中选择,选项有true、false,默认值为空 | |
Mean | 表示是否统计字段的均值,选项有true、false,默认值为空 | |
Std dev | 表示是否统计数值字段的standard deviation标准差,选项有true、false,默认值为空 | |
Min | 表示是否统计数值字段的最小值,选项有true、false,默认值为空 | |
Max | 表示是否统计数值字段的最大值,选项有true、false,默认值为空 | |
Median | 表示是否统计数值字段的中位数,选项有true、false,默认值为空 | |
Percentile | 表示数值字段百分位数,默认值为空 | |
Interpolate percentile | 表示是否统计数值字段的插入百分位数,选项有true、false,默认值为空 |
4.保存运行
四.公式
1.简单介绍
公式是用来计算数据流中数据的表达式。公式可以是“A+B”这样的简单计算,也可以是类似“if/then”复杂业务逻辑判断的表达式。
案例:在某年级的“2019年11月月考成绩.xls”文件中,为了统计成绩以表彰优秀的学生,需要使用公式组件,统计学生所有考试
科目的总分,并对总分650分以上的学生评优标注“优秀”。
2.建立转换并添加控件
3.配置各控件
(1)Excel输入控件再上面的案例中都已经介绍,在这里不再演示,只给出获取字段部分。
(2)公式控件:双击进入控件,在公式框中编辑公式(点击公式框,会弹出如下窗口),具体如下。
【公式】组件的参数包含组件的基础参数和【字段】表参数,有关参数说明如表所示。
参数名称 | 说明 | |
基础参数 | 步骤名称 | 表示公式组件名称,在单个转换工程中,名称必须唯一。默认值是【公式】组件名称 |
字段 | 新字段 | 表示新增加的字段名称。默认值为空 |
公式 | 表示计算公式,单击单元格时,系统打开公式编辑器窗口,提供可用函数的帮助,方便用户编辑计算公式。默认值为空 | |
值类型 | 表示字段的数据类型。类型选项有:BigNumber、Binary、Boolean、Date、Integer、Internet Address、Number、String、Timestamp。默认值为空 | |
长度 | 表示字段长度。默认值为空 | |
精度 | 表示数字类型字段的浮点数的精确位数。默认值为空 | |
替换值 | 表示字段需要替换值。默认值为空 |
4.保存运行
五.利用Janino计算Java表达式
1.简单介绍
Janino是一个超小型,超快的Java编译器,Kettle可以利用Janino提供类和对象,定义Java表达式来计算新值。
案例:在某年级的“2020年4月月考成绩.xls”文件中,为了了解学生的考试情况,需要采用利用Janino计算Java表达式组件,统计每个学生月考
成绩的总分,并按照四舍五入的方法,计算每个学生的平均分。
2.建立转换并添加控件
3.配置各控件
(1) Excel输入控件再上面的案例中都已经介绍,在这里不再演示,只给出获取字段部分。
(2)利用Janino计算Java表达式控件:双击进入控件,具体配置如下。
4.保存运行
六.JavaScript代码
1.简单介绍
Kettle提供用户界面,可采用JavaScript脚本编程修改数据。
案例:在某年级的“2020年4月月考成绩.xls”文件中,为了了解每个学生考试的总分,需要使用JavaScript代码组件,统计每个学生月考成绩的总分等。
2.建立转换并添加控件
3.配置控件
Excel控件,点击浏览,添加文件,具体如下。
接着点击工作表,进入后,点击下方获取工作表名称,将其添加,具体如下。
点击字段,获取字段,具体如下。
点击预览
Java Script控件,点击进入控件,填写代码和配置下方字段,具体如下
var 总分=0;
for (var i=1;i<getInputRowMeta().size();i++){
var valueMeta= getInputRowMeta().getValueMeta(i);
if (valueMeta.getTypeDesc().equals("Number")) {
总分 =总分 + str2num(row[i]);
}
}
4.点击保存运行
七.设置变量
1.简单介绍
在Kettle中,读者可通过获得系统信息组件获得系统环境变量,也可以通过设置变量,定义虚拟机和任务中的变量。在项目中,经常利用生产环境或外围系统交互的FTP文件接口,获取固定格式的数据文件。
案例:某生产系统每天定时推送名称格式包含yyyyMMdd的数据文件,为了获得日期变量并每天读取由生产系统推送的前两天的数据文件,需要使用设置变量组件,设置名称为fileDate的变量,该变量值需要符合yyyyMMdd格式,取值为当前系统日期的前两天。
2.建立转换并添加控件
3.配置控件
(1)创建获取系统信息组件,定义变量。创建【获取系统信息】组件,设置参数,【字段】设置为“fileDate”,【类型】设置为“今天00:00:00”具体如下
(2)双击【JavaScript代码】组件,编写JavaScript脚本,定义dtNew变量格式为yyyyMMdd,取值为当前日期的前两天,并将dtNew变量名称改名为fileDate。编写代码和设置完成时,【JavaScript代码】参数设置如图所示。
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
var dtNew=new Date(new Date().getTime()-2*24*60*60*1000).Format("yyyyMMdd");
(3)双击进入设置变量控件,设置【Apply formatting】参数。保留【Apply formatting】默认值“√”,设置【字段值】表参数。设置【字段值】表参数,具体如下。
4.保存运行
八.获取变量
1.简单介绍
在Kettle中,获取变量可以获得系统环境变量和用户自定义变量的值。
案例:某生产系统定时每天推送前两天的、名称格式为yyyyMMdd的数据文件,为了获得已设置好的日期变量并每天读取前两天的数据文件,
需要使用获取变量组件,获取5.7小节中用户自定义的fileDate变量。
2.建立转换并添加控件
3.配置控件
双击进入获取变量控件,设置【字段】表参数。设置【字段】表参数,如下图所示,此时完成【获取变量】组件的参数设置。
4.保存运行
九.小结
本章对记录集连接、多路数据合并连接、单变量统计、公式、利用Janino计算Java表达式、JavaScript代码、设置变量和获取变量这8种典型的高级转换组件进行了介绍,阐述了这些组件的使用方法和步骤。
通过任务,从数据准备,到转换组件之间的连接,设置组件参数和浏览转换处理后的数据,都进行详细说明,指出了各个高级转换处理的作用和不同之处,实现了对复杂的数据的转换处理。