{"record":{"id":"025c6bfcaaaf42ad","repo":"pentaho/pentaho-kettle","slug":"dbinterface-getunsupportedtableoutputmessage","errorCode":null,"errorMessage":"dbInterface.getUnsupportedTableOutputMessage()","messagePattern":"dbInterface\\.getUnsupportedTableOutputMessage\\(\\)","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"critical","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/tableoutput/TableOutput.java","lineNumber":507,"sourceCode":"        // Disable batch mode in case\n        // - we use an unlimited commit size\n        // - if we need to pick up auto-generated keys\n        // - if you are running the transformation as a single database transaction (unique connections)\n        // - if we are reverting to save-points\n        data.batchMode =\n          meta.useBatchUpdate()\n            && data.commitSize > 0 && !meta.isReturningGeneratedKeys()\n            && !getTransMeta().isUsingUniqueConnections() && !data.useSafePoints;\n\n        // Per PDI-6211 : give a warning that batch mode operation in combination with step error handling can lead to\n        // incorrectly processed rows.\n        if ( getStepMeta().isDoingErrorHandling() && !dbInterface.supportsErrorHandlingOnBatchUpdates() ) {\n          log.logMinimal( BaseMessages.getString(\n            PKG, \"TableOutput.Warning.ErrorHandlingIsNotFullySupportedWithBatchProcessing\" ) );\n        }\n\n        if ( !dbInterface.supportsStandardTableOutput() ) {\n          throw new KettleException( dbInterface.getUnsupportedTableOutputMessage() );\n        }\n\n        if ( log.isBasic() ) {\n          logBasic( \"Connected to database [\" + meta.getDatabaseMeta() + \"] (commit=\" + data.commitSize + \")\" );\n        }\n\n        // Postpone commit as long as possible. PDI-2091\n        if ( data.commitSize == 0 ) {\n          data.commitSize = Integer.MAX_VALUE;\n        }\n        data.db.setCommitSize( data.commitSize );\n\n        if ( !meta.isPartitioningEnabled() && !meta.isTableNameInField() ) {\n          data.tableName = environmentSubstitute( meta.getTableName() );\n        }\n\n        return true;\n      } catch ( KettleException e ) {","sourceCodeStart":489,"sourceCodeEnd":525,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/tableoutput/TableOutput.java#L489-L525","documentation":"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.","triggerScenarios":"init() succeeds in connecting, but dbInterface.supportsStandardTableOutput() returns false for the configured DatabaseMeta's database type, causing throw new KettleException(dbInterface.getUnsupportedTableOutputMessage()).","commonSituations":"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.","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."],"exampleFix":"// before: connection database type = SAP HANA (monetdb-like dialect) with TableOutput\n// after: switch connection database type to the correct standard dialect, or use the HANA-specific output step","handlingStrategy":"validation","validationCode":"// Check dialect support before building/running the transformation\nDatabaseInterface dbi = databaseMeta.getDatabaseInterface();\nif ( !dbi.supportsStandardTableOutput() ) {\n  throw new IllegalStateException( dbi.getUnsupportedTableOutputMessage() );\n}","typeGuard":null,"tryCatchPattern":"try {\n  step.init( meta, data );\n} catch ( KettleException e ) {\n  if ( e.getMessage().contains( \"table output\" ) || e.getMessage().contains( \"TableOutput\" ) ) {\n    // switch to the dialect-specific output step or correct database type\n  }\n}","preventionTips":["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"],"tags":["kettle","table-output","database-dialect","unsupported","init"],"backgroundTag":"unsupported-operation","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}