pentaho/pentaho-kettle · error · KettleException
CheckSum.Log.CanNotFindField
CheckSum.Log.CanNotFindField
Error message
CheckSum.Log.CanNotFindField
What it means
The CheckSum step cannot find one of the configured field names in the incoming row stream. In processRow it resolves each meta.getFieldName() entry via getInputRowMeta().indexOfValue(); a negative index triggers a logged error and this KettleException, aborting the step. This is a field-mapping/config error, not a runtime data problem.
Solutions
- Open the CheckSum step dialog and re-select the fields from the current upstream row structure.
- Check field names are spelled and cased exactly as produced by the previous step.
- Add a 'Fields' preview (right-click → Show output fields) on the hop to confirm available fields.
- Use a 'Select values' step upstream to explicitly add/rename the field the checksum needs.
Example fix
// before: dialog config fieldName = [ "AMOUNT" ] // upstream produces "amount" // after fieldName = [ "amount" ] // match exact upstream field name
Defensive patterns
Strategy: validation
Validate before calling
// Kettle: verify configured fields exist in the incoming row layout before running
for ( String f : meta.getFieldName() ) {
if ( prev.indexOfValue( f ) < 0 ) {
throw new KettleException( "Field not in stream: " + f );
}
} Try / catch
try {
trans.execute( null );
} catch ( KettleException e ) {
if ( e.getMessage().contains( "CanNotFindField" ) ) {
log.error( "CheckSum field mapping broken: {}", e.getMessage() );
} else { throw e; }
} Prevention
- Re-select fields in the dialog after any upstream step change.
- Match field names exactly, including case.
- Use 'Show output fields' on the hop before relying on field names.
When it happens
Trigger: In processRow: fieldIndexMapping[i] = getInputRowMeta().indexOfValue(meta.getFieldName()[i]) returns < 0 for any configured field — the field does not exist in the row arriving at the step.
Common situations: Upstream step renamed or removed the field; case mismatch between the configured name and the actual field name; transformation edited so the field is no longer produced; running a transformation with stale metadata after changing an upstream step.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- CheckSum.Error.UnknownChecksumType
- ChangeFileEncoding.Error.CreatingFile
- ChangeFileEncoding.Error.ParentFolderNotExist
- ChangeFileEncoding.Error.SourceFileNotAFile
- ChangeFileEncoding.Error.SourceFileNotExists
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/c468675ea5a98652.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/checksum/CheckSum.java:92
data.outputRowMeta = inputRowMeta.clone();
data.nrInfields = data.outputRowMeta.size();
meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
metaStore );
if ( meta.getFieldSeparatorString() != null && !meta.getFieldSeparatorString().isEmpty() ) {
data.fieldSeparatorStringBytes = meta.getFieldSeparatorString().getBytes( StandardCharsets.UTF_8 );
}
int[] fieldIndexMapping;
if ( meta.getFieldName() == null || meta.getFieldName().length > 0 ) {
fieldIndexMapping = new int[meta.getFieldName().length];
for ( int i = 0; i < meta.getFieldName().length; i++ ) {
fieldIndexMapping[i] = getInputRowMeta().indexOfValue( meta.getFieldName()[i] );
if ( fieldIndexMapping[i] < 0 ) {
logError( BaseMessages.getString( PKG, "CheckSum.Log.CanNotFindField", meta.getFieldName()[i] ) );
throw new KettleException( BaseMessages.getString( PKG, "CheckSum.Log.CanNotFindField", meta
.getFieldName()[i] ) );
}
}
} else {
fieldIndexMapping = new int[inputRowMeta.size()];
for ( int i = 0; i < fieldIndexMapping.length; i++ ) {
fieldIndexMapping[i] = i;
}
}
// Initialize the field converters
initializeFieldConverters( inputRowMeta, fieldIndexMapping );
// Initialize the checksum calculator
initializeChecksumCalculator();
} // end if first
View on GitHub (pinned to f3058517a1)