pentaho/pentaho-kettle · error · KettleException

ParGzipCsvInput.Exception.FilenameFieldNotFound

Error message

ParGzipCsvInput.Exception.FilenameFieldNotFound

What it means

Message key ParGzipCsvInput.Exception.FilenameFieldNotFound thrown in getFilenamesFromPreviousSteps: the configured filename field (after variable substitution) is not present in the incoming rows — indexOfValue returned a negative index — so the step cannot locate the files to read.

Solutions

  1. Set the filename field to an actual field name present in the incoming stream
  2. Add or rename the upstream field that carries the file path
  3. Check variable substitution on the field name for typos
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at engine/src/main/java/org/pentaho/di/trans/steps/parallelgzipcsv/ParGzipCsvInput.java:235 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/parallelgzipcsv/ParGzipCsvInput.java:235

    }
  }

  private void getFilenamesFromPreviousSteps() throws KettleException {
    List<String> filenames = new ArrayList<String>();
    boolean firstRow = true;
    int index = -1;
    Object[] row = getRow();
    while ( row != null ) {

      if ( firstRow ) {
        firstRow = false;

        // Get the filename field index...
        //
        String filenameField = environmentSubstitute( meta.getFilenameField() );
        index = getInputRowMeta().indexOfValue( filenameField );
        if ( index < 0 ) {
          throw new KettleException( BaseMessages.getString(
            PKG, "ParGzipCsvInput.Exception.FilenameFieldNotFound", filenameField ) );
        }
      }

      String filename = getInputRowMeta().getString( row, index );
      filenames.add( filename ); // add it to the list...

      row = getRow(); // Grab another row...
    }

    data.filenames = filenames.toArray( new String[filenames.size()] );

    logBasic( BaseMessages.getString( PKG, "ParGzipCsvInput.Log.ReadingFromNrFiles", Integer
      .toString( data.filenames.length ) ) );
  }

  public void dispose( StepMetaInterface smi, StepDataInterface sdi ) {
    try {

View on GitHub (pinned to f3058517a1)