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

  1. Create the target table in LucidDB (e.g. via SQL: CREATE TABLE schema.table (...)) before running the transformation
  2. Verify the LucidDB connection points to the expected database/catalog
  3. Check that schema/table variables resolve to the intended names (log environmentSubstitute results)
  4. 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

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


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)