pentaho/pentaho-kettle · error · KettleException

TableExistsMeta.Exception.UnexpectedErrorReadingStepInfo

Error message

TableExistsMeta.Exception.UnexpectedErrorReadingStepInfo

What it means

TableExistsMeta.readRep wraps any exception raised while loading this step's attributes from the Pentaho Repository into a KettleException. Like its TableCompare counterpart, it indicates the step's settings could not be read from the repository, with the real cause chained.

Solutions

  1. Check the chained cause for the true repository error
  2. Verify repository connectivity and re-load the transformation
  3. Confirm the referenced database connection still exists in the repository
  4. Restore missing repository rows from backup or re-save the step

Example fix

// before
try { meta.readRep(rep, metaStore, idStep, databases); } catch (KettleException e) { e.printStackTrace(); }
// after
try { meta.readRep(rep, metaStore, idStep, databases); }
catch (KettleException e) { logError("Cause: " + e.getCause(), e); }
Defensive patterns

Strategy: try-catch

Validate before calling

// ensure repository reachable and step exists before readRep
if (!rep.isConnected()) { rep.connect(user, pass); }
ObjectId idStep = rep.getStepID(idTransformation, "TableExists", 0);
if (idStep == null) { throw new IllegalStateException("TableExists step not found in repository"); }

Try / catch

try { meta.readRep(rep, metaStore, idStep, databases); }
catch (KettleException e) {
  Throwable root = e; while (root.getCause() != null) root = root.getCause();
  logError("Repository read failed: " + root.getMessage(), e);
}

Prevention

When it happens

Trigger: Calling readRep when loadDatabaseMetaFromStepAttribute or any rep.getStepAttributeString for id_step throws — repository I/O error, missing step row, or connection lookup failure.

Common situations: Database-repository outages during transformation load; R_STEP_ATTRIBUTE rows missing for the step; database metadata referenced by id_connection deleted from R_DATABASE; version-mismatched repository schema.

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/229be81153898a19. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/tableexists/TableExistsMeta.java:179

      tablenamefield = XMLHandler.getTagValue( stepnode, "tablenamefield" );
      resultfieldname = XMLHandler.getTagValue( stepnode, "resultfieldname" );
      schemaname = XMLHandler.getTagValue( stepnode, "schemaname" );

    } catch ( Exception e ) {
      throw new KettleXMLException(
        BaseMessages.getString( PKG, "TableExistsMeta.Exception.UnableToReadStepInfo" ), e );
    }
  }

  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
    try {
      databaseMeta = rep.loadDatabaseMetaFromStepAttribute( id_step, "id_connection", databases );
      tablenamefield = rep.getStepAttributeString( id_step, "tablenamefield" );
      schemaname = rep.getStepAttributeString( id_step, "schemaname" );

      resultfieldname = rep.getStepAttributeString( id_step, "resultfieldname" );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "TableExistsMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      rep.saveDatabaseMetaStepAttribute( id_transformation, id_step, "id_connection", databaseMeta );
      rep.saveStepAttribute( id_transformation, id_step, "tablenamefield", tablenamefield );
      rep.saveStepAttribute( id_transformation, id_step, "schemaname", schemaname );

      rep.saveStepAttribute( id_transformation, id_step, "resultfieldname", resultfieldname );

      // Also, save the step-database relationship!
      if ( databaseMeta != null ) {
        rep.insertStepDatabase( id_transformation, id_step, databaseMeta.getObjectId() );
      }
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG, "TableExistsMeta.Exception.UnableToSaveStepInfo" )

View on GitHub (pinned to f3058517a1)