{"record":{"id":"2d6772dee69ec03f","repo":"pentaho/pentaho-kettle","slug":"tableexists-error-tablenamefieldmissing","errorCode":null,"errorMessage":"TableExists.Error.TablenameFieldMissing","messagePattern":"TableExists\\.Error\\.TablenameFieldMissing","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/tableexists/TableExists.java","lineNumber":71,"sourceCode":"    Object[] r = getRow(); // Get row from input rowset & set row busy!\n    if ( r == null ) { // no more input to be expected...\n\n      setOutputDone();\n      return false;\n    }\n\n    boolean tablexists = false;\n    try {\n      if ( first ) {\n        first = false;\n        data.outputRowMeta = getInputRowMeta().clone();\n        meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,\n          metaStore );\n\n        // Check is tablename field is provided\n        if ( Utils.isEmpty( meta.getDynamicTablenameField() ) ) {\n          logError( BaseMessages.getString( PKG, \"TableExists.Error.TablenameFieldMissing\" ) );\n          throw new KettleException( BaseMessages.getString( PKG, \"TableExists.Error.TablenameFieldMissing\" ) );\n        }\n\n        // cache the position of the field\n        if ( data.indexOfTablename < 0 ) {\n          data.indexOfTablename = getInputRowMeta().indexOfValue( meta.getDynamicTablenameField() );\n          if ( data.indexOfTablename < 0 ) {\n            // The field is unreachable !\n            logError( BaseMessages.getString( PKG, \"TableExists.Exception.CouldnotFindField\" )\n              + \"[\" + meta.getDynamicTablenameField() + \"]\" );\n            throw new KettleException( BaseMessages.getString(\n              PKG, \"TableExists.Exception.CouldnotFindField\", meta.getDynamicTablenameField() ) );\n          }\n        }\n      } // End If first\n\n      // get tablename\n      String tablename = getInputRowMeta().getString( r, data.indexOfTablename );\n","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/tableexists/TableExists.java#L53-L89","documentation":"TableExists.processRow throws this when the step is configured without a 'tablename field' — the incoming-field name that supplies the table name to check at runtime. The step is dynamic (table name comes from a row field), so that field mapping is mandatory; without it the step cannot run.","triggerScenarios":"Executing a TableExists step whose 'Dynamic table name field' option is enabled (or the step requires it) but meta.getDynamicTablenameField() is empty — i.e. no field was selected in the step dialog before running the transformation.","commonSituations":"Importing a transformation where the field selection was lost; renaming an input field without updating the step; building metadata programmatically and forgetting setDynamicTablenameField(); upgrading from static to dynamic table-name mode.","solutions":["Open the TableExists step dialog and set the 'Tablename field' to an existing incoming field","If building metadata in code, call meta.setDynamicTablenameField(\"yourField\") before running","Verify the transformation was fully migrated — re-enter the field name if it was blanked by an import/export"],"exampleFix":"// before\nTableExistsMeta meta = new TableExistsMeta();\nmeta.setDatabaseMeta(db);\nmeta.setResultFieldName(\"exists\");\n// after\nTableExistsMeta meta = new TableExistsMeta();\nmeta.setDatabaseMeta(db);\nmeta.setDynamicTablenameField(\"tablename\");\nmeta.setResultFieldName(\"exists\");","handlingStrategy":"validation","validationCode":"// before executing the transformation\nTableExistsMeta meta = (TableExistsMeta) stepMeta.getStepMetaInterface();\nif (meta.getDynamicTablenameField() == null || meta.getDynamicTablenameField().isEmpty()) {\n  throw new IllegalStateException(\"TableExists step '\" + stepMeta.getName() + \"' has no tablename field configured\");\n}","typeGuard":null,"tryCatchPattern":"try { trans.execute(null); }\ncatch (KettleException e) {\n  if (e.getMessage().contains(\"TablenameFieldMissing\")) {\n    logError(\"Fix step config: set the dynamic tablename field in TableExists\");\n  }\n}","preventionTips":["Always fill 'Tablename field' when configuring TableExists steps","Run step configuration checks (Verify) before production runs","Validate transformations programmatically with meta.check() after imports"],"tags":["kettle","configuration","missing-field","step-execution"],"backgroundTag":"missing-required-config-field","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"}