pentaho/pentaho-kettle · error · KettleException
MonetDBBulkLoaderMeta.Exception.TableNotSpecified
MonetDBBulkLoaderMeta.Exception.TableNotSpecified
Error message
MonetDBBulkLoaderMeta.Exception.TableNotSpecified
What it means
When deriving the step's output fields, MonetDBBulkLoaderMeta requires both a schema and a table name to build the quoted schema.table string; if the table (or schema) name is not specified, it throws KettleException 'TableNotSpecified' instead of querying the database. It is a configuration-completeness guard.
Solutions
- Open the MonetDB Bulk Loader step dialog and set the Target Table (and Schema) fields
- If a variable is used, define it in the transformation/run configuration or as an environment variable before calling getTableFields
- Validate that environmentSubstitute(tableName) returns a non-empty value at runtime
Example fix
// before
String realTableName = environmentSubstitute(tableName);
// after
String realTableName = environmentSubstitute(tableName);
if (Const.isEmpty(realTableName)) {
throw new KettleException("MonetDBBulkLoader target table is not specified");
} Defensive patterns
Strategy: validation
Validate before calling
String realSchema = environmentSubstitute(schemaName);
String realTable = environmentSubstitute(tableName);
if (Const.isEmpty(realTable) || Const.isEmpty(realSchema)) {
throw new KettleException("Schema and table must both be set before reading fields");
} Prevention
- Fill in schema and table fields in the step dialog before clicking 'Get Fields'
- Define variables used in table names in the run configuration or kettle.properties
- Add pre-flight checks in scripts that build transformations programmatically
- Avoid copying step settings between transformations without re-verifying required fields
When it happens
Trigger: Invoking getTableFields (e.g. via the step dialog's 'Get Fields' action) when realTableName (or realSchemaName) resolves to null/empty after variable substitution.
Common situations: User clicks 'Get Fields' before entering a target table; a variable like ${TARGET_TABLE} is undefined in the runtime environment so it substitutes to empty; table name field left blank when copying step settings.
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
- A connection of type PALO is expected
- A server socket allocation always has to accompanied by…
- DimensionLookupMeta.Error.NoTechnicalKeySpecified
- DimensionLookupMeta.Exception.UnableToFindReturnField
- DynamicSQLRow.Exception.SQLFieldNameEmpty
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f7197e95c0805534.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/monet-db-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/monetdbbulkloader/MonetDBBulkLoaderMeta.java:787
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, "MonetDBBulkLoaderMeta.Exception.TableNotFound" ) );
}
} else {
throw new KettleException( BaseMessages.getString(
PKG, "MonetDBBulkLoaderMeta.Exception.TableNotSpecified" ) );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "MonetDBBulkLoaderMeta.Exception.ErrorGettingFields" ), e );
} finally {
db.close();
}
} else {
throw new KettleException( BaseMessages.getString(
PKG, "MonetDBBulkLoaderMeta.Exception.ConnectionNotDefined" ) );
}
}
/**
* @return the schemaName
*/View on GitHub (pinned to f3058517a1)