pentaho/pentaho-kettle · error · KettleException
You must select at least on field!
Error message
You must select at least on field!
What it means
SetValueConstant.processRow() throws KettleException 'SetValueConstant.Log.SelectFieldsEmpty' when the step is configured with an empty fields list. With no fields to replace, the step considers its configuration invalid and aborts instead of silently passing rows.
Solutions
- Open the step dialog and add at least one field with its replacement value
- If fields should exist, verify the transformation loaded correctly (check for earlier read errors)
- Re-save the transformation after editing and re-run
- If a no-op pass-through is intended, remove the step entirely
Example fix
// before <fields></fields> // after <fields><field><field_name>status</field_name><replace_value>ACTIVE</replace_value></field></fields>
Defensive patterns
Strategy: validation
Validate before calling
if (meta.getField() == null || meta.getField().isEmpty())
throw new IllegalStateException("Set Value Constant step has no fields configured"); Try / catch
try { step.processRow(); } catch (KettleException e) { if (e.getMessage().contains("at least on field")) { /* configure fields */ } else throw e; } Prevention
- Never leave the Fields tab empty; configure fields when adding the step
- Add transformation-level checks (check() warnings) before runs
- Validate loaded transformations for empty step configs
- Remove steps that are intentionally no-ops
When it happens
Trigger: First row processing when the step's field list (meta.getFields()) is null or size 0 — no rows were entered in the Fields tab of the dialog.
Common situations: Step added to the transformation but never configured; fields grid accidentally cleared; transformation XML/repo load lost the fields due to an earlier read error.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- AccessInput.Exception.CouldnotFindField
- AccessInput.Log.NoField
- AddSequence.Exception.NoSpecifiedMethod
- At this time we don't support the use of multiple cluster…
- AutoDoc.Exception.FilenameFieldNotFound
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/11ef7bba2b31f704.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/setvalueconstant/SetValueConstant.java:113
logError( BaseMessages.getString( PKG, "SetValueConstant.Log.CanNotFindField", meta.getField( i ).getFieldName() ) );
throw new KettleException( BaseMessages.getString( PKG, "SetValueConstant.Log.CanNotFindField", meta
.getField( i ).getFieldName() ) );
}
if ( meta.getField( i ).isEmptyString() ) {
// Just set empty string
data.getRealReplaceByValues()[i] = StringUtil.EMPTY_STRING;
} else {
// set specified value
if ( meta.isUseVars() ) {
data.getRealReplaceByValues()[i] = environmentSubstitute( meta.getField( i ).getReplaceValue() );
} else {
data.getRealReplaceByValues()[i] = meta.getField( i ).getReplaceValue();
}
}
}
} else {
throw new KettleException( BaseMessages.getString( PKG, "SetValueConstant.Log.SelectFieldsEmpty" ) );
}
data.setFieldnr( data.getFieldnrs().length );
} // end if first
try {
updateField( r );
putRow( data.getOutputRowMeta(), r ); // copy row to output rowset(s);
} catch ( Exception e ) {
if ( getStepMeta().isDoingErrorHandling() ) {
// Simply add this row to the error row
putError( data.getOutputRowMeta(), r, 1, e.toString(), null, "SVC001" );
} else {
logError( BaseMessages.getString( PKG, "SetValueConstant.Log.ErrorInStep", e.getMessage() ) );
setErrors( 1 );
stopAll();
setOutputDone(); // signal end to receiver(s)View on GitHub (pinned to f3058517a1)