{"record":{"id":"a1cfb7d69577e638","repo":"pentaho/pentaho-kettle","slug":"could-not-find-field-in-stream","errorCode":null,"errorMessage":"Could not find field  in stream","messagePattern":"Could not find field  in stream","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/oracle-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/orabulkloader/OraBulkLoader.java","lineNumber":262,"sourceCode":"      .append( Const.CR ).append( '(' );\n\n    String[] streamFields = meta.getFieldStream();\n    String[] tableFields = meta.getFieldTable();\n    String[] dateMask = meta.getDateMask();\n\n    if ( streamFields == null || streamFields.length == 0 ) {\n      throw new KettleException( \"No fields defined to load to database\" );\n    }\n\n    for ( int i = 0; i < streamFields.length; i++ ) {\n      if ( i != 0 ) {\n        contents.append( \", \" ).append( Const.CR );\n      }\n      contents.append( dm.quoteField( tableFields[i] ) );\n\n      int pos = rm.indexOfValue( streamFields[i] );\n      if ( pos < 0 ) {\n        throw new KettleException( \"Could not find field \" + streamFields[i] + \" in stream\" );\n      }\n      ValueMetaInterface v = rm.getValueMeta( pos );\n      switch ( v.getType() ) {\n        case ValueMetaInterface.TYPE_STRING:\n          if ( v.getLength() > 255 ) {\n            contents.append( \" CHAR(\" ).append( v.getLength() ).append( \")\" );\n          } else {\n            contents.append( \" CHAR\" );\n          }\n          break;\n        case ValueMetaInterface.TYPE_INTEGER:\n        case ValueMetaInterface.TYPE_NUMBER:\n        case ValueMetaInterface.TYPE_BIGNUMBER:\n          break;\n        case ValueMetaInterface.TYPE_DATE:\n          if ( OraBulkLoaderMeta.DATE_MASK_DATE.equals( dateMask[i] ) ) {\n            contents.append( \" DATE 'yyyy-mm-dd'\" );\n          } else if ( OraBulkLoaderMeta.DATE_MASK_DATETIME.equals( dateMask[i] ) ) {","sourceCodeStart":244,"sourceCodeEnd":280,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/oracle-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/orabulkloader/OraBulkLoader.java#L244-L280","documentation":"While emitting each field entry into the SQL*Loader control file, the loader looks up each mapped stream field name in the row's value metadata (rm.indexOfValue). A negative index means a field listed in the step's field mapping does not exist in the actual incoming stream, so the control file cannot be built consistently.","triggerScenarios":"meta.getFieldStream()[i] is not present in the input row metadata when getControlFileContents runs via createControlFile (indexOfValue returns < 0).","commonSituations":"An upstream step was renamed or deleted a field after the mapping was created; field names differ by case or whitespace; a 'Select values' step removed the column; the ktr was edited manually and the mapping drifted from the real stream.","solutions":["Open the step mapping tab and re-select fields (click 'Get fields') so mappings match the current upstream stream.","Rename the mapping entry or the upstream field so names match exactly (case- and whitespace-sensitive).","Insert/fix a 'Select values' or upstream step so the missing field is actually produced.","Preview rows immediately before the loader step to confirm the field is present, then re-save the step."],"exampleFix":"// before: mapping references old name\n<field><stream_name>cust_name</stream_name><table_column>NAME</table_column></field>\n// after: matches renamed upstream field\n<field><stream_name>customer_name</stream_name><table_column>NAME</table_column></field>","handlingStrategy":"validation","validationCode":"// Java: confirm every mapped stream field exists in the incoming row meta\nRowMetaInterface inputRowMeta = ...; // from getStepIOMeta / preview\nfor (String f : meta.getFieldStream()) {\n  if (inputRowMeta.indexOfValue(f) < 0) {\n    throw new IllegalStateException(\"Mapped stream field missing upstream: \" + f);\n  }\n}","typeGuard":null,"tryCatchPattern":"try {\n  trans.execute(null);\n} catch (KettleException e) {\n  if (String.valueOf(e.getMessage()).startsWith(\"Could not find field\")) {\n    // log offending field name and re-open step mapping\n  }\n}","preventionTips":["Re-run 'Get fields' whenever an upstream step changes schema.","Avoid manual edits of field names in the ktr XML.","Keep field names case-consistent end to end.","Use a 'Select values' step as an explicit contract right before the loader."],"tags":["kettle","oracle","field-mapping","schema-mismatch"],"backgroundTag":"record-not-found","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}