pentaho/pentaho-kettle · error · KettleException

CombinationLookupMeta.Exception.UnexpectedErrorWhileReadingS…

Error message

CombinationLookupMeta.Exception.UnexpectedErrorWhileReadingStepInfo

What it means

Generic KettleException thrown by CombinationLookupMeta.readRep when reading the step's configuration from the repository (database-backed metadata) fails. The wrapped cause is the repository/SQL error; the localized message means 'Unexpected error while reading step info from the repository'.

Solutions

  1. Check the wrapped cause for the repository SQL/connection error and fix repository connectivity or permissions.
  2. Run the repository upgrade scripts matching your PDI version so the attribute schema is current.
  3. Open the transformation from a file export instead of the repository to isolate the bad step, then re-save it.
  4. Restore/rebuild the affected step metadata in the repository.

Example fix

// no code fix; operational remedy:
// apply repository DDL upgrade, e.g. run
//   sql/upgrade/<version>/<dbtype>/upgrade_r_step_attribute.sql
// then reconnect and reopen the transformation.
Defensive patterns

Strategy: try-catch

Validate before calling

// pre-check repository health before loading
// Repository.connect("user", "pass");
// rep.getStepAttributeBoolean(id_step, "use_autoinc"); // smoke-test attribute access

Try / catch

try {
  transMeta = repository.loadTransformation(objectId, null);
} catch (KettleException e) {
  log.error("Repository read of step failed: " + e.getCause(), e);
}

Prevention

When it happens

Trigger: readRep (invoked when a transformation is loaded from a repository) throws while calling rep.getStepAttributeString/getStepAttributeBoolean for attributes like return_name, use_autoinc, sequence, creation_method, last_update_field.

Common situations: Repository database unreachable or schema out of sync after a PDI upgrade (missing r_step_attribute rows/columns); corrupted repository rows; permission problems on the repository tables.

Understand the failure class

Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.

Related errors


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

Appendix: source

Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/combinationlookup/CombinationLookupMeta.java:565

      useHash = rep.getStepAttributeBoolean( id_step, "crc" );
      hashField = rep.getStepAttributeString( id_step, "crcfield" );

      int nrkeys = rep.countNrStepAttributes( id_step, "lookup_key_name" );

      allocate( nrkeys );

      for ( int i = 0; i < nrkeys; i++ ) {
        keyField[ i ] = rep.getStepAttributeString( id_step, i, "lookup_key_name" );
        keyLookup[ i ] = rep.getStepAttributeString( id_step, i, "lookup_key_field" );
      }

      technicalKeyField = rep.getStepAttributeString( id_step, "return_name" );
      useAutoinc = rep.getStepAttributeBoolean( id_step, "use_autoinc" );
      sequenceFrom = rep.getStepAttributeString( id_step, "sequence" );
      techKeyCreation = rep.getStepAttributeString( id_step, "creation_method" );
      lastUpdateField = rep.getStepAttributeString( id_step, "last_update_field" );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "CombinationLookupMeta.Exception.UnexpectedErrorWhileReadingStepInfo" ), e );
    }
  }

  @Override
  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
    throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "schema", schemaName );
      rep.saveStepAttribute( id_transformation, id_step, "table", tablename );
      rep.saveDatabaseMetaStepAttribute( id_transformation, id_step, "id_connection", databaseMeta );
      rep.saveStepAttribute( id_transformation, id_step, "commit", commitSize );
      rep.saveStepAttribute( id_transformation, id_step, "cache_size", cacheSize );
      rep.saveStepAttribute( id_transformation, id_step, "replace", replaceFields );
      rep.saveStepAttribute( id_transformation, id_step, "preloadCache", preloadCache );

      rep.saveStepAttribute( id_transformation, id_step, "crc", useHash );
      rep.saveStepAttribute( id_transformation, id_step, "crcfield", hashField );

View on GitHub (pinned to f3058517a1)