{"record":{"id":"bc5f6151c5bbebc9","repo":"pentaho/pentaho-kettle","slug":"gpbulkloadermeta-exception-tablenotspecified","errorCode":null,"errorMessage":"GPBulkLoaderMeta.Exception.TableNotSpecified","messagePattern":"GPBulkLoaderMeta\\.Exception\\.TableNotSpecified","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/gp-bulk-loader/core/src/main/java/org/pentaho/di/trans/steps/gpbulkloader/GPBulkLoaderMeta.java","lineNumber":674,"sourceCode":"    String realTableName = space.environmentSubstitute( tableName );\n    String realSchemaName = space.environmentSubstitute( schemaName );\n\n    if ( databaseMeta != null ) {\n      Database db = new Database( loggingObject, databaseMeta );\n      try {\n        db.connect();\n\n        if ( !Utils.isEmpty( realTableName ) ) {\n          String schemaTable = databaseMeta.getQuotedSchemaTableCombination( realSchemaName, realTableName );\n\n          // Check if this table exists...\n          if ( db.checkTableExists( schemaTable ) ) {\n            return db.getTableFields( schemaTable );\n          } else {\n            throw new KettleException( BaseMessages.getString( PKG, \"GPBulkLoaderMeta.Exception.TableNotFound\" ) );\n          }\n        } else {\n          throw new KettleException( BaseMessages.getString( PKG, \"GPBulkLoaderMeta.Exception.TableNotSpecified\" ) );\n        }\n      } catch ( Exception e ) {\n        throw new KettleException(\n          BaseMessages.getString( PKG, \"GPBulkLoaderMeta.Exception.ErrorGettingFields\" ), e );\n      } finally {\n        db.close();\n      }\n    } else {\n      throw new KettleException( BaseMessages.getString( PKG, \"GPBulkLoaderMeta.Exception.ConnectionNotDefined\" ) );\n    }\n\n  }\n\n  /**\n   * @return the schemaName\n   */\n  @Override\n  public String getSchemaName() {","sourceCodeStart":656,"sourceCodeEnd":692,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/gp-bulk-loader/core/src/main/java/org/pentaho/di/trans/steps/gpbulkloader/GPBulkLoaderMeta.java#L656-L692","documentation":"Thrown by GPBulkLoaderMeta.getRequiredFields when no target table name is configured. Before touching the database the method checks Utils.isEmpty(tableName); if empty it raises the localized TableNotSpecified message as a KettleException.","triggerScenarios":"Calling getRequiredFields when the step's table name field is blank (or an environment variable substituted to empty), even though a connection is defined.","commonSituations":"Newly added step not yet configured; ${TABLE_NAME} variable not set in the run environment; table name cleared accidentally in the dialog.","solutions":["Set the target table name in the GP Bulk Loader step dialog","Ensure any variable used for the table name (e.g. ${TABLE}) is defined in the runtime environment/kettle.properties","Re-enter and save the transformation after filling the table field"],"exampleFix":"// before\nString tableName = \"\"; // empty in step settings -> KettleException TableNotSpecified\n// after: set in dialog or via variable\nString tableName = environmentSubstitute( \"${TARGET_TABLE}\" ); // e.g. public.facts","handlingStrategy":"validation","validationCode":"// Java check before invoking the step\nif ( meta.getTableName() == null || meta.getTableName().trim().isEmpty()\n     || environmentSubstitute( meta.getTableName() ).trim().isEmpty() ) {\n  throw new IllegalArgumentException( \"Target table must be set\" );\n}","typeGuard":null,"tryCatchPattern":"try { meta.getRequiredFields( transMeta ); } catch ( KettleException e ) { /* prompt user to set table name */ }","preventionTips":["Always fill the table field in the dialog before saving","Keep variables like ${TABLE_NAME} in kettle.properties for all environments","Audit saved transformations for empty required fields before scheduling"],"tags":["kettle","database","configuration","missing-table-name"],"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"}