pentaho/pentaho-kettle · error · KettleException
LucidDBStreamingLoaderMeta.Exception.TableNotSpecified
Error message
LucidDBStreamingLoaderMeta.Exception.TableNotSpecified
What it means
In the same table-lookup path, if the real table name resolves to empty (realTableName is null/blank after variable resolution) the meta throws KettleException with the localized 'TableNotSpecified' message — the step cannot look up fields without a target table.
Solutions
- Set the target table name in the LucidDB Streaming Loader dialog.
- If using a variable like ${TARGET_TABLE}, define it in transformation parameters, the run configuration, or kettle.properties.
- Validate the step (the metadata check will flag the missing table name before execution).
Example fix
// before (dialog XML)
<table>${TARGET_TABLE}</table> <!-- variable undefined -->
// after: define it, e.g. on kettle.properties or as a transformation parameter
TARGET_TABLE=FACT_SALES Defensive patterns
Strategy: validation
Validate before calling
String table = transMeta.environmentSubstitute(meta.getTableName());
if (table == null || table.trim().isEmpty()) {
throw new KettleException("LucidDB Streaming Loader: target table must be specified");
} Try / catch
try {
meta.getFields(...);
} catch (KettleException e) {
if (e.getMessage().contains("TableNotSpecified")) {
logError("Set the target table (or define its variable) before running");
}
throw e;
} Prevention
- Always fill the Target table field before saving the step.
- Define any ${TABLE} variables in kettle.properties or as transformation parameters.
- Use 'Validate transformation against this environment' before production runs.
- Avoid copying steps with variable-based names without copying the variable definitions.
When it happens
Trigger: Table-lookup code path runs with realSchemaName set but realTableName empty — e.g. the 'Target table' field is blank or its ${TABLE_NAME} variable is not defined at execution time.
Common situations: Variable placeholder in the table name never set via parameters/environment; step copied from another transformation with the table field cleared; dialog saved before filling in the table.
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
- SynchronizeAfterMergeMeta.Exception.TableNotSpecified
- AccessInput.Exception.CouldnotFindField
- AccessInput.Log.NoField
- AddSequence.Exception.NoSpecifiedMethod
- At this time we don't support the use of multiple cluster…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/0d135ee89793aa91.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/lucid-db-streaming-loader/core/src/main/java/org/pentaho/di/trans/steps/luciddbstreamingloader/LucidDBStreamingLoaderMeta.java:842
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, "LucidDBStreamingLoaderMeta.Exception.TableNotFound" ) );
}
} else {
throw new KettleException( BaseMessages.getString(
PKG, "LucidDBStreamingLoaderMeta.Exception.TableNotSpecified" ) );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "LucidDBStreamingLoaderMeta.Exception.ErrorGettingFields" ), e );
} finally {
db.close();
}
} else {
throw new KettleException( BaseMessages.getString(
PKG, "LucidDBStreamingLoaderMeta.Exception.ConnectionNotDefined" ) );
}
}
/**
* @return the schemaName
*/View on GitHub (pinned to f3058517a1)