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

  1. Verify the table exists in the target database: run \dt or SELECT against information_schema.tables in the configured schema
  2. Correct the schema/table name in the step settings (watch for unresolved ${VARIABLE}s)
  3. Create the table before running (or use the step's SQL button to generate the CREATE TABLE)
  4. 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

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


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 schemaName

View on GitHub (pinned to f3058517a1)