pentaho/pentaho-kettle · error · KettleException

Failed to add Cell Row:

Error message

Failed to add Cell Row: 

What it means

Thrown by PaloCellOutput.processRow when writing an input row into the Palo cube (directly or from batchCache flush) fails with any exception. The message includes the stringified row content and chains the original exception.

Solutions

  1. Read the chained cause exception to find the failing cell or value.
  2. Verify the field mappings (dimensions and measure) match the target cube's exact structure and data types.
  3. Validate input rows (types, null handling) upstream before the Palo Cell Output step.
  4. Reduce batch size or disable batching to isolate the failing row.
  5. Check Palo server logs and connection stability.

Example fix

null
Defensive patterns

Strategy: validation

Validate before calling

// before run: verify each input row matches cube field count/types
for (Object[] row : rows) { if (row.length != expectedFieldCount) throw new IllegalArgumentException("row width mismatch"); }

Try / catch

try { trans.execute() } catch (KettleException e) { if (e.getMessage().startsWith("Failed to add Cell Row:")) { /* inspect e.getCause() and the row printed in the message */ } }

Prevention

When it happens

Trigger: processRow called with data that doesn't match cube dimension/measure types, an invalid cell coordinate, a Palo server error during addCell/flush of batchCache, or a dropped connection.

Common situations: Field-to-dimension mapping mismatched with cube structure (wrong order/types); string values non-numeric where a measure is expected; batch flush hitting a server-side constraint; Palo server restart mid-run.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/e45a90138b7e5cb7. Report an issue: GitHub.

Appendix: source

Thrown at plugins/palo/core/src/main/java/org/pentaho/di/trans/steps/palo/celloutput/PaloCellOutput.java:102

            newRow[i] = getInputRowMeta().getString( r, data.indexes[i] );
          }
        } else {
          newRow[i] = getInputRowMeta().getString( r, data.indexes[i] );
        }
      }
      data.batchCache.add( newRow );
      if ( data.batchCache.size() == meta.getCommitSize() ) {
        try {
          data.helper.addCells( data.batchCache, meta.getUpdateMode(), meta.getSplashMode() );
          for ( int i = 0; i < data.batchCache.size(); i++ ) {
            incrementLinesOutput();
          }
        } finally {
          data.batchCache.clear();
        }
      }
    } catch ( Exception e ) {
      throw new KettleException( "Failed to add Cell Row: " + row, e );
    }

    return true;
  }

  @Override
  public final boolean init( StepMetaInterface smi, StepDataInterface sdi ) {
    meta = (PaloCellOutputMeta) smi;
    data = (PaloCellOutputData) sdi;

    if ( super.init( smi, sdi ) ) {
      try {
        this.logDebug( "Meta Fields: " + meta.getFields().size() );
        data.helper = new PaloHelper( meta.getDatabaseMeta(), getLogLevel() );
        data.helper.connect();
        data.helper.loadCubeCache( meta.getCube(), meta.getEnableDimensionCache(), meta.getPreloadDimensionCache() );
        data.batchCache.clear();
        return true;

View on GitHub (pinned to f3058517a1)