kettle processRow

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { 
  
    meta = (LookupStepMeta) smi; 
    data = (LookupStepData) sdi; 
  
    Object[] r = getRow(); // get row, blocks when needed! 
    if (r == null) // no more input to be expected... 
    { 
        setOutputDone(); 
        return false; 
    } 
  
    if (first) { 
          
        first = false; 
          
        // the size of the incoming rows  
        data.inputSize = getInputRowMeta().size(); 
          
        // determine output field structure 
        data.outputRowMeta = (RowMetaInterface) getInputRowMeta().clone(); 
        meta.getFields(data.outputRowMeta, getStepname(), null, null, this); 
          
        // stores default values in correct format 
        data.defaultObjects = new Object[meta.getKeyField().length]; 
  
        // stores the indices where to look for the key fields in the input rows 
        data.keyFieldIndex = new int[meta.getKeyField().length]; 
        data.conversionMeta = new ValueMetaInterface[meta.getKeyField().length]; 
  
          
        for (int i=0;i<meta.getKeyField().length;i++){ 
              
            // get output and from-string conversion format for each field 
            ValueMetaInterface returnMeta = data.outputRowMeta.getValueMeta(i+data.inputSize); 
              
            ValueMetaInterface conversionMeta = returnMeta.clone(); 
            conversionMeta.setType(ValueMetaInterface.TYPE_STRING); 
            data.conversionMeta[i] = conversionMeta; 
  
            // calculate default values 
            if (!Const.isEmpty(meta.getOutputDefault()[i])){ 
                data.defaultObjects[i] = returnMeta.convertData(data.conversionMeta[i], meta.getOutputDefault()[i]); 
            } 
            else{ 
                data.defaultObjects[i] = null; 
            } 
              
            // calc key field indices 
            data.keyFieldIndex[i] = data.outputRowMeta.indexOfValue(meta.getKeyField()[i]); 
            if (data.keyFieldIndex[i]<0) 
            { 
                throw new KettleStepException(BaseMessages.getString(PKG, "VoldemortStep.Error.UnableFindField",meta.getKeyField()[i],""+(i+1))); 
            } 
              
        } 
  
    } 
      
    // generate output row, make it correct size 
    Object[] outputRow = RowDataUtil.resizeArray(r, data.outputRowMeta.size()); 
      
    // fill the output fields with look up data 
    for (int i = 0, outi=data.inputSize;i<meta.getKeyField().length;outi++, i++){ 
          
        // try to get the value from voldemort 
        String value = data.voldemortClient.getValue(r[data.keyFieldIndex[i]]); 
  
        // if nothing is there, return the default 
        if (value == null){ 
            outputRow[outi] = data.defaultObjects[i];    
        } 
        // else convert the value to desired format 
        else{ 
            outputRow[outi] = data.outputRowMeta.getValueMeta(outi).convertData(data.conversionMeta[i], value);  
        } 
          
    } 
  
    // copy row to possible alternate rowset(s) 
    putRow(data.outputRowMeta, outputRow);  
  
    // Some basic logging 
    if (checkFeedback(getLinesRead())) { 
        if (log.isBasic()) logBasic("Linenr " + getLinesRead());  
    } 
  
    return true; 
}

 

http://type-exit.org/adventures-with-open-source-bi/2010/06/developing-a-custom-kettle-plugin-looking-up-values-in-voldemort/

转载于:https://www.cnblogs.com/ming-311/p/3820748.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值