一、建立利用Janino计算Java表达式转换工程
建立利用Janino计算Java表达式转换工程步骤如下。 (1) 创建利用Janino计算Java表达式转换工程。使用Ctrl+N快捷键,创建【利用Janino计算Java表达式】转换工程。 (2) 创建Excel输入组件和导入数据。创建【Excel输入】组件,如图所示,设置参数,导入“2020年4月月考成绩.xls”文件。(3) 预览考试成绩数据。单击工作区上方的 图标,预览学生考试成绩数据如图所示,在当前源数据中,只有各科课程的分数,没有统计总分和平均分。 (4) 创建【利用Janino计算Java表达式】组件和连接。在【利用Janino计算Java表达式】转换工程中,单击【核心对象】选项卡,单击展开【脚本】对象,选中【利用Janino计算Java表达式】组件,并拖曳到右边工作区中。由【Excel输入】组件指向【利用Janino计算Java表达式】组件,建立节点连接,双击【利用Janino计算Java表达式】组件,弹出【User defined Java expression】对话框,在【User defined Java expression】对话框中,设置参数,编辑Java表达式,统计学生各科考试成绩总分,并按照四舍五入计算平均分,分别保存在“总分”“平均分”字段中,步骤如下。
(1) 设置组件名称。保留【步骤名称】默认值“利用Janino计算Java表达式”。 (2) 设置字段参数。在【Fields】表中设置参数,如图所示,此时完成【利用Janino计算Java表达式】组件的参数设置。
在【利用Janino计算Java表达式】转换工程中,单击【利用Janino计算Java表达式】组件,再单击工作区上方的 图标。预览执行利用Janino计算Java表达式后的结果数据,如图所示。
二、建立JavaScript代码转换工程
建立JavaScript代码转换工程步骤如下。 (1) 创建JavaScript代码转换工程。使用Ctrl+N快捷键,创建【JavaScript代码】转换工程。 (2) 创建Excel输入组件并导入数据。创建【Excel输入】组件,如图所示,设置参数,导入“2020年4月月考成绩.xls”文件,并设置好字段参数,学生各科成绩字段设置为数值型。(3) 预览考试成绩数据。单击工作区上方的 图标。预览学生各科成绩数据,如图所示,当前源数据中,只有各科课程的分数,没有统计总分。
(4) 在【JavaScript代码】转换工程中,单击【核心对象】选项卡,单击展开【脚本】对象,选中【JavaScript代码】组件,并拖曳到右边工作区中。由【Excel输入】组件指向【JavaScript代码】组件,建立节点连接,双击【JavaScript代码】组件,弹出【JavaScript代码】对话框,在图【JavaScript代码】对话框中,设置参数,编辑JavaScript脚本,统计学生各科考试成绩总分,并保存在“总分”字段中。 (1) 设置组件名称。保留【步骤名称】默认值“JavaScript代码”。(2) 编辑JavaScript脚本。在【JavaScript】编辑区中,编辑JavaScript脚本如下。
var 总分=0;
for (var i=0;i<getInputRowMeta().size();i++){
var valueMeta= getInputRowMeta().getValueMeta(i);
if (valueMeta.getTypeDesc().equals("Number")) {
总分 =总分 + str2num(row[i]);
}
}
(3) 在【字段】表中,设置【总分】字段参数,如图所示,此时完成【JavaScript代码】组件的参数设置。在【JavaScript代码】转换工程中,单击【JavaScript代码】组件,再单击工作区上方的 图标。预览执行JavaScript代码后的数据,如图所示。
三、建立设置变量转换工程
某生产系统定时每天推送前两天的、名称格式为yyyyMMdd(y指的是年,M指的是月,d指的是日,例如20200320)数据文件,例如20200320.csv。自定义fileDate变量,取值符合yyyyMMdd格式,随着日期改变,取值为当前日期的前两天,例如,今天为2020年3月24日,则fileDate取值为“20200322”。 建立设置变量转换工程步骤如下。
(1) 创建设置变量转换工程。使用Ctrl+N快捷键,创建【设置变量】转换工程。 (2) 创建获取系统信息组件,定义变量。创建【获取系统信息】组件,设置参数,【字段】设置为“fileDate”,【类型】设置为“今天00:00:00”。(3) 创建JavaScript代码组件,定义变量格式。创建【JavaScript代码】组件,如图所示。
双击【JavaScript代码】组件,编写JavaScript脚本,定义dtNew变量格式为yyyyMMdd,取值为当前日期的前两天,并将dtNew变量名称改名为fileDate。编写代码和设置完成时,【JavaScript代码】参数设置如图所示。
双击【设置变量】组件,弹出【设置环境变量】对话框,需要注意,由于所有的组件都是并行运行的,所以不能在同一转换工程中既设置变量又使用该变量。 在【设置环境变量】对话框中,设置参数,将fileDate变量的变量活动类型设置为在这个虚拟机中均有效。
(1) 设置组件名称。保留【步骤名称】默认值“设置变量”。 (2) 设置【Apply formatting】参数。保留【Apply formatting】默认值“√”。(3) 设置【字段值】表参数。设置【字段值】表参数,如图所示,此时完成【设置变量】组件的参数设置。在【设置变量】转换工程中,单击【设置变量】组件。
运行转换
四、获取变量
在Kettle中,获取变量可以获得系统环境变量和用户自定义变量的值。 某生产系统定时每天推送前两天的、名称格式为yyyyMMdd的数据文件,为了获得已设置好的日期变量并每天读取前两天的数据文件,需要使用获取变量组件,获取5.7小节中用户自定义的fileDate变量。
(1) 建立【获取变量】转换建立获取变量转换工程获取用户自定义的fileDate变量,操作步骤如下。
(1) 创建获取变量转换工程。使用Ctrl+N快捷键,创建【获取变量】转换工程。 (2) 在【获取变量】转换工程中,单击【核心对象】选项卡,单击展开【作业】对象,选中【获取变量】组件,并拖曳到右边工作区中,如图所示。工程。 (2) 设置【获取变量】参数。 (3) 预览结果数据。在【获得变量】对话框中,设置参数,获取fileDate变量。 (1) 设置组件名称。保留【步骤名称】默认值“获取变量”。 (2) 设置【字段】表参数。设置【字段】表参数,如图所示,此时完成【获取变量】组件的参数设置。