pentaho/pentaho-kettle · error · KettleException
GPBulkLoaderMeta.Exception.TableNotFound
Error message
GPBulkLoaderMeta.Exception.TableNotFound
What it means
Thrown by GPBulkLoaderMeta.getRequiredFields when the configured target table does not exist in the database. The step checks table existence (db.checkTableExists) before fetching its field metadata to build required fields. Thrown as a KettleException with the localized TableNotFound message.
Solutions
- Verify the table exists in the target database: run \dt or SELECT against information_schema.tables in the configured schema
- Correct the schema/table name in the step settings (watch for unresolved ${VARIABLE}s)
- Create the table before running (or use the step's SQL button to generate the CREATE TABLE)
- Confirm the database connection points to the intended database/schema
Defensive patterns
Strategy: validation
Validate before calling
Database db = new Database( loggingObject, databaseMeta ); db.connect(); boolean exists = db.checkTableExists( databaseMeta.getQuotedSchemaTableCombination( schema, table ) ); db.disconnect(); if ( !exists ) throw new IllegalStateException( "Table missing before run: " + table );
Type guard
boolean tableReady = schemaTable != null && db.checkTableExists( schemaTable );
Try / catch
try { meta.getRequiredFields( transMeta ); } catch ( KettleException e ) { if ( e.getMessage().contains( "TableNotFound" ) ) { /* create table or fix name */ } } Prevention
- Verify schema.table names against information_schema before deploying
- Run the step's SQL generation to create the table in new environments
- Resolve all variables (${TABLE}) in the target environment first
- Confirm the connection points to the expected database/schema
When it happens
Trigger: Calling getRequiredFields with a schema/table name that resolves to a non-existent table (checkTableExists returns false).
Common situations: Typo in table name in the step dialog; table was dropped or renamed; wrong schema name resolved so the quoted schema-table combination points elsewhere; environmentSubstitute left an unresolved variable like ${TABLE} producing a bogus name.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- ERROR0002
- GPBulkLoaderMeta.Exception.TableNotFound
- InsertUpdateMeta.Exception.TableNotFound
- MySQLBulkLoaderMeta.Exception.TableNotFound
- OraBulkLoaderMeta.Exception.TableNotFound
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/28b39a6fee40a565.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/gp-bulk-loader/core/src/main/java/org/pentaho/di/trans/steps/gpbulkloader/GPBulkLoaderMeta.java:671
@Override
public RowMetaInterface getRequiredFields( VariableSpace space ) throws KettleException {
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 schemaNameView on GitHub (pinned to f3058517a1)