pentaho/pentaho-kettle · error · KettleStepException
Unable to find field [] in the input rows
Error message
Unable to find field [] in the input rows
What it means
Thrown by OraBulkLoaderMeta.getFields() when building the output row layout for the Oracle bulk load. For each mapped field, the step looks up the incoming stream field name via RowMetaInterface.searchValueMeta; if a configured stream field name does not exist in the previous step's row metadata, the mapping is broken and the step fails fast with this message naming the missing field.
Solutions
- Open the OraBulkLoader step dialog and remove or correct the stream field that no longer exists in the input
- Check the upstream step's output fields (right-click > Show output fields) and re-map the field with its new name
- If upstream columns are dynamic, add a 'Select values' step that guarantees the expected field names before the loader
- Re-open and re-save the transformation to rebuild the mapping if it was edited in XML directly
Example fix
// before (mapping references removed field)
fieldStream = new String[] { "cust_id", "cust_nmme" };
// after (name matches upstream Select values output)
fieldStream = new String[] { "cust_id", "cust_name" }; Defensive patterns
Strategy: validation
Validate before calling
// Before executing the transformation, verify mapped stream fields exist:
RowMetaInterface prev = transMeta.getPrevStepFields( stepname );
for ( String f : meta.getFieldStream() ) {
if ( f != null && prev.searchValueMeta( f ) == null ) {
throw new IllegalStateException( "Field not produced upstream: " + f );
}
} Try / catch
try { stepMeta.check( remarks, transMeta, prev, new String[]{stepname}, null, null, null ); } catch ( KettleStepException e ) { log.error( "Broken field mapping: " + e.getMessage() ); } Prevention
- Re-run 'Get fields' in the loader dialog after changing upstream steps
- Avoid renaming upstream fields without updating downstream mappings; use lineage checks
- Use the transformation's Check/verify feature before running
- Keep schemas consistent across environments
When it happens
Trigger: A field listed in fieldStream[] (the 'Field stream' mapping in the OraBulkLoader dialog) is not present in the row metadata coming from the previous transform. Typically the mapping table was built, saved, and the upstream step was later renamed or removed the field.
Common situations: Renaming a field in a Select values / Table input step upstream without updating the OraBulkLoader mapping; running a transformation where an earlier conditionally-skipped step no longer emits the column; copying a transformation between environments with different schemas; hand-editing transformation XML/ktr files.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- Calculator.Error.UnableFindField
- ConcatFields.Error.RemainingFieldNotFoundInputStream
- CreditCardValidator.Exception.CouldnotFindField
- Error adding values to row!
- Field [ ] couldn't be found in the input stream!
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/21b1cd1cbbd01203.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/oracle-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/orabulkloader/OraBulkLoaderMeta.java:772
public SQLStatement getSQLStatements( TransMeta transMeta, StepMeta stepMeta, RowMetaInterface prev,
Repository repository, IMetaStore metaStore ) throws KettleStepException {
SQLStatement retval = new SQLStatement( stepMeta.getName(), databaseMeta, null ); // default: nothing to do!
if ( databaseMeta != null ) {
if ( prev != null && prev.size() > 0 ) {
// Copy the row
RowMetaInterface tableFields = new RowMeta();
// Now change the field names
for ( int i = 0; i < fieldTable.length; i++ ) {
ValueMetaInterface v = prev.searchValueMeta( fieldStream[i] );
if ( v != null ) {
ValueMetaInterface tableField = v.clone();
tableField.setName( fieldTable[i] );
tableFields.addValueMeta( tableField );
} else {
throw new KettleStepException( "Unable to find field [" + fieldStream[i] + "] in the input rows" );
}
}
if ( !Utils.isEmpty( tableName ) ) {
Database db = new Database( loggingObject, databaseMeta );
db.shareVariablesWith( transMeta );
try {
db.connect();
String schemaTable =
databaseMeta.getQuotedSchemaTableCombination(
transMeta.environmentSubstitute( schemaName ), transMeta.environmentSubstitute( tableName ) );
String sql = db.getDDL( schemaTable, tableFields, null, false, null, true );
if ( sql.length() == 0 ) {
retval.setSQL( null );
} else {
retval.setSQL( sql );View on GitHub (pinned to f3058517a1)