kettle高级转换

一,记录集连接

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】连接类型参数。

(4)计算器控件,双击进入,添加一个新字段“totle”,计算公式选择"A+B+C",字段A设置

           为数学,字段B设置为英语,字段C设置为语文,值类型设置为Number,具体如下。

   (5)字段选择控件,双击进入,添加如下字段,具体如下图。

  (6)排序记录控件,对过滤后的数据按照学号进行一个升序,具体如下。

 4.保存运行

 三,单变量统计

 1.简单介绍
                单变量统计是对数据进行单个变量的数据统计,以字段为单变量,可以分别对多个字段进行数据统计,统计类型有N(统计数量)、最小值、最大值、平均值、样本标准差、中位数和任意百分位数等。

                案例:在“2018年上学期期末考试成绩.xls”文件中,为了了解学生考试的统计数据,对语文和数学两门主科进行数据统计,使用单变量统计组件,分别统计学生的考试人数、最低分、最高分、平均分和中位数等。

 2.建立转换并添加控件

 

3.配置各控件

  (1)Excel输入控件再上面的案例中都已经介绍,在这里不再演示,只给出获取字段部分。

 (2)单变量统计控件,双击进入控件,具体配置如下。

 

四.公式      
        1.简单介绍
                公式是用来计算数据流中数据的表达式。公式可以是“A+B”这样的简单计算,也可以是类似“if/then”复杂业务逻辑判断的表达式。

案例:在某年级的“2019年11月月考成绩.xls”文件中,为了统计成绩以表彰优秀的学生,需要使用公式组件,统计学生所有考试科目的总分,并对总分650分以上的学生评优标注“优秀”。

        2.建立转换并添加控件

 

3.配置各控件

                (1)Excel输入控件再上面的案例中都已经介绍,在这里不再演示,只给出获取字段部分。

 (2)公式控件:双击进入控件,在公式框中编辑公式(点击公式框,会弹出如下窗口),具体如下。

 

 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.保存运行

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值