pentaho/pentaho-kettle · error · KettleFileException

Exception reading line of data

Error message

Exception reading line of data

What it means

Wrapper error in ParGzipCsvInput.readOneRow: parsing one line of the gzip CSV block failed — corrupt data, unexpected end of block, or conversion issues while assembling outputRowData (filename injection, row number). The original exception is chained as the cause.

Solutions

  1. Check the input file for corrupted rows or encoding mismatches
  2. Verify the field definitions (delimiters, formats) match the actual data
  3. Inspect the chained cause for the precise parse or conversion failure
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at engine/src/main/java/org/pentaho/di/trans/steps/parallelgzipcsv/ParGzipCsvInput.java:676 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/d7b77e4f016a3188. Report an issue: GitHub.

Appendix: source

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

      // Optionally add the current filename to the mix as well...
      //
      if ( meta.isIncludingFilename() && !Utils.isEmpty( meta.getFilenameField() ) ) {
        if ( meta.isLazyConversionActive() ) {
          outputRowData[data.filenameFieldIndex] = data.binaryFilename;
        } else {
          outputRowData[data.filenameFieldIndex] = data.filenames[data.filenr - 1];
        }
      }

      if ( data.isAddingRowNumber ) {
        outputRowData[data.rownumFieldIndex] = new Long( data.rowNumber++ );
      }

      incrementLinesInput();
      return outputRowData;
    } catch ( Exception e ) {
      throw new KettleFileException( "Exception reading line of data", e );
    }

  }

  public boolean init( StepMetaInterface smi, StepDataInterface sdi ) {
    meta = (ParGzipCsvInputMeta) smi;
    data = (ParGzipCsvInputData) sdi;

    if ( super.init( smi, sdi ) ) {

      data.bufferSize = Integer.parseInt( environmentSubstitute( meta.getBufferSize() ) );
      data.byteBuffer = new byte[] {}; // empty

      // If the step doesn't have any previous steps, we just get the filename.
      // Otherwise, we'll grab the list of filenames later...
      //
      if ( getTransMeta().findNrPrevSteps( getStepMeta() ) == 0 ) {
        String filename = environmentSubstitute( meta.getFilename() );

View on GitHub (pinned to f3058517a1)