{"record":{"id":"90df85719e4cb3e6","repo":"pentaho/pentaho-kettle","slug":"columnexists-exception-couldnotfindfield","errorCode":null,"errorMessage":"ColumnExists.Exception.CouldnotFindField","messagePattern":"ColumnExists\\.Exception\\.CouldnotFindField","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/columnexists/ColumnExists.java","lineNumber":87,"sourceCode":"      if ( Utils.isEmpty( meta.getDynamicColumnnameField() ) ) {\n        logError( BaseMessages.getString( PKG, \"ColumnExists.Error.ColumnnameFieldMissing\" ) );\n        throw new KettleException( BaseMessages.getString( PKG, \"ColumnExists.Error.ColumnnameFieldMissing\" ) );\n      }\n      if ( meta.isTablenameInField() ) {\n        // Check is tablename field is provided\n        if ( Utils.isEmpty( meta.getDynamicTablenameField() ) ) {\n          logError( BaseMessages.getString( PKG, \"ColumnExists.Error.TablenameFieldMissing\" ) );\n          throw new KettleException( BaseMessages.getString( PKG, \"ColumnExists.Error.TablenameFieldMissing\" ) );\n        }\n\n        // cache the position of the field\n        if ( data.indexOfTablename < 0 ) {\n          data.indexOfTablename = getInputRowMeta().indexOfValue( meta.getDynamicTablenameField() );\n          if ( data.indexOfTablename < 0 ) {\n            // The field is unreachable !\n            logError( BaseMessages.getString( PKG, \"ColumnExists.Exception.CouldnotFindField\" ) + \"[\"\n                + meta.getDynamicTablenameField() + \"]\" );\n            throw new KettleException( BaseMessages.getString( PKG, \"ColumnExists.Exception.CouldnotFindField\",\n              meta.getDynamicTablenameField() ) );\n          }\n        }\n      } else {\n        if ( !Utils.isEmpty( data.schemaname ) ) {\n          data.tablename = data.db.getDatabaseMeta().getQuotedSchemaTableCombination( data.schemaname, data.tablename );\n        } else {\n          data.tablename = data.db.getDatabaseMeta().quoteField( data.tablename );\n        }\n      }\n\n      // cache the position of the column field\n      if ( data.indexOfColumnname < 0 ) {\n        data.indexOfColumnname = getInputRowMeta().indexOfValue( meta.getDynamicColumnnameField() );\n        if ( data.indexOfColumnname < 0 ) {\n          // The field is unreachable !\n          logError( BaseMessages.getString( PKG, \"ColumnExists.Exception.CouldnotFindField\" ) + \"[\"\n              + meta.getDynamicColumnnameField() + \"]\" );","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/columnexists/ColumnExists.java#L69-L105","documentation":"The step is configured to take the table name from a field, but that field name does not exist in the incoming row metadata, so indexOfValue returns -1 and the step throws a KettleStepException naming the missing field.","triggerScenarios":"In processRow, getInputRowMeta().indexOfValue(meta.getDynamicTablenameField()) < 0 — the configured dynamic tablename field is absent from the upstream row layout.","commonSituations":"Upstream step renamed or removed the field; typo in the field name; field added downstream instead of upstream; a Select Values step dropped the column.","solutions":["Correct the 'tablename fieldname' in the step dialog to match an actual upstream field name","Inspect the incoming row (Preview / Get Fields) to confirm the field exists upstream","Add or restore the field in an upstream step if it was removed"],"exampleFix":"// before: field 'tab_name' typo\nmeta.setDynamicTablenameField(\"tab_name\");\n// after\nmeta.setDynamicTablenameField(\"TABLE_NAME\"); // matches upstream field exactly","handlingStrategy":"validation","validationCode":"String field = meta.getDynamicTablenameField();\nif (inputRowMeta.indexOfValue(field) < 0) {\n  throw new IllegalArgumentException(\"Upstream row is missing tablename field: \" + field);\n}","typeGuard":null,"tryCatchPattern":"try { transform.execute(); } catch (KettleStepException e) { log.error(\"Field lookup failed: \" + e.getMessage()); }","preventionTips":["Preview upstream rows before running","Use Spoon's field picker instead of typing field names","Avoid renaming upstream fields without re-checking downstream steps"],"tags":["kettle","pdi","row-metadata","field-not-found"],"backgroundTag":"resource-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"}