pentaho/pentaho-kettle · critical · KettleException
dbInterface.getUnsupportedTableOutputMessage()
Error message
dbInterface.getUnsupportedTableOutputMessage()
What it means
During step initialization, the connected database's dialect (DatabaseInterface) reports supportsStandardTableOutput() == false, so TableOutput refuses to run and surfaces the dialect's own explanation via getUnsupportedTableOutputMessage(). Certain database types (e.g. SAP HANA-specific or specialized dialects) require dedicated steps instead of the generic TableOutput.
Solutions
- Read the dialect's getUnsupportedTableOutputMessage() for the required alternative step and use it (e.g. the database-specific output step).
- Check the connection's 'Database type' setting; if you intended a standard database, select the correct generic dialect.
- Upgrade Pentaho/Kettle if a newer version adds standard table output support for that dialect.
Example fix
// before: connection database type = SAP HANA (monetdb-like dialect) with TableOutput // after: switch connection database type to the correct standard dialect, or use the HANA-specific output step
Defensive patterns
Strategy: validation
Validate before calling
// Check dialect support before building/running the transformation
DatabaseInterface dbi = databaseMeta.getDatabaseInterface();
if ( !dbi.supportsStandardTableOutput() ) {
throw new IllegalStateException( dbi.getUnsupportedTableOutputMessage() );
} Try / catch
try {
step.init( meta, data );
} catch ( KettleException e ) {
if ( e.getMessage().contains( "table output" ) || e.getMessage().contains( "TableOutput" ) ) {
// switch to the dialect-specific output step or correct database type
}
} Prevention
- Verify the connection's database type/dialect supports generic TableOutput before designing the transformation
- Use the vendor-specific output step for databases with dedicated dialects
- Test transformations on the target connection type in a dev environment first
When it happens
Trigger: init() succeeds in connecting, but dbInterface.supportsStandardTableOutput() returns false for the configured DatabaseMeta's database type, causing throw new KettleException(dbInterface.getUnsupportedTableOutputMessage()).
Common situations: Using a database connection type whose dialect forbids standard table output (e.g. SAP HANA with the dedicated HANA output step required); accidentally selecting the wrong database type in the connection dialog; plugin dialects that only support their own output steps.
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
- Error inserting row into table [tableName] with values…
- Error updating batch
- Errors encountered (first 10): ...
- Following required files are missing:
- LoadFileInput.Log.RequiredFilesMissing
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/025c6bfcaaaf42ad.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/tableoutput/TableOutput.java:507
// Disable batch mode in case
// - we use an unlimited commit size
// - if we need to pick up auto-generated keys
// - if you are running the transformation as a single database transaction (unique connections)
// - if we are reverting to save-points
data.batchMode =
meta.useBatchUpdate()
&& data.commitSize > 0 && !meta.isReturningGeneratedKeys()
&& !getTransMeta().isUsingUniqueConnections() && !data.useSafePoints;
// Per PDI-6211 : give a warning that batch mode operation in combination with step error handling can lead to
// incorrectly processed rows.
if ( getStepMeta().isDoingErrorHandling() && !dbInterface.supportsErrorHandlingOnBatchUpdates() ) {
log.logMinimal( BaseMessages.getString(
PKG, "TableOutput.Warning.ErrorHandlingIsNotFullySupportedWithBatchProcessing" ) );
}
if ( !dbInterface.supportsStandardTableOutput() ) {
throw new KettleException( dbInterface.getUnsupportedTableOutputMessage() );
}
if ( log.isBasic() ) {
logBasic( "Connected to database [" + meta.getDatabaseMeta() + "] (commit=" + data.commitSize + ")" );
}
// Postpone commit as long as possible. PDI-2091
if ( data.commitSize == 0 ) {
data.commitSize = Integer.MAX_VALUE;
}
data.db.setCommitSize( data.commitSize );
if ( !meta.isPartitioningEnabled() && !meta.isTableNameInField() ) {
data.tableName = environmentSubstitute( meta.getTableName() );
}
return true;
} catch ( KettleException e ) {View on GitHub (pinned to f3058517a1)