先上例子:

kettle 如何使用java代码_第1张图片

kettle 如何使用java代码_第2张图片

kettle 如何使用java代码_第3张图片

kettle 如何使用java代码_第4张图片

这个demo中,Java代码步骤需要重点讲解.

  这其实就是一个用户自定义的类,比自己写一个插件方便多了.

这个类的默认类名叫Processor,默认会导入一些包中的类:

import org.pentaho.di.trans.steps.userdefinedjavaclass.*;

import org.pentaho.di.trans.step.*;

import org.pentaho.di.core.row.*;

import org.pentaho.di.core.*;

import org.pentaho.di.core.exception.*;


//它继承了抽象类:

//org.pentaho.di.trans.steps.userdefinedjavaclass.TransformClassBase

public class Processor extends TransformClassBase{


//处理一个输入行,如果返回true,继续准备处理另一个输入行,如果没有数据处理,则返回false。

public boolean proce***ow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException

{

    // First, get a row from the default input hop

 //它等待前一步骤提供一行数据,会阻塞,返回一个对象数组表示输入行

    Object[] r = getRow();


    // If the row object is null, we are done processing.

    //输入行为null,说明已经没有输入行了,需要处理

    if (r == null) {

      setOutputDone();

      return false;

    }


    // Let's look up parameters only once for performance reason.

    //标识是否是第一行数据

    if (first) {

      first=false;

    }


    // It is always safest to call createOutputRow() to ensure that your output row's Object[] is large

    // enough to handle any new fields you are creating in this step.

    //确认object数组是否能够容纳输出行,如果不够,怎扩容.

    Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());


    //TransformClassBase抽象类的get( Fields type, String name ),返回FieldHelper

    //org.pentaho.di.trans.steps.userdefinedjavaclass.FieldHelper

    String name = get(Fields.In, "name").getString(r);

    Number age = get(Fields.In, "age").getNumber(r);

    String outValue=name+age;


    get(Fields.Out, "out").setValue(outputRow, outValue);


    // putRow will send the row on to the default output hop.

    //将输出数据传输到下一步,会阻塞

    putRow(data.outputRowMeta, outputRow);


    return true;

}

 

}


注意点:

1.get(Fields.In, "name") 这个"name"从前一个步骤获取,也可以在这个步骤下方的参数中设置,标签设置为任意名称,如:xx,值就填上name,这样就可以将代码改为get(Fields.In,xx);

2.get(Fields.Out, "out") 这个"out"就是下方的字段中设置的out.

3.其实输入输出字段名都可以在下方的参数设置.用getParameter("name")获取到name的值.