{"record":{"id":"1877ba4ea0d73878","repo":"pentaho/pentaho-kettle","slug":"transformation-type-0-is-an-unsupported-transformation-type","errorCode":null,"errorMessage":"Transformation type '{0}' is an unsupported transformation type for a mapping","messagePattern":"Transformation type '(.+?)' is an unsupported transformation type for a mapping","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/mapping/Mapping.java","lineNumber":255,"sourceCode":"            List<RowSet> mappingInputRowSets = mappingInputs[0].getInputRowSets();\n            log.logDebug( \"# of input buffers: \" + mappingInputRowSets.size() );\n            if ( mappingInputRowSets.size() > 0 ) {\n              log.logDebug( \"Input buffer 0 size: \" + mappingInputRowSets.get( 0 ).size() );\n            }\n          }\n\n          // Now execute one batch...Basic logging\n          //\n          boolean result = getData().singleThreadedTransExcecutor.oneIteration();\n          if ( !result ) {\n            getData().singleThreadedTransExcecutor.dispose();\n            setOutputDone();\n            return false;\n          }\n          return true;\n\n        default:\n          throw new KettleException( \"Transformation type '\"\n              + getData().mappingTransMeta.getTransformationType().getDescription()\n              + \"' is an unsupported transformation type for a mapping\" );\n      }\n    } catch ( Throwable t ) {\n      // Some unexpected situation occurred.\n      // Better to stop the mapping transformation.\n      //\n      if ( getData().getMappingTrans() != null ) {\n        getData().getMappingTrans().stopAll();\n      }\n\n      // Forward the exception...\n      //\n      throw new KettleException( t );\n    }\n  }\n\n","sourceCodeStart":237,"sourceCodeEnd":273,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/mapping/Mapping.java#L237-L273","documentation":"Mapping (the sub-transformation executor step) only supports Normal, SerialSingleThreaded and SingleThreaded transformation types. When the parent transformation's Mapping step reaches the default branch of its type switch in processRow, the sub-transformation's TransformationType is something the mapping executor cannot drive, so it fails fast with a KettleException including the type description.","triggerScenarios":"Running a mapping whose sub-transformation's TransformationType property resolves to a type not handled by the switch in Mapping.processRow (e.g. a type added in a newer Pentaho version, or a sub-transformation corrupted/misconfigured so getType() returns NormalProcessor-like or unknown types).","commonSituations":"Opening transformations saved in a newer PDI version in an older engine; manually editing transformation type in the XML/ktr; programmatic construction of TransMeta without setting TransformationType properly; plugins that set custom execution engine types.","solutions":["Open the sub-transformation and set Transformation properties > Transformation type to Normal, then re-run.","Edit the .ktr XML and set the trans_type attribute to Normal (or SingleThreaded/SerialSingleThreaded).","If the ktr comes from a newer PDI version, upgrade the Pentaho Kettle engine to a version that supports that transformation type.","If constructing TransMeta in code, call transMeta.setTransformationType(TransformationType.Normal) before executing the mapping."],"exampleFix":"// before (ktr XML)\n<info><trans_type>NormalProcessor</trans_type></info>\n// after\n<info><trans_type>Normal</trans_type></info>","handlingStrategy":"validation","validationCode":"TransformationType t = mappingTransMeta.getTransformationType();\nif (t != TransformationType.Normal && t != TransformationType.SingleThreaded\n    && t != TransformationType.SerialSingleThreaded) {\n  throw new IllegalArgumentException(\"Unsupported mapping transformation type: \" + t);\n}","typeGuard":"boolean isSupportedMappingType(TransMeta tm) {\n  TransformationType t = tm == null ? null : tm.getTransformationType();\n  return t == TransformationType.Normal\n      || t == TransformationType.SingleThreaded\n      || t == TransformationType.SerialSingleThreaded;\n}","tryCatchPattern":"try {\n  mapping.processRow();\n} catch (KettleException e) {\n  if (e.getMessage() != null && e.getMessage().contains(\"unsupported transformation type\")) {\n    logError(\"Fix the sub-transformation's transformation type (use Normal)\", e);\n  } else { throw e; }\n}","preventionTips":["Always create mapping sub-transformation files as type Normal unless deliberately single-threaded.","Validate ktr XML trans_type before loading files from other PDI versions.","Keep engine and Spoon versions aligned so supported TransformationTypes match.","When constructing TransMeta in code, explicitly set TransformationType."],"tags":["pdi","kettle","mapping-step","transformation-type","config"],"backgroundTag":"unsupported-enum-value","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"}