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
- 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
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
- 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
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
- GPBulkLoaderMeta.Exception.ConnectionNotDefined
- InfobrightLoaderMeta.GetSQL.NoConnectionDefined
- LucidDBStreamingLoaderMeta.Exception.ConnectionNotDefined
- No connection specified
- SQLFileOutputMeta.Exception.ConnectionNotDefined
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)