Kettle——转换步骤信息统计两种实现

Kettle-步骤数据处理数量记录获取

      Kettle获取数据处理条数记录日志信息:以前的途径是配置转换的日志信息来保存到数据库中,这种方式不是很灵活。

      有没有一种类似步骤方式来进行获取呢?Kettle在5.0版本中提供了一个步骤:在【统计】-【转换步骤信息统计】。

       【转换步骤信息统计】步骤使用方式也很简单,如下图所示:

       
转换步骤信息统计使用截图 
转换步骤信息统计使用截图

       【转换步骤信息统计】点击获取步骤,选择进行步骤信息统计的步骤,若是没有步骤,可以手写指定。右侧图为输出统计信息字段配置(字段名称)

       运行结果:

但是这个步骤无法获取前面步骤的字段,因此进行了修改,使其支持获取前面步骤的相关字段。相关代码参见:https://git.oschina.net/zokapper/Kettle-plugins

另外一种方式:利用【java代码】步骤实现效果,这个和上面的插件原理大致一样。这种方式更灵活(随时改代码),但是缺点也很明显,不如插件方式简单直观,使用起来复杂。如下图所示

自定义Java Class


import org.pentaho.di.trans.*;
import org.pentaho.di.trans.step.*;
import java.util.*;
import org.pentaho.di.i18n.BaseMessages;

private StepInterface previousStep;
private Object[] previousRow;
private Object[] r;
private Date startDate;
private boolean previousStepStatus;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
    Object[] row = getRow();
    if (first)
    {
        init();
        if(row!=null){
            startDate = new Date();
            StepStatus stepStatus = new StepStatus(previousStep);
            r = createOutputRow(row, data.outputRowMeta.size());
            int index = getInputRowMeta().size();
            //父step读取数量
            r[index++]=Long.valueOf(stepStatus.getLinesRead());
            //父step输入数量
            r[index++]=Long.valueOf(stepStatus.getLinesWritten());
            //父step入库数量
            r[index++]=Long.valueOf(stepStatus.getLinesOutput());
            //父step更新数量
            r[index++]=Long.valueOf(stepStatus.getLinesUpdated());
            //父step拒绝数量
            r[index++]=Long.valueOf(stepStatus.getLinesRejected());

            //开始时间
            r[index++] = startDate;
            //结束时间
            //r[index++] = startDate;
            putRow(data.outputRowMeta, r);
        }
        first = false;
    }
    if (row==null) {
        if (previousRow != null) {// no more input to be expected.
            StepStatus stepStatus = new StepStatus(previousStep);
            r = createOutputRow(previousRow, data.outputRowMeta.size());
            int index = getInputRowMeta().size();
            //父step读取数量
            r[index++]=Long.valueOf(stepStatus.getLinesRead());
            //父step输入数量
            r[index++]=Long.valueOf(stepStatus.getLinesWritten());
            //父step入库数量
            r[index++]=Long.valueOf(stepStatus.getLinesOutput());
            //父step更新数量
            r[index++]=Long.valueOf(stepStatus.getLinesUpdated());
            //父step拒绝数量
            r[index++]=Long.valueOf(stepStatus.getLinesRejected());
            //开始时间
            r[index++] = startDate;
            //结束时间
            r[index++] = new Date();
            putRow(data.outputRowMeta, r);
    }
        setOutputDone();
        return false;
    }
    previousRow = row;  
    return true;
}
public void init(){
    //监控步骤的名称
    String previousStepName="ANA_OUT_DAILY";
    Trans trans = getTrans();
    for (int j = 0; j 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值