pentaho/pentaho-kettle · error · KettleException
GroupByMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository
GroupByMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository
Error message
GroupByMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository
What it means
GroupByMeta.readRep wraps any exception from reading the step's attributes out of the repository in this KettleException. The stored GroupBy step definition in the Pentaho repository could not be loaded (attributes unread or a repository call failed).
Solutions
- Test the repository connection and retry loading the transformation
- Check the wrapped cause to identify which attribute/query failed
- Verify repository schema version matches your Pentaho version (run upgrade scripts)
- Re-save the GroupBy step in Spoon to rewrite its repository attributes
- Restore the step from a known-good transformation export
Defensive patterns
Strategy: try-catch
Validate before calling
// verify repository reachability before loading
if ( !repository.isConnected() || !repository.testConnection() ) {
throw new IllegalStateException( "Repository unavailable" );
} Try / catch
try {
transMeta.loadRep( repository, metaStore, transObjectId, null, null );
} catch ( KettleException e ) {
if ( e.getMessage().contains( "UnexpectedErrorInReadingStepInfoFromRepository" ) ) {
log.error( "GroupBy attributes unreadable for step; check repository schema/version", e.getCause() );
} else { throw e; }
} Prevention
- Keep repository schema in sync with Pentaho version (run upgrade scripts)
- Test repository connectivity before batch loads
- Re-save steps after plugin upgrades to refresh stored attributes
- Maintain transformation exports as recovery copies
When it happens
Trigger: loadXML→? no: readRep(rep, id_step) queries step attributes (group_field, aggregate_name, aggregate_type, give_back_row, etc.) and any Repository call or attribute parse throws; caught by the catch block and rethrown.
Common situations: Repository database connectivity issues or schema mismatch; step attributes saved by an incompatible plugin/version; id_step pointing at a deleted or corrupted step record; repository metadata import partially failed.
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
- GroupByMeta.Exception.UnableToLoadStepInfoFromXML
- GroupByMeta.Exception.UnableToSaveStepInfoToRepository
- ProcessFilesMeta.Exception.UnexpectedErrorReadingStepInfo
- SETVARIABLE0005
- SETVARIABLE0006
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/b6b6ff7fcf09bb55.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/groupby/GroupByMeta.java:640
groupField[ i ] = rep.getStepAttributeString( id_step, i, "group_name" );
}
boolean hasNumberOfValues = false;
for ( int i = 0; i < nrvalues; i++ ) {
aggregateField[ i ] = rep.getStepAttributeString( id_step, i, "aggregate_name" );
subjectField[ i ] = rep.getStepAttributeString( id_step, i, "aggregate_subject" );
aggregateType[ i ] = getType( rep.getStepAttributeString( id_step, i, "aggregate_type" ) );
if ( aggregateType[ i ] == TYPE_GROUP_COUNT_ALL
|| aggregateType[ i ] == TYPE_GROUP_COUNT_DISTINCT || aggregateType[ i ] == TYPE_GROUP_COUNT_ANY ) {
hasNumberOfValues = true;
}
valueField[ i ] = rep.getStepAttributeString( id_step, i, "aggregate_value_field" );
}
alwaysGivingBackOneRow = rep.getStepAttributeBoolean( id_step, 0, "give_back_row", hasNumberOfValues );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "GroupByMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository" ), e );
}
}
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "all_rows", passAllRows );
rep.saveStepAttribute( id_transformation, id_step, "ignore_aggregate", aggregateIgnored );
rep.saveStepAttribute( id_transformation, id_step, "field_ignore", aggregateIgnoredField );
rep.saveStepAttribute( id_transformation, id_step, "directory", directory );
rep.saveStepAttribute( id_transformation, id_step, "prefix", prefix );
rep.saveStepAttribute( id_transformation, id_step, "add_linenr", addingLineNrInGroup );
rep.saveStepAttribute( id_transformation, id_step, "linenr_fieldname", lineNrInGroupField );
rep.saveStepAttribute( id_transformation, id_step, "give_back_row", alwaysGivingBackOneRow );
for ( int i = 0; i < groupField.length; i++ ) {View on GitHub (pinned to f3058517a1)