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

  1. Open the Palo Cell Input dialog and set the output type for every field in the table.
  2. Delete rows for fields you do not actually need — every row must have a type.
  3. Re-open and re-save old transformations so metadata is upgraded to include field types before previewing.
  4. 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

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


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)