pentaho/pentaho-kettle · error · KettleException

AccessInput.Log.RequiredFilesMissing

AccessInput.Log.RequiredFilesMissing

Error message

AccessInput.Log.RequiredFilesMissing

What it means

KettleException thrown by AccessInput.handleMissingFiles during step init when files listed in the Files tab do not exist. It logs each missing file (RequiredFiles message) and then throws with the file list embedded in the message, aborting transformation start.

Solutions

  1. Fix the file paths/wildcards in the Access Input Files tab so they resolve on the machine executing the transformation.
  2. Verify the files exist at run time (use relative paths or Pentaho environment variables like ${Internal.Transformation.Filename.Directory} for portability).
  3. Check network shares/drive mounts on the execution server (e.g. map the UNC path on Windows, mount on Linux).
  4. If files are legitimately optional, untick 'Stop on missing file' style options or make the file list dynamic via a previous step.

Example fix

// before (breaks when the transformation moves)
C:\data\customers.mdb
// after
${Internal.Transformation.Filename.Directory}/customers.mdb
Defensive patterns

Strategy: validation

Validate before calling

// pre-check all configured files before init
for ( String pattern : fileList ) {
  File[] matches = resolve( pattern ); // expand wildcards
  if ( matches == null || matches.length == 0 ) {
    throw new FileNotFoundException( "No files match: " + pattern );
  }
}

Try / catch

try { trans.execute( null ); } catch ( KettleException e ) { if ( e.getMessage().contains( "files" ) ) { logError( "Missing input files: " + e.getMessage() ); /* alert + reschedule */ } }

Prevention

When it happens

Trigger: init() -> handleMissingFiles() finding data.files.getNonExistantFiles() non-empty: statically listed .mdb/.accdb paths resolve to non-existent files (bad path, wrong drive mapping, missing wildcard matches, or wildcard that matched nothing).

Common situations: Transformation moved between Windows/Linux servers so absolute paths no longer resolve; network share not mounted at run time; wildcard pattern with no matches; files deleted after the transformation was designed.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


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

Appendix: source

Thrown at plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInput.java:367

      }
    } catch ( Exception e ) {
      logError( BaseMessages.getString( PKG, "AccessInput.Log.UnableToOpenFile", "" + data.filenr, data.file
        .toString(), e.toString() ) );
      stopAll();
      setErrors( 1 );
      return false;
    }
    return true;
  }

  private void handleMissingFiles() throws KettleException {
    List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();
    if ( nonExistantFiles.size() != 0 ) {
      String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );
      logError( BaseMessages.getString( PKG, "AccessInput.Log.RequiredFilesTitle" ), BaseMessages.getString(
        PKG, "AccessInput.Log.RequiredFiles", message ) );

      throw new KettleException( BaseMessages.getString( PKG, "AccessInput.Log.RequiredFilesMissing", message ) );
    }

    List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();
    if ( nonAccessibleFiles.size() != 0 ) {
      String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );
      logError( BaseMessages.getString( PKG, "AccessInput.Log.RequiredFilesTitle" ), BaseMessages.getString(
        PKG, "AccessInput.Log.RequiredNotAccessibleFiles", message ) );

      throw new KettleException( BaseMessages.getString(
        PKG, "AccessInput.Log.RequiredNotAccessibleFilesMissing", message ) );
    }
  }

  /**
   * Build an empty row based on the meta-data...
   *
   * @return
   */

View on GitHub (pinned to f3058517a1)