pentaho/pentaho-kettle · error · KettleException

FieldSplitterMeta.Exception.UnexpectedErrorInReadingStepInfo

Error message

FieldSplitterMeta.Exception.UnexpectedErrorInReadingStepInfo

What it means

FieldSplitterMeta.readRep loads the step's configuration (split field, delimiters, per-field type/length/precision/nullif/ifnull/trimtype) from the repository. Any exception is wrapped in this KettleException.

Solutions

  1. Check KettleException.getCause() for the underlying error
  2. Re-save the step from Spoon to rewrite its repository attributes
  3. Verify repository schema/version compatibility with the installed PDI
  4. Restore affected rows from a repository backup
Defensive patterns

Strategy: try-catch

Validate before calling

if (!repository.isConnected()) { throw new IllegalStateException("Repository not connected"); }

Try / catch

try { meta.readRep(rep, metaStore, idStep, databases); }
catch (KettleException e) {
  log.error("Read from repository failed: {}", e.getCause(), e);
  meta.setDefault(); // degrade to defaults
}

Prevention

When it happens

Trigger: Loading the step from a repository when rep.getStepAttributeString/getStepAttributeInteger throws, or attribute values fail conversion (e.g. getTrimTypeByCode on a bad code) inside the per-field loop.

Common situations: Repository rows saved by an incompatible PDI version; corrupt or partially deleted step attributes; repository connection failure during transformation 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/19943df4c5f0f731. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/fieldsplitter/FieldSplitterMeta.java:519

      for ( int i = 0; i < nrfields; i++ ) {
        fieldName[i] = rep.getStepAttributeString( id_step, i, "field_name" );
        fieldID[i] = rep.getStepAttributeString( id_step, i, "field_id" );
        fieldRemoveID[i] = rep.getStepAttributeBoolean( id_step, i, "field_idrem" );
        fieldType[i] = ValueMetaFactory.getIdForValueMeta( rep.getStepAttributeString( id_step, i, "field_type" ) );
        fieldFormat[i] = rep.getStepAttributeString( id_step, i, "field_format" );
        fieldGroup[i] = rep.getStepAttributeString( id_step, i, "field_group" );
        fieldDecimal[i] = rep.getStepAttributeString( id_step, i, "field_decimal" );
        fieldCurrency[i] = rep.getStepAttributeString( id_step, i, "field_currency" );
        fieldLength[i] = (int) rep.getStepAttributeInteger( id_step, i, "field_length" );
        fieldPrecision[i] = (int) rep.getStepAttributeInteger( id_step, i, "field_precision" );
        fieldNullIf[i] = rep.getStepAttributeString( id_step, i, "field_nullif" );
        fieldIfNull[i] = rep.getStepAttributeString( id_step, i, "field_ifnull" );
        fieldTrimType[i] =
          ValueMetaString.getTrimTypeByCode( rep.getStepAttributeString( id_step, i, "field_trimtype" ) );
      }
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "FieldSplitterMeta.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, "enclosure", enclosure );

      for ( int i = 0; i < fieldName.length; i++ ) {
        rep.saveStepAttribute( id_transformation, id_step, i, "field_name", fieldName[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_id", fieldID[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_idrem", fieldRemoveID[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_type",
          ValueMetaFactory.getValueMetaName( fieldType[i] ) );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_format", fieldFormat[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_group", fieldGroup[i] );

View on GitHub (pinned to f3058517a1)