pentaho/pentaho-kettle · error · KettleException
DimensionLookupMeta.Exception.UnableToLoadDimensionLookupInf…
Error message
DimensionLookupMeta.Exception.UnableToLoadDimensionLookupInfoFromRepository
What it means
DimensionLookupMeta.saveRep wraps a KettleDatabaseException raised while persisting the step's settings (including inserting the step-database relationship) into a KettleException with this message key. It means the step's configuration could not be saved to the repository database.
Solutions
- Inspect the wrapped KettleDatabaseException cause for the underlying SQL error
- Verify the referenced databaseMeta connection still exists in the repository and re-save it first
- Check repository DB availability, permissions, and disk space
- Retry saving; if the step row is corrupt, delete and recreate the step
Example fix
// before
meta.saveRep(rep, metaStore, idTransformation, idStep);
// after
try {
meta.saveRep(rep, metaStore, idTransformation, idStep);
} catch (KettleException e) {
logError("Save failed for Dimension Lookup step: " + e.getCause(), e);
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
// Ensure the referenced DB connection exists in the repository before save
if (meta.getDatabaseMeta() != null && rep.findDatabase(meta.getDatabaseMeta().getName()) == null) {
meta.getDatabaseMeta().saveRep(rep);
} Try / catch
try {
meta.saveRep(rep, metaStore, idTrans, idStep);
} catch (KettleException e) {
logError("Repository save failed: " + e.getCause(), e);
throw e;
} Prevention
- Save shared database connections before steps referencing them
- Monitor repository DB space/locks during bulk saves
- Avoid copying steps between repositories without re-linking connections
- Check the wrapped KettleDatabaseException for SQL-level diagnostics
When it happens
Trigger: Calling saveRep(Repository, IMetaStore, ObjectId id_transformation, ObjectId id_step) when repository insert/update calls (e.g. rep.insertStepDatabase) throw KettleDatabaseException — repository DB down, constraint violation, or bad ObjectIds.
Common situations: Repository database locked, read-only, or out of space; dangling databaseMeta reference whose ObjectId does not exist; saving a transformation copied between repositories.
Related errors
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
- AggregateRowsMeta.Exception.UnexpectedErrorWhileReadingStepInfo
- AnalyticQueryMeta.Exception.UnexpectedErrorInReadingStepInfo…
- AppendMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f5eba1874e0489d9.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/dimensionlookup/DimensionLookupMeta.java:1080
rep.saveStepAttribute( id_transformation, id_step, "min_year", minYear );
rep.saveStepAttribute( id_transformation, id_step, "max_year", maxYear );
rep.saveStepAttribute( id_transformation, id_step, "cache_size", cacheSize );
rep.saveStepAttribute( id_transformation, id_step, "preload_cache", preloadingCache );
rep.saveStepAttribute( id_transformation, id_step, "useBatch", useBatchUpdate );
rep.saveStepAttribute( id_transformation, id_step, "use_start_date_alternative", usingStartDateAlternative );
rep.saveStepAttribute( id_transformation, id_step, "start_date_alternative", getStartDateAlternativeCode(
startDateAlternative ) );
rep.saveStepAttribute( id_transformation, id_step, "start_date_field_name", startDateFieldName );
// Also, save the step-database relationship!
if ( databaseMeta != null ) {
rep.insertStepDatabase( id_transformation, id_step, databaseMeta.getObjectId() );
}
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( BaseMessages.getString( PKG,
"DimensionLookupMeta.Exception.UnableToLoadDimensionLookupInfoFromRepository" ), dbe );
}
}
public Date getMinDate() {
Calendar mincal = Calendar.getInstance();
mincal.set( Calendar.YEAR, minYear );
mincal.set( Calendar.MONTH, 0 );
mincal.set( Calendar.DAY_OF_MONTH, 1 );
mincal.set( Calendar.HOUR_OF_DAY, 0 );
mincal.set( Calendar.MINUTE, 0 );
mincal.set( Calendar.SECOND, 0 );
mincal.set( Calendar.MILLISECOND, 0 );
return mincal.getTime();
}
public Date getMaxDate() {View on GitHub (pinned to f3058517a1)