先上例子:

be4bf9d59791da708e5538b356bf46e0.png

75e2c1bdc77a97a406edd07aa1cc3b77.png

3da86f421fceaa10f19a5fa1e35b8fe1.png

61ffd82da103c8e921855b9b9a95e6c5.png

这个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的值.

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐