pentaho/pentaho-kettle · error · KettleException

GoogleAnalytics.Error.UnableToReadFromRep

Error message

GoogleAnalytics.Error.UnableToReadFromRep

What it means

GaInputStepMeta.readRep wraps any exception raised while loading Google Analytics step settings from a Kettle repository into a KettleException with the localized 'GoogleAnalytics.Error.UnableToReadFromRep' message. It guards the repository reads for ga fields, conversion masks and output types, defaulting invalid output types to TYPE_STRING before the catch.

Solutions

  1. Check the nested cause for the real repository/driver failure and fix connectivity or schema issues.
  2. Reconnect the repository and reload the transformation.
  3. Re-save the step from a working client to restore missing attributes.
  4. Verify plugin version compatibility with the repository content.

Example fix

// before
TransMeta tm = new TransMeta( rep, id, metaStore ); // throws on stale connection

// after
if ( !rep.isConnected() ) {
  rep.connect( user, pass );
}
TransMeta tm = new TransMeta( rep, id, metaStore );
Defensive patterns

Strategy: try-catch

Validate before calling

if ( rep == null || !rep.isConnected() ) {
  rep.connect( user, pass );
}

Try / catch

try {
  transMeta = new TransMeta( rep, id, metaStore );
} catch ( KettleException e ) {
  log.error( "readRep failed: " + e.getMessage(), e.getCause() );
}

Prevention

When it happens

Trigger: Calling readRep(Repository, IMetaStore, ObjectId, List<DatabaseMeta>) when rep.getStepAttributeString/... calls for id_step throw — dead repository connection, missing step row, or repository driver error.

Common situations: Opening a stored transformation while the repository DB is unreachable; step attributes partially deleted; repository schema changed between Pentaho versions so expected attributes are absent.

Understand the failure class

Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.

Related errors


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

Appendix: source

Thrown at plugins/google-analytics/core/src/main/java/org/pentaho/di/trans/steps/googleanalytics/GaInputStepMeta.java:573

      rowLimit = (int) rep.getStepAttributeInteger( id_step, "rowLimit" );

      int nrFields = rep.countNrStepAttributes( id_step, "feedField" );
      allocate( nrFields );

      for ( int i = 0; i < nrFields; i++ ) {

        feedFieldType[ i ] = rep.getStepAttributeString( id_step, i, "feedFieldType" );
        feedField[ i ] = rep.getStepAttributeString( id_step, i, "feedField" );
        outputField[ i ] = rep.getStepAttributeString( id_step, i, "outField" );
        outputType[ i ] = ValueMetaFactory.getIdForValueMeta( rep.getStepAttributeString( id_step, i, "type" ) );
        conversionMask[ i ] = rep.getStepAttributeString( id_step, i, "conversionMask" );

        if ( outputType[ i ] < 0 ) {
          outputType[ i ] = ValueMetaInterface.TYPE_STRING;
        }
      }
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG, "GoogleAnalytics.Error.UnableToReadFromRep" ), e );
    }
  }

  @Override
  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
    throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "oauthServiceAccount", oauthServiceAccount );
      rep.saveStepAttribute( id_transformation, id_step, "oauthKeyFile", oauthKeyFile );
      rep.saveStepAttribute( id_transformation, id_step, "appName", gaAppName );
      rep.saveStepAttribute( id_transformation, id_step, "profileName", gaProfileName );
      rep.saveStepAttribute( id_transformation, id_step, "profileTableId", gaProfileTableId );
      rep.saveStepAttribute( id_transformation, id_step, "customTableId", gaCustomTableId );
      rep.saveStepAttribute( id_transformation, id_step, "useCustomTableId", useCustomTableId );
      rep.saveStepAttribute( id_transformation, id_step, "startDate", startDate );
      rep.saveStepAttribute( id_transformation, id_step, "endDate", endDate );
      rep.saveStepAttribute( id_transformation, id_step, "dimensions", dimensions );
      rep.saveStepAttribute( id_transformation, id_step, "metrics", metrics );

View on GitHub (pinned to f3058517a1)