pentaho/pentaho-kettle · error · KettleException

InsertUpdateMeta.Exception.TableNotSpecified

Error message

InsertUpdateMeta.Exception.TableNotSpecified

What it means

Thrown by InsertUpdateMeta.getTableFields() when the step has no table name configured, so the metadata lookup cannot inspect the target table's fields. Kettle throws it early to fail transformation validation rather than at runtime against the database. The message comes from the InsertUpdateMeta messages bundle.

Solutions

  1. Open the Insert Update step dialog and set the Target table (browse the schema to pick it).
  2. If the table name uses ${VARIABLE}, confirm the variable is defined for the run (kettle.properties, parameter, or set-variable step).
  3. Re-check the .ktr XML / repository metadata for an empty <table> element and restore it.
  4. Verify the database connection is defined first, since the check runs only after connection validation.

Example fix

// before (XML in .ktr)
<table/>
// after
<table>PUBLIC.CUSTOMERS</table>
Defensive patterns

Strategy: validation

Validate before calling

// Before running the transform, verify the step config
InsertUpdateMeta meta = ...;
if (meta.getTableName() == null || meta.getTableName().trim().isEmpty()) {
  throw new IllegalStateException("Insert Update step: target table must be specified");
}

Prevention

When it happens

Trigger: Calling getTableFields() (e.g. during 'Get Fields' in the dialog or transformation validation) when getTableName() returns null or an empty string after variable/parameter substitution.

Common situations: A transformation was exported/copied without the table field populated; the table name was supplied only via a variable that is undefined in the current environment; hand-edited XML or repository metadata lost the table name.

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/1a7636d94b229f6c. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/insertupdate/InsertUpdateMeta.java:815

  public RowMetaInterface getRequiredFields( VariableSpace space ) throws KettleException {
    String realSchemaName = space.environmentSubstitute( schemaName );
    String realTableName = space.environmentSubstitute( tableName );

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

        if ( !Utils.isEmpty( realTableName ) ) {
          // Check if this table exists...
          if ( db.checkTableExists( realSchemaName, realTableName ) ) {
            return db.getTableFieldsMeta( realSchemaName, realTableName );
          } else {
            throw new KettleException( BaseMessages.getString( PKG, "InsertUpdateMeta.Exception.TableNotFound" ) );
          }
        } else {
          throw new KettleException( BaseMessages.getString( PKG, "InsertUpdateMeta.Exception.TableNotSpecified" ) );
        }
      } catch ( Exception e ) {
        throw new KettleException(
          BaseMessages.getString( PKG, "InsertUpdateMeta.Exception.ErrorGettingFields" ), e );
      } finally {
        db.close();
      }
    } else {
      throw new KettleException( BaseMessages.getString( PKG, "InsertUpdateMeta.Exception.ConnectionNotDefined" ) );
    }

  }

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

View on GitHub (pinned to f3058517a1)