pentaho/pentaho-kettle · error · KettleException
DimOutput: failed to find input row meta for
Error message
DimOutput: failed to find input row meta for
What it means
PaloDimOutput.processRow iterates the configured dimension levels and resolves each level's data field name to a column index in the incoming row via getInputRowMeta().indexOfValue(). If the level's field name is not a column of the input row (index < 0), the step cannot populate data.indexes and throws this KettleException. It is a step-configuration vs. upstream-row-layout mismatch.
Solutions
- Open the Palo DimOutput step dialog and re-select the field for every level so it matches an actual incoming column
- Check the preceding step's output fields (right-click > Show output fields) and rename/restore the missing column there
- Ensure the step actually receives rows from an upstream hop with the expected fields
- Use a 'Select values' / 'Field exists' repair step to guarantee column names before this step
Example fix
// before (stream lacks column 'LevelName')
levels: [{ levelName: 'Year', fieldName: 'LevelName' }]
// after
levels: [{ levelName: 'Year', fieldName: 'year_field' }] // matches an existing input column Defensive patterns
Strategy: validation
Validate before calling
for (PaloDimensionLevel lvl : meta.getLevels()) {
if (inputRowMeta.indexOfValue(lvl.getFieldName()) < 0) {
throw new KettleException("Level '" + lvl.getLevelName() + "' field '" + lvl.getFieldName() + "' not in input row");
}
} Type guard
boolean hasField(RowMetaInterface row, String name) { return name != null && row.indexOfValue(name) >= 0; } Try / catch
try { processStep(); } catch (KettleException e) { logError("Missing input field for level: " + e.getMessage(), e); setErrors(1); } Prevention
- Re-open and re-validate step mappings after renaming upstream fields
- Use 'Show output fields' on the preceding step to confirm column names
- Add a Field existence check / abort step before Palo steps
- Avoid hand-editing field names in the dialog
When it happens
Trigger: A level in the Palo DimOutput step dialog references a fieldName that does not exist in the row arriving at the step (renamed/deleted upstream column, wrong step order, no fields mapped).
Common situations: Upstream step renamed a field after configuring this step; copying a transformation between environments where field casing differs; running the step with no prior step producing rows with those columns.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- ConcatFields.Error.TargetFieldNotFoundOutputStream
- FileExists.Error.FilenameFieldMissing
- FileExists.Exception.CouldnotFindField
- GetPreviousRowField.Exception.FieldRequired
- GetPreviousRowField.Exception.OutputFieldEmpty
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/188685c07e1970e3.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/palo/core/src/main/java/org/pentaho/di/trans/steps/palo/dimoutput/PaloDimOutput.java:70
Object[] r = getRow();
if ( first ) {
first = false;
this.logBasic( "First Row Analysis:" );
if ( meta.getLevels().size() == 0 ) {
throw new KettleException( "Number of levels must be greater that 0 to process the rows" );
}
this.logBasic( "Number of defined levels: " + meta.getLevels().size() );
/* Indexes will follow [data index],[consolidation index],[data index],[consolidation index] .... */
data.indexes = new int[meta.getLevels().size() * 2];
for ( int i = 0; i < meta.getLevels().size(); i++ ) {
/* Get data field index */
String dataFieldName = meta.getLevels().get( i ).getFieldName();
int numRow = getInputRowMeta().indexOfValue( dataFieldName );
if ( numRow < 0 ) {
throw new KettleException( "DimOutput: failed to find input row meta for ".concat( meta.getLevels().get( i )
.getLevelName() ) );
}
data.indexes[i * 2] = numRow;
this.logDebug( meta.getLevels().get( i ).getLevelName() + " has index: " + numRow );
/* Get consolidation field index */
String consolidationFieldName = meta.getLevels().get( i ).getConsolidationFieldName();
if ( consolidationFieldName == null ) {
numRow = -1;
this.logDebug( "Consolidation factor was left to the default" );
} else {
numRow = getInputRowMeta().indexOfValue( consolidationFieldName );
if ( numRow < 0 ) {
throw new KettleException( "DimOutput: failed to find input row meta for ".concat( meta.getLevels().get( i )
.getConsolidationFieldName() ) );
}
this.logDebug( meta.getLevels().get( i ).getConsolidationFieldName() + " has index: " + numRow );
}View on GitHub (pinned to f3058517a1)