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 

### Kettle工具中的步骤错误处理方法及配置指南 在Kettle(也称为Pentaho Data Integration, PDI)中,步骤错误处理是一个重要的功能,用于确保数据流的稳定性和可靠性。以下是关于如何在Kettle实现错误处理的具体方法和配置指南: #### 错误处理的核心机制 Kettle提供了两种主要的方式来进行错误处理:通过跳过错误继续执行以及将错误记录到特定的目标表或日志文件中。这些方式可以通过设置步骤属性来完成。 1. **启用错误跳过模式** 在某些情况下,可能希望忽略个别步骤中的错误而让整个流程继续运行。这可以由“Error Handling”选项控制,在具体步骤的高级设置中找到该选项[^1]。 2. **定义错误输出目标** 如果需要捕获错误以便后续分析,则可以在步骤的“Error handling”部分指定一个目标步骤作为错误记录的目的地。此目的地通常会保存有关失败的数据行及其对应的错误消息的信息。 #### 配置步骤以支持错误处理 为了使某个步骤能够报告其发生的任何问题,必须对其进行适当配置: - 打开相关联的转换步骤编辑窗口; - 转至“Advanced”标签页下的“Error Handling”区域; - 勾选允许发送错误标记给其他组件的功能框; - 设置最大容忍度数值——即当达到多少次失误之后停止进一步操作;同时还可以设定最小百分比阈值触发终止条件。 #### 实际应用案例 下面展示了一个简单的例子,说明如果某字段缺失或者格式不匹配时该如何处置: ```kettle // 步骤A (Source Table Input): 提取原始资料 // 步骤B (Modified Java Script Value): 尝试解析日期字符串为标准形式 if (!isEmpty(row["date_string"])) { try{ var parsedDate = parseToDate(row["date_string"], "yyyy-MM-dd"); row["parsed_date"] = parsedDate; } catch(e){ errors++; putError(getRow(), e.toString()); } } ``` 以上脚本片段展示了利用JavaScript自定义逻辑检测潜在异常情况,并调用`putError()`函数向下游传递相关信息。 #### 数据验证与清理建议 除了内置的支持外,还应考虑实施额外的质量保障措施,比如预加载前清洗输入源、采用正则表达式过滤非法字符组合等等。这样不仅可以减少实际迁移过程中遭遇的技术障碍,而且有助于提升最终成果的一致性水平。 ---
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值