pentaho/pentaho-kettle · error · KettleException

GPLoadDataOutput.Exception.TypeNotSupported

Error message

GPLoadDataOutput.Exception.TypeNotSupported

What it means

writeLine() formats each field value by the value's ValueMeta type (String, Date, Number, etc.). The default branch throws this KettleException when it encounters a value type it does not know how to serialize into the gpload data file (e.g. Binary, Serializable, Timestamp-like types in this version).

Solutions

  1. Convert unsupported fields to supported types before GPload (e.g. 'If field value is null'/'Select values' to convert to String or Number, or format dates with a Formula/UDJE step)
  2. Drop unnecessary columns via a Select values step so only supported types reach GPload
  3. Check the plugin's writeLine switch and upgrade the PDI/GPload plugin version that supports the type
  4. For binary data, encode it (Base64) into a String field first

Example fix

// before
row: { id:Number, payload:Binary }
// after (Select values: payload -> String)
row: { id:Number, payload:String } // Base64 or text-encoded
Defensive patterns

Strategy: type-guard

Validate before calling

for (ValueMetaInterface v : rowMeta.getValueMetaList()) {
  int t = v.getType();
  if (!(t == ValueMetaInterface.TYPE_STRING || t == ValueMetaInterface.TYPE_NUMBER
     || t == ValueMetaInterface.TYPE_INTEGER || t == ValueMetaInterface.TYPE_DATE
     || t == ValueMetaInterface.TYPE_BOOLEAN || t == ValueMetaInterface.TYPE_BIGNUMBER)) {
    throw new IllegalStateException("Unsupported type for GPload: " + v.toStringMeta());
  }
}

Type guard

boolean isGploadSupported(ValueMetaInterface v) {
  switch (v.getType()) {
    case ValueMetaInterface.TYPE_STRING: case ValueMetaInterface.TYPE_NUMBER:
    case ValueMetaInterface.TYPE_INTEGER: case ValueMetaInterface.TYPE_DATE:
    case ValueMetaInterface.TYPE_BOOLEAN: case ValueMetaInterface.TYPE_BIGNUMBER:
      return true; default: return false;
  }
}

Try / catch

try { ... } catch (KettleException e) { if (e.getMessage().contains("TypeNotSupported")) { logError("Convert field to String/Number before GPload: " + e.getMessage()); } throw e; }

Prevention

When it happens

Trigger: A row field reaching GPload has a type outside the supported set — commonly Binary, Serializable, Internet Address, or a Timestamp/big-number type whose switch branch is absent in this PDI version.

Common situations: Feeding binary/blob columns from a table input; upstream step changed a field's type (e.g. String to Binary); upgrading PDI introduced new types while the GPload plugin formatter lags behind.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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

Appendix: source

Thrown at plugins/gpload/core/src/main/java/org/pentaho/di/trans/steps/gpload/GPLoadDataOutput.java:253

            } else {
              output.print( "N" );
            }
            output.print( enclosure );
            break;
          case ValueMetaInterface.TYPE_BINARY:
            byte[] byt = mi.getBinary( row, number );
            output.print( "<startlob>" );
            output.print( byt );
            output.print( "<endlob>" );
            break;
          case ValueMetaInterface.TYPE_TIMESTAMP:
            Date time = mi.getDate( row, number );
            output.print( enclosure );
            output.print( sdfDateTime.format( time ) );
            output.print( enclosure );
            break;
          default:
            throw new KettleException( BaseMessages.getString( PKG, "GPLoadDataOutput.Exception.TypeNotSupported", v
                .getType() ) );
        }
      }
    }
    output.print( Const.CR );
  }
}

View on GitHub (pinned to f3058517a1)