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
- Check the chained cause for the true repository error
- Verify repository connectivity and re-load the transformation
- Confirm the referenced database connection still exists in the repository
- 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
- Keep database connections in the repository intact — do not delete ones in use
- Back up repository tables before schema upgrades
- Retry loads after transient repository outages
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
- CubeInputMeta.Exception.UnableToSaveStepInfo
- CubeOutputMeta.Exception.UnableToSaveStepInfo
- CubeOutputMeta.Exception.UnexpectedErrorInReadingStepInfo
- DelayMeta.Exception.UnexpectedErrorReadingStepInfo
- DelayMeta.Exception.UnexpectedErrorSavingStepInfo
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)