将不同的元数据发送到不同的目标流 - PDI

时间:2015-04-07 22:19:33

标签: pentaho kettle pdi

我有两个目标流(匹配和不匹配),定义如下:

@Override
public StepIOMetaInterface getStepIOMeta() {

    StepMeta stepMeta = new StepMeta();


    if (ioMeta == null) {
        ioMeta = new StepIOMeta(true, false, false, false, false, true);

        StreamInterface matchStream = new Stream(StreamType.TARGET, null, "Matches", StreamIcon.TARGET, null);
        StreamInterface mismatchStream = new Stream(StreamType.TARGET, null, "Mismatches", StreamIcon.TARGET, null);

        ioMeta.addStream(matchStream);
        ioMeta.addStream(mismatchStream);

    }

    return ioMeta;
}

我想向这两个目标发送不同的元数据。从先前步骤接收元数据。对于匹配,它需要是两个输入流的串联以及仅与第一个输入流不匹配。

我被困在如何为两个目标流分别定义元数据。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

 List<StreamInterface> targets=getStepIOMeta().getTargetStreams();    
      List<StreamInterface> infos=getStepIOMeta().getInfoStreams();   
       if ( info != null ) 
     {
           if(targets!=null)
            {

if(nextStep.getName().equals(targets.get(0).getStepname()))  
                    {
                        if ( info != null ) {  
                              for ( int i = 0; i < info.length; i++ ) {  
                                if ( info[i] != null ) {  
                                  r.mergeRowMeta( info[i] );  
                                }
                              }
                            }
                    }
                    if(nextStep.getName().equals(targets.get(1).getStepname()))
                    {
                        if ( info != null ) {  
                              if ( info.length > 0 && info[0] != null ) {   
                                r.mergeRowMeta( info[0] );  
                              }   
                            }  
                    }
                    if(nextStep.getName().equals(targets.get(2).getStepname()))
                    {
                        if ( info != null ) {
                              if ( info.length > 0 && info[0] != null ) {
                                r.mergeRowMeta( info[1] );
                              }
                            }  
                    }

            }