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
- Open the Insert Update step dialog and set the Target table (browse the schema to pick it).
- If the table name uses ${VARIABLE}, confirm the variable is defined for the run (kettle.properties, parameter, or set-variable step).
- Re-check the .ktr XML / repository metadata for an empty <table> element and restore it.
- 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
- Always pick the table via the dialog's Browse button rather than typing.
- Keep table-name variables defined in kettle.properties or job parameters.
- Run transformation verification before execution in Spoon.
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
- BaseStreamStepMeta.CheckResult.ResultStepMissing
- CombinationLookup.Log.UnexpectedError
- No mapping (sub-transformation) was specified or it was not…
- TeraFastMeta.Exception.ConnectionNotDefined
- AccessInput.Exception.CouldnotFindField
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)