pentaho/pentaho-kettle · error · KettleException

GPBulkLoaderMeta.Exception.TableNotSpecified

Error message

GPBulkLoaderMeta.Exception.TableNotSpecified

What it means

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.

Solutions

  1. Set the target table name in the GP Bulk Loader step dialog
  2. Ensure any variable used for the table name (e.g. ${TABLE}) is defined in the runtime environment/kettle.properties
  3. Re-enter and save the transformation after filling the table field

Example fix

// before
String tableName = ""; // empty in step settings -> KettleException TableNotSpecified
// after: set in dialog or via variable
String tableName = environmentSubstitute( "${TARGET_TABLE}" ); // e.g. public.facts
Defensive patterns

Strategy: validation

Validate before calling

// Java check before invoking the step
if ( meta.getTableName() == null || meta.getTableName().trim().isEmpty()
     || environmentSubstitute( meta.getTableName() ).trim().isEmpty() ) {
  throw new IllegalArgumentException( "Target table must be set" );
}

Try / catch

try { meta.getRequiredFields( transMeta ); } catch ( KettleException e ) { /* prompt user to set table name */ }

Prevention

When it happens

Trigger: Calling getRequiredFields when the step's table name field is blank (or an environment variable substituted to empty), even though a connection is defined.

Common situations: Newly added step not yet configured; ${TABLE_NAME} variable not set in the run environment; table name cleared accidentally in the dialog.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/bc5f6151c5bbebc9. Report an issue: GitHub.

Appendix: source

Thrown at plugins/gp-bulk-loader/core/src/main/java/org/pentaho/di/trans/steps/gpbulkloader/GPBulkLoaderMeta.java:674

    String realTableName = space.environmentSubstitute( tableName );
    String realSchemaName = space.environmentSubstitute( schemaName );

    if ( databaseMeta != null ) {
      Database db = new Database( loggingObject, databaseMeta );
      try {
        db.connect();

        if ( !Utils.isEmpty( realTableName ) ) {
          String schemaTable = databaseMeta.getQuotedSchemaTableCombination( realSchemaName, realTableName );

          // Check if this table exists...
          if ( db.checkTableExists( schemaTable ) ) {
            return db.getTableFields( schemaTable );
          } else {
            throw new KettleException( BaseMessages.getString( PKG, "GPBulkLoaderMeta.Exception.TableNotFound" ) );
          }
        } else {
          throw new KettleException( BaseMessages.getString( PKG, "GPBulkLoaderMeta.Exception.TableNotSpecified" ) );
        }
      } catch ( Exception e ) {
        throw new KettleException(
          BaseMessages.getString( PKG, "GPBulkLoaderMeta.Exception.ErrorGettingFields" ), e );
      } finally {
        db.close();
      }
    } else {
      throw new KettleException( BaseMessages.getString( PKG, "GPBulkLoaderMeta.Exception.ConnectionNotDefined" ) );
    }

  }

  /**
   * @return the schemaName
   */
  @Override
  public String getSchemaName() {

View on GitHub (pinned to f3058517a1)