pentaho/pentaho-kettle · error · KettleException

SplitFieldToRowsMeta.Exception.UnexpectedErrorInReadingStepInfo

SplitFieldToRowsMeta.Exception.UnexpectedErrorInReadingStepInfo

Error message

SplitFieldToRowsMeta.Exception.UnexpectedErrorInReadingStepInfo

What it means

Thrown by SplitFieldToRowsMeta.readRep when loading this step's settings from a repository fails. The method reads step attributes (newfield, rownum, rownum_field, reset_rownumber, delimiter_is_regex) via the Repository API; any exception is wrapped in a KettleException with this message key. It means the step configuration could not be reconstructed from the repository.

Solutions

  1. Check the wrapped cause for the repository/database error
  2. Verify repository connectivity and reconnect
  3. Run the repository schema upgrade for your PDI version
  4. Reload the transformation after the repository is healthy

Example fix

// before
TransMeta tm = new TransMeta();
tm.loadTransMeta(rep, id_transformation, metaStore); // may throw
// after
try {
  tm.loadTransMeta(rep, id_transformation, metaStore);
} catch (KettleException e) {
  logError("Failed reading step from repository: " + e.getCause());
  rep.disconnect(); rep.connect();
  tm.loadTransMeta(rep, id_transformation, metaStore);
}
Defensive patterns

Strategy: try-catch

Validate before calling

// before loading from repository
if (!rep.isConnected()) rep.connect();
ObjectId id = rep.getTransformationID(name, dir); // throws early if missing

Try / catch

try { transMeta.loadTransMeta(rep, id, metaStore); } catch (KettleException e) { logError("Repository read failed: " + e.getCause()); /* reconnect or fall back to file load */ }

Prevention

When it happens

Trigger: Calling TransMeta.loadFromRepository where getStepAttributeString/getStepAttributeBoolean throws — repository DB connection failure, missing R_STEP_ATTRIBUTE rows, or a schema mismatch between PDI version and repository tables.

Common situations: Repository database down or network dropped while opening a transformation from the repository; repository schema not upgraded after PDI upgrade; step deleted from repository by another user mid-load.

Understand the failure class

Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/splitfieldtorows/SplitFieldToRowsMeta.java:193

    retval.append( "   " + XMLHandler.addTagValue( "rownum", includeRowNumber ) );
    retval.append( "   " + XMLHandler.addTagValue( "rownum_field", rowNumberField ) );
    retval.append( "   " + XMLHandler.addTagValue( "resetrownumber", resetRowNumber ) );
    retval.append( "   " + XMLHandler.addTagValue( "delimiter_is_regex", isDelimiterRegex ) );

    return retval.toString();
  }

  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
    try {
      splitField = rep.getStepAttributeString( id_step, "splitfield" );
      delimiter = rep.getStepAttributeString( id_step, "delimiter" );
      newFieldname = rep.getStepAttributeString( id_step, "newfield" );
      includeRowNumber = rep.getStepAttributeBoolean( id_step, "rownum" );
      rowNumberField = rep.getStepAttributeString( id_step, "rownum_field" );
      resetRowNumber = rep.getStepAttributeBoolean( id_step, "reset_rownumber" );
      isDelimiterRegex = rep.getStepAttributeBoolean( id_step, 0, "delimiter_is_regex", false );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "SplitFieldToRowsMeta.Exception.UnexpectedErrorInReadingStepInfo" ), e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "splitfield", splitField );
      rep.saveStepAttribute( id_transformation, id_step, "delimiter", delimiter );
      rep.saveStepAttribute( id_transformation, id_step, "newfield", newFieldname );
      rep.saveStepAttribute( id_transformation, id_step, "rownum", includeRowNumber );
      rep.saveStepAttribute( id_transformation, id_step, "reset_rownumber", resetRowNumber );
      rep.saveStepAttribute( id_transformation, id_step, "rownum_field", rowNumberField );
      rep.saveStepAttribute( id_transformation, id_step, "delimiter_is_regex", isDelimiterRegex );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "SplitFieldToRowsMeta.Exception.UnableToSaveStepInfoToRepository" )
        + id_step, e );
    }

View on GitHub (pinned to f3058517a1)