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

  1. Open the YAML Input step and set 'Yaml field name' to the name of the incoming field containing the YAML text.
  2. Ensure the previous step actually emits a field with exactly that name (check with 'Preview' or a dummy/log step).
  3. 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

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


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)