pentaho/pentaho-kettle · error · KettleException
All fields must have an output type to do the preview
Error message
All fields must have an output type to do the preview
What it means
PaloCellInputDialog validates metadata before previewing Palo cell input data. In preview mode it calls getInfo(oneMeta) and then requires that the step has fields defined and, additionally, that every DimensionField has a non-empty fieldType (the output type, e.g. String/Number). If any field's output type is empty, the dialog refuses to build the preview data and throws this KettleException, which is shown in an ErrorDialog.
Solutions
- Open the Palo Cell Input dialog and set the output type for every field in the table.
- Delete rows for fields you do not actually need — every row must have a type.
- Re-open and re-save old transformations so metadata is upgraded to include field types before previewing.
- If the type dropdown appears empty, check that the Palo plugin jar is the correct version on the classpath.
Example fix
// before
DimensionField field = new DimensionField("Profit"); // fieldType left empty
fields.add(field);
// after
DimensionField field = new DimensionField("Profit", "String"); // explicit output type
fields.add(field); Defensive patterns
Strategy: validation
Validate before calling
boolean ready = meta.getFields() != null && !meta.getFields().isEmpty()
&& meta.getFields().stream().allMatch(f -> f.getFieldType() != null && !f.getFieldType().trim().isEmpty());
if (!ready) { /* fill in field types before previewing */ } Prevention
- Always set the output type column immediately after adding a field row.
- Validate metadata before invoking preview programmatically.
- Re-save old transformations to upgrade field metadata.
When it happens
Trigger: Clicking the Preview button in the Palo Cell Input dialog (widgetSelected -> preview) when the field table contains rows whose 'Type'/'output type' column was never set, or was cleared.
Common situations: User typed dimension/field names into the table but left the output type cell blank; a saved transformation from an older plugin version has fields without type information; copy-pasted metadata where only names were populated.
Understand the failure class
Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.
Related errors
- Commit size must be an integer.
- A connection of type PALO is expected
- A connection of type PALO is expected
- Failed to add Cell Row:
- Failed to clear Cube
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/e25e7901bfeae64f.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/palo/core/src/main/java/org/pentaho/di/ui/trans/steps/palo/cellinput/PaloCellInputDialog.java:513
fields.add( field );
}
myMeta.setDatabaseMeta( transMeta.findDatabase( addConnectionLine.getText() ) );
myMeta.setCubeMeasureName( new DimensionField( "Measure", textMeasureName.getText(), comboMeasureType.getText() ) );
myMeta.setLevels( fields );
myMeta.setCube( comboCube.getText() );
myMeta.setChanged( true );
}
private void preview() {
PaloCellInputMeta oneMeta = new PaloCellInputMeta();
try {
getInfo( oneMeta );
if ( oneMeta.getFields() == null || oneMeta.getFields().size() == 0 ) {
throw new KettleException( "Fields must be defined to do a preview" );
} else {
for ( DimensionField field : oneMeta.getFields() ) {
if ( Utils.isEmpty( field.getFieldType() ) ) {
throw new KettleException( "All fields must have an output type to do the preview" );
}
}
}
} catch ( KettleException e ) {
new ErrorDialog( shell, BaseMessages.getString( PKG, "RowGeneratorDialog.Illegal.Dialog.Settings.Title" ),
BaseMessages.getString( PKG, "RowGeneratorDialog.Illegal.Dialog.Settings.Message" ), e );
return;
}
TransMeta previewMeta =
TransPreviewFactory.generatePreviewTransformation( transMeta, oneMeta, textStepName.getText() );
EnterNumberDialog numberDialog =
new EnterNumberDialog( shell, 500, BaseMessages.getString( PKG, "System.Dialog.EnterPreviewSize.Title" ),
BaseMessages.getString( PKG, "System.Dialog.EnterPreviewSize.Message" ) );
int previewSize = numberDialog.open();
if ( previewSize > 0 ) {
TransPreviewProgressDialog progressDialog =View on GitHub (pinned to f3058517a1)