pentaho/pentaho-kettle · error · KettleException

PrioritizeStreams.Error.NotInputSteps

Error message

PrioritizeStreams.Error.NotInputSteps

What it means

KettleException thrown by PrioritizeStreams.processRow during initialization when the step does not have at least two input steps. PrioritizeStreams merges and sorts rows coming from multiple stream inputs; with fewer than two (fewer than the number of sorted steps configured) it cannot do its work, so processRow aborts the step with this message.

Solutions

  1. Connect at least two upstream steps to the Prioritize Streams step and re-run.
  2. Verify the 'step name' list in the step settings matches the actual connected inputs.
  3. Check upstream steps are not disabled/skipped at runtime.

Example fix

// before: single hop into Prioritize Streams
Table Input -> Prioritize Streams  // throws
// after: two hops
Table Input A -> Prioritize Streams
Table Input B -> Prioritize Streams
Defensive patterns

Strategy: validation

Validate before calling

// Validate hop structure before running the transformation
String[] in = stepMeta.getStepMetaInterface() instanceof PrioritizeStreamsMeta ? stepMeta.getMeta() : null;
long inputHops = transMeta.findNumberPrevSteps(stepMeta); // must be >= 2
if (inputHops < 2) throw new IllegalStateException("Prioritize Streams needs at least 2 input steps");

Try / catch

try { trans.execute(null); } catch (KettleException e) { if (e.getMessage().contains("NotInputSteps") || e.getMessage().contains("input")) { log.error("Wire at least two streams into Prioritize Streams", e); } throw e; }

Prevention

When it happens

Trigger: The step is wired with 0 or 1 input hop at runtime, or the number of connected input streams is fewer than the configured number of steps to prioritize, checked in the 'first' block of processRow when data.rowSets is inspected.

Common situations: Upstream steps disabled or deleted so their hops disappear; a transformation copy where only one stream connects to the prioritize step; misconfigured transformation run headless via Kitchen.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/prioritizestreams/PrioritizeStreams.java:66

  public boolean processRow( StepMetaInterface smi, StepDataInterface sdi ) throws KettleException {
    meta = (PrioritizeStreamsMeta) smi;
    data = (PrioritizeStreamsData) sdi;

    if ( first ) {
      if ( meta.getStepName() != null || meta.getStepName().length > 0 ) {
        data.stepnrs = meta.getStepName().length;
        data.rowSets = new RowSet[data.stepnrs];

        for ( int i = 0; i < data.stepnrs; i++ ) {
          data.rowSets[i] = findInputRowSet( meta.getStepName()[i] );
          if ( i > 0 ) {
            // Compare layout of first stream with the current stream
            checkInputLayoutValid( data.rowSets[0].getRowMeta(), data.rowSets[i].getRowMeta() );
          }
        }
      } else {
        // error
        throw new KettleException( BaseMessages.getString( PKG, "PrioritizeStreams.Error.NotInputSteps" ) );
      }
      data.currentRowSet = data.rowSets[0];
    } // end if first, part 1

    Object[] input = getOneRow();

    while ( input == null && data.stepnr < data.stepnrs - 1 && !isStopped() ) {
      input = getOneRow();
    }

    if ( input == null ) {
      // no more input to be expected...
      setOutputDone();
      return false;
    }

    if ( first ) {
      // Take the row Meta from the first rowset read

View on GitHub (pinned to f3058517a1)