pentaho/pentaho-kettle · error · KettleException

LoadFileInput.Log.NoField

LoadFileInput.Log.NoField

Error message

LoadFileInput.Log.NoField

What it means

LoadFileInput.openNextFile throws this when the step is set to take filenames from an incoming field ('file content in field' / dynamic filename mode) but the 'filename field' setting is empty. Without a source field the step cannot determine which file to load, so it aborts with Log.NoField.

Solutions

  1. Open Load File Input settings and choose the actual filename field from the dropdown.
  2. Confirm the upstream step outputs that field (Preview the previous step).
  3. If files are fixed, disable dynamic-filename mode and list files explicitly.
  4. Save and rerun.

Example fix

// before
// dynamicFilenameField = "" with fileInFields=true
// after
// dynamicFilenameField = "filepath"  (field from previous step)
Defensive patterns

Strategy: validation

Validate before calling

StepMeta lfStep = transMeta.findStep("Load File Input");
LoadFileInputMeta meta = (LoadFileInputMeta) lfStep.getStepMetaInterface();
if (meta.getFileInFields() && (meta.getDynamicFilenameField() == null || meta.getDynamicFilenameField().isEmpty())) {
  throw new IllegalStateException("Load File Input: filename field not configured");
}

Try / catch

try {
  trans.execute(null);
} catch (KettleException e) {
  if (e.getMessage().contains("NoField")) {
    log.error("Set the filename field in Load File Input settings");
  }
}

Prevention

When it happens

Trigger: meta.getFileInFields() is true and the first row triggers openNextFile, but meta.getDynamicFilenameField() is empty/null.

Common situations: User enabled 'filename defined in a field' but never selected the field; transformation copied between environments losing the setting; upstream step that previously supplied the field was removed.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/2b044e53ebd1d289. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/loadfileinput/LoadFileInput.java:100

        }

        if ( first ) {
          first = false;

          data.inputRowMeta = getInputRowMeta();
          data.outputRowMeta = data.inputRowMeta.clone();
          meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
            metaStore );

          // Create convert meta-data objects that will contain Date & Number formatters
          // All non binary content is handled as a String. It would be converted to the target type after the processing.
          data.convertRowMeta = data.outputRowMeta.cloneToType( ValueMetaInterface.TYPE_STRING );

          if ( meta.getFileInFields() ) {
            // Check is filename field is provided
            if ( Utils.isEmpty( meta.getDynamicFilenameField() ) ) {
              logError( BaseMessages.getString( PKG, "LoadFileInput.Log.NoField" ) );
              throw new KettleException( BaseMessages.getString( PKG, "LoadFileInput.Log.NoField" ) );
            }

            // cache the position of the field
            if ( data.indexOfFilenameField < 0 ) {
              data.indexOfFilenameField = data.inputRowMeta.indexOfValue( meta.getDynamicFilenameField() );
              if ( data.indexOfFilenameField < 0 ) {
                // The field is unreachable !
                logError( BaseMessages.getString( PKG, "LoadFileInput.Log.ErrorFindingField" )
                  + "[" + meta.getDynamicFilenameField() + "]" );
                throw new KettleException( BaseMessages.getString(
                  PKG, "LoadFileInput.Exception.CouldnotFindField", meta.getDynamicFilenameField() ) );
              }
            }
            // Get the number of previous fields
            data.totalpreviousfields = data.inputRowMeta.size();

          }
        } // end if first

View on GitHub (pinned to f3058517a1)