前言
通过kettle开发过程中,需要通过动态添加新的数据行来为后面的任务做处理。
解决思路
通过owDataUtil.createResizedCopy复制kettle的Row对象,再通过putRow()方法输出出去。
核心逻辑就是每次输出前复制一个r,利用复制的r进行输出就可以得到每次修改后输出的结果了。
示例:
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
if (first) {
first = false;
}
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
r = createOutputRow(r, data.outputRowMeta.size());
String test = get(Fields.In, "test").getString(r);
String[] split = test.split(",");
for(String s : split){
//使用RowDataUtil.createResizedCopy复制r对象,利用复制的对象进行行输出
Object[] newRow = RowDataUtil.createResizedCopy(r, data.outputRowMeta.size());
get(Fields.Out, "test").setValue(newRow, s);
putRow(data.outputRowMeta, newRow);
}
return true;
}引用
本文引用自博客:kettle - 使用java代码新增行


Comments | NOTHING