pentaho/pentaho-kettle · error · KettleException

Field [ ] couldn't be found in the input stream!

Error message

Field [ {0} ] couldn't be found in the input stream!

What it means

In SalesforceUpdate.processRow(), for each configured update stream field, the step looks up its index in the incoming row metadata via getInputRowMeta().indexOfValue(). If a configured field name is not present in the incoming stream (index < 0), it throws a KettleException: 'Field [X] couldn't be found in the input stream!'. This is a hard fail-fast check to prevent sending wrong data to Salesforce.

Solutions

  1. Open the Salesforce Update step and correct the field name in the 'Update stream' column to match the incoming row field exactly (case included).
  2. Inspect the incoming fields (right-click the hop / View input fields) and align the mapping grid.
  3. Add or fix the upstream step (Text File Input, Select Values, etc.) so the field is actually produced.
  4. Use 'Get Fields' in the step dialog to re-populate from the real input stream.

Example fix

// before: mapping references a removed field
updateStream[i] = "cust_id";   // upstream renamed it
// after
updateStream[i] = "customer_id"; // matches upstream field
Defensive patterns

Strategy: validation

Validate before calling

// Verify every configured update field exists in the input row metadata before running
RowMetaInterface input = transMeta.getPrevStepFields(stepMeta);
SalesforceUpdateMeta meta = (SalesforceUpdateMeta) stepMeta.getStepMetaInterface();
for (String field : meta.getUpdateStream()) {
  if (input.indexOfValue(field) < 0) {
    throw new IllegalArgumentException("Field [" + field + "] missing from input stream of "
      + stepMeta.getName());
  }
}

Try / catch

try {
  trans.execute(null);
} catch (KettleException e) {
  if (e.getMessage().contains("couldn't be found in the input stream")) {
    log.error("Mapping references a non-existent field: {}", e.getMessage());
  }
  throw e;
}

Prevention

When it happens

Trigger: Running the step when a field named in the 'Update stream' (or lookup) column of the mapping grid does not exist in the rows arriving on the input hop — renaming/deleting an upstream field, changing field casing, or a Select Values step dropping the field.

Common situations: Upstream step renamed an output field; CSV/text input columns changed; wrong hop connected to the Salesforce Update step; case-sensitive mismatch (Kettle field names are case-sensitive).

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/19f0d6cec168c34f. Report an issue: GitHub.

Appendix: source

Thrown at plugins/salesforce/core/src/main/java/org/pentaho/di/trans/steps/salesforceupdate/SalesforceUpdate.java:94

      // Check if field list is filled
      if ( data.nrfields == 0 ) {
        throw new KettleException( BaseMessages.getString( PKG,
            "SalesforceUpdateDialog.FieldsMissing.DialogMessage" ) );
      }

      // Create the output row meta-data
      data.inputRowMeta = getInputRowMeta().clone();
      data.outputRowMeta = data.inputRowMeta.clone();
      meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
                      metaStore );

      // Build the mapping of input position to field name
      data.fieldnrs = new int[meta.getUpdateStream().length];
      for ( int i = 0; i < meta.getUpdateStream().length; i++ ) {
        data.fieldnrs[i] = getInputRowMeta().indexOfValue( meta.getUpdateStream()[i] );
        if ( data.fieldnrs[i] < 0 ) {
          throw new KettleException( "Field [" + meta.getUpdateStream()[i]
              + "] couldn't be found in the input stream!" );
        }
      }
    }

    try {
      writeToSalesForce( outputRowData );

    } catch ( Exception e ) {
      throw new KettleStepException( BaseMessages.getString( PKG, "SalesforceUpdate.log.Exception" ), e );
    }
    return true;
  }

  @VisibleForTesting
    void writeToSalesForce( Object[] rowData ) throws KettleException {
    try {

View on GitHub (pinned to f3058517a1)