{"record":{"id":"b84672d9c051bb6a","repo":"pentaho/pentaho-kettle","slug":"unknown-column-valuename","errorCode":null,"errorMessage":"Unknown column '<valueName>'","messagePattern":"Unknown column '<valueName>'","errorType":"exception","errorClass":"KettleValueException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/RowMetaAndData.java","lineNumber":348,"sourceCode":"    } else if ( boolean.class.isAssignableFrom( destinationType ) ) {\n      return converter.string2booleanPrimitive( vs );\n    } else if ( Boolean.class.isAssignableFrom( destinationType ) ) {\n      return converter.string2boolean( vs );\n    } else if ( destinationType.isEnum() ) {\n      return converter.string2enum( destinationType, vs );\n    } else {\n      throw new RuntimeException( \"Wrong value conversion to \" + destinationType );\n    }\n  }\n\n  /**\n   * Returns value as specified java type using converter. Used for metadata injection.\n   */\n  public Object getAsJavaType( String valueName, Class<?> destinationType, InjectionTypeConverter converter )\n    throws KettleValueException {\n    int idx = rowMeta.indexOfValue( valueName );\n    if ( idx < 0 ) {\n      throw new KettleValueException( \"Unknown column '\" + valueName + \"'\" );\n    }\n\n    ValueMetaInterface metaType = rowMeta.getValueMeta( idx );\n    // find by source value type\n    switch ( metaType.getType() ) {\n      case ValueMetaInterface.TYPE_STRING:\n        String vs = rowMeta.getString( data, idx );\n        return getStringAsJavaType( vs, destinationType, converter );\n      case ValueMetaInterface.TYPE_BOOLEAN:\n        Boolean vb = rowMeta.getBoolean( data, idx );\n        if ( String.class.isAssignableFrom( destinationType ) ) {\n          return converter.boolean2string( vb );\n        } else if ( int.class.isAssignableFrom( destinationType ) ) {\n          return converter.boolean2intPrimitive( vb );\n        } else if ( Integer.class.isAssignableFrom( destinationType ) ) {\n          return converter.boolean2integer( vb );\n        } else if ( long.class.isAssignableFrom( destinationType ) ) {\n          return converter.boolean2longPrimitive( vb );","sourceCodeStart":330,"sourceCodeEnd":366,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/RowMetaAndData.java#L330-L366","documentation":"getAsJavaType() first locates the field by name in the row's metadata via rowMeta.indexOfValue(). If the field name does not exist in the row (index < 0), it throws this KettleValueException. It prevents null-based misreads when the injected field name doesn't match any row column.","triggerScenarios":"Calling setProperty/getAsJavaType with a valueName that is not a column in the RowMetaAndData — e.g. a typo in the field name, or the row layout changed upstream and the field was removed/renamed.","commonSituations":"Metadata injection mapping file listing fields that no longer exist in the source transformation; renamed output fields in a step feeding the injector; case mismatch in field names.","solutions":["Verify the field name exists in the row (print rowMeta.toStringMeta() or check in Spoon)","Correct the field name in the injection mapping to match the actual row column","Ensure upstream steps actually produce/keep the field (it may be removed by a Select Values step)","Catch KettleValueException and validate field names against rowMeta.getFieldNames() before injection"],"exampleFix":"// before\nrow.getAsJavaType(\"Amont\", String.class, converter); // typo\n// after\nrow.getAsJavaType(\"Amount\", String.class, converter);","handlingStrategy":"validation","validationCode":"String[] names = row.getRowMeta().getFieldNames();\nif (java.util.Arrays.asList(names).indexOf(valueName) < 0) {\n  throw new IllegalArgumentException(\"Field '\" + valueName + \"' not in row: \" + String.join(\",\", names));\n}","typeGuard":null,"tryCatchPattern":"try {\n  Object v = row.getAsJavaType(valueName, destType, converter);\n} catch (KettleValueException e) {\n  if (e.getMessage().startsWith(\"Unknown column\")) {\n    log.error(\"Field \" + valueName + \" missing; available: \" + Arrays.toString(row.getRowMeta().getFieldNames()));\n  } else throw e;\n}","preventionTips":["Validate field names against rowMeta.getFieldNames() before injection","Log row layout (rowMeta.toStringMeta()) when debugging injection failures","Avoid hardcoded field names; drive them from the actual row metadata","Watch for upstream Select Values steps removing fields"],"tags":["kettle","rowmeta","metadata-injection","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"}