pentaho/pentaho-kettle · error · KettleException
YamlInput.Log.NoField
Error message
YamlInput.Log.NoField
What it means
readNextString throws this KettleException when the step is configured to read YAML from an incoming field ('Accepting fields' / inFields mode) but the 'Yaml field name' setting is empty. The step cannot know which incoming column contains the YAML content, so it aborts.
Solutions
- Open the YAML Input step and set 'Yaml field name' to the name of the incoming field containing the YAML text.
- Ensure the previous step actually emits a field with exactly that name (check with 'Preview' or a dummy/log step).
- Verify the step metadata round-trips correctly (save/reload the transformation).
Example fix
// before: meta.setYamlField(null); // field name never set
// after: in the step dialog / programmatically
meta.setYamlField("yaml_content"); // must match the upstream row field name Defensive patterns
Strategy: validation
Validate before calling
// before executing, validate step metadata
YamlInputMeta meta = (YamlInputMeta) stepMeta.getStepMetaInterface();
if (meta.isInFields() && (meta.getYamlField() == null || meta.getYamlField().isEmpty())) {
throw new IllegalArgumentException("Yaml field name must be set when accepting fields");
} Try / catch
try { readNextString(); } catch (KettleException e) {
if (e.getMessage().contains("NoField")) { openStepDialogToSetYamlField(); }
} Prevention
- Always use the step dialog's field picker rather than typing the name manually.
- Include step-metadata validation in your transformation test harness.
- Round-trip test (save/reload) transformations before promoting them.
When it happens
Trigger: readNextString (called from getOneRow) during the first row: meta.isInFields() is true and Utils.isEmpty(meta.getYamlField()) returns true, i.e. the YAML field name was never configured or was lost during serialization.
Common situations: Designer forgot to type the field name in the 'Yaml field name' box; metadata copied from another step lost the setting; repository/XML round-trip produced a null value; transformation exported without that attribute.
Understand the failure class
Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.
Related errors
- ChangeFileEncoding.Error.FilenameFieldMissing
- ChangeFileEncoding.Error.TargetFilenameFieldMissing
- ColumnExists.Error.TablenameFieldMissing
- GetFilesRowsCount.Log.NoField
- GetTableNames.Log.NoSchemaField
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f9d6db1a3368c01d.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/yaml-input/impl/src/main/java/org/pentaho/di/trans/steps/yamlinput/YamlInput.java:104
logDetailed( BaseMessages.getString( PKG, "YamlInput.Log.FinishedProcessing" ) );
}
return false;
}
if ( first ) {
first = false;
data.outputRowMeta = getInputRowMeta().clone();
// Get total previous fields
data.totalPreviousFields = data.outputRowMeta.size();
data.totalOutFields = data.totalPreviousFields + data.nrInputFields;
meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
metaStore );
// Check is Yaml field is provided
if ( Utils.isEmpty( meta.getYamlField() ) ) {
logError( BaseMessages.getString( PKG, "YamlInput.Log.NoField" ) );
throw new KettleException( BaseMessages.getString( PKG, "YamlInput.Log.NoField" ) );
}
// cache the position of the field
data.indexOfYamlField = getInputRowMeta().indexOfValue( meta.getYamlField() );
if ( data.indexOfYamlField < 0 ) {
// The field is unreachable !
logError( BaseMessages.getString( PKG, "YamlInput.Log.ErrorFindingField", meta.getYamlField() ) );
throw new KettleException( BaseMessages.getString( PKG, "YamlInput.Exception.CouldnotFindField", meta
.getYamlField() ) );
}
}
// get field value
String Fieldvalue = getInputRowMeta().getString( data.readrow, data.indexOfYamlField );
getLinesInput();
if ( log.isDetailed() ) {View on GitHub (pinned to f3058517a1)