pentaho/pentaho-kettle · error · KettleStepException

CubeInputMeta.Exception.UnableToReadMetaData

CubeInputMeta.Exception.UnableToReadMetaData

Error message

CubeInputMeta.Exception.UnableToReadMetaData

What it means

CubeInputMeta.getFields() reads the row layout stored inside the cube file via DataInputStream. A KettleFileException while reading that metadata is wrapped in this KettleStepException, meaning the cube file's row metadata could not be deserialized.

Solutions

  1. Verify the file path points to a valid PDI cube file produced by CubeOutput.
  2. Regenerate the cube file with CubeOutput from a working transformation.
  3. Check that PDI versions used to write and read the cube are compatible.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  meta.getFields( row, name, null, null, null, metaStore );
} catch ( KettleStepException e ) {
  logError( "Cube file metadata unreadable — regenerate the cube: " + e.getMessage(), e );
}

Prevention

When it happens

Trigger: getFields (called by testGetFields or preview) opens the configured cube file and KettleFileException is thrown while reading the embedded RowMeta.

Common situations: Cube file corrupt or truncated; file written by an incompatible PDI version; wrong file configured in the step.

Understand the failure class

Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.

Related errors


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

Appendix: source

Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/cubeinput/CubeInputMeta.java:171

  }

  @Override public void getFields( Bowl bowl, RowMetaInterface r, String name, RowMetaInterface[] info, StepMeta nextStep,
                                   VariableSpace space, Repository repository,
                                   IMetaStore metaStore ) throws KettleStepException {
    GZIPInputStream fis = null;
    DataInputStream dis = null;
    try {
      InputStream is = KettleVFS.getInstance( bowl ).getInputStream( space.environmentSubstitute( filename ), space );
      fis = new GZIPInputStream( is );
      dis = new DataInputStream( fis );

      RowMetaInterface add = new RowMeta( dis );
      for ( int i = 0; i < add.size(); i++ ) {
        add.getValueMeta( i ).setOrigin( name );
      }
      r.mergeRowMeta( add );
    } catch ( KettleFileException kfe ) {
      throw new KettleStepException(
        BaseMessages.getString( PKG, "CubeInputMeta.Exception.UnableToReadMetaData" ), kfe );
    } catch ( IOException e ) {
      throw new KettleStepException( BaseMessages.getString(
        PKG, "CubeInputMeta.Exception.ErrorOpeningOrReadingCubeFile" ), e );
    } finally {
      try {
        if ( fis != null ) {
          fis.close();
        }
        if ( dis != null ) {
          dis.close();
        }
      } catch ( IOException ioe ) {
        throw new KettleStepException( BaseMessages.getString(
          PKG, "CubeInputMeta.Exception.UnableToCloseCubeFile" ), ioe );
      }
    }
  }

View on GitHub (pinned to f3058517a1)