pentaho/pentaho-kettle · critical · KettleException
Error: Table doesn't existing in LucidDB
Error message
Error: Table {0} doesn't existing in LucidDB What it means
Before streaming rows, LucidDBStreamingLoader optionally verifies the target table exists via data.db.checkTableExists(qualifiedTableName); if absent it throws KettleException 'Error: Table {qualifiedTableName} doesn't existing in LucidDB'. The loader requires a pre-existing table to attach its streaming UDX.
Solutions
- Create the target table in LucidDB (e.g. via SQL: CREATE TABLE schema.table (...)) before running the transformation
- Verify the LucidDB connection points to the expected database/catalog
- Check that schema/table variables resolve to the intended names (log environmentSubstitute results)
- Fix case/quote handling in the schema and table names
Example fix
// before: table missing // after: create it first String sql = "CREATE TABLE " + qualifiedTableName + " (id INT, name VARCHAR(100))"; data.db.execStatement(sql);
Defensive patterns
Strategy: validation
Validate before calling
DatabaseMeta dbMeta = meta.getDatabaseMeta();
String qualified = dbMeta.getQuotedSchemaTableCombination(schema, table);
if (!db.checkTableExists(qualified)) {
throw new KettleException("Create table " + qualified + " before running the loader");
} Try / catch
try {
loader.processRow();
} catch (KettleException e) {
if (e.getMessage().contains("doesn't existing in LucidDB")) {
logError("Create the target table in LucidDB first");
}
throw e;
} Prevention
- Create the target table as a prerequisite step in the job
- Use DDL scripts managed alongside transformations
- Verify schema/table variable values per environment
When it happens
Trigger: processRow runs with 'truncate table' / existence-check enabled and the schema-qualified table (environmentSubstitute(schema) + environmentSubstitute(table)) does not exist in the LucidDB database.
Common situations: Table never created or dropped; wrong schema name; connected to the wrong LucidDB instance/catalog; variables in schema/table names substitute to different values per environment; case-sensitive schema/table naming.
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
- LucidDBStreamingLoaderMeta.Exception.TableNotFound
- LucidDBStreamingLoaderMeta.Exception.TableNotSpecified
- SynchronizeAfterMergeMeta.Exception.TableNotSpecified
- TableOutputMeta.Exception.TableNotFound
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/c3c4ef3d7a10e441.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/lucid-db-streaming-loader/core/src/main/java/org/pentaho/di/trans/steps/luciddbstreamingloader/LucidDBStreamingLoader.java:141
return false;
}
if ( first ) {
first = false;
// For anything other than Custom operations, check to see if the table exists
if ( meta.getOperation() != LucidDBStreamingLoaderMeta.OPERATION_CUSTOM ) {
if ( log.isDebug() ) {
logDebug( "Connected to LucidDB" );
}
String qualifiedTableName =
meta.getDatabaseMeta().getQuotedSchemaTableCombination(
environmentSubstitute( meta.getSchemaName() ), environmentSubstitute( meta.getTableName() ) );
if ( !data.db.checkTableExists( qualifiedTableName ) ) {
throw new KettleException( "Error: Table " + qualifiedTableName + " doesn't existing in LucidDB" );
}
}
String sql = meta.getDMLStatement( this, getInputRowMeta() );
PreparedStatement ps = data.db.prepareSQL( sql );
if ( log.isDebug() ) {
logDebug( "Executing sql statements..." );
}
data.sqlRunner = new SqlRunner( data, ps );
data.sqlRunner.start();
if ( log.isDebug() ) {
logDebug( "Remote rows is up now..." );
}
View on GitHub (pinned to f3058517a1)