pentaho/pentaho-kettle · error · KettleException

LucidDBStreamingLoaderMeta.Exception.TableNotFound

Error message

LucidDBStreamingLoaderMeta.Exception.TableNotFound

What it means

During SQL generation / table-field lookup, the meta class connects to the target database and, if a schema and table name are set, checks db.checkTableExists(schemaTable). When the table does not exist it throws KettleException with the localized 'TableNotFound' message.

Solutions

  1. Create the target table in LucidDB (or run the step's 'SQL' button to generate the CREATE TABLE DDL).
  2. Correct the schema/table names in the step dialog, matching case exactly.
  3. Verify the database connection points to the intended environment.
  4. Check quoting: quoted identifiers in LucidDB are case-sensitive; use the same case used at CREATE time.

Example fix

// before
<schema>SALES</schema><table>FactSalez</table>
// after
<schema>SALES</schema><table>FACT_SALES</table>
Defensive patterns

Strategy: validation

Validate before calling

Database db = new Database(loggingObject, meta.getDatabaseMeta());
db.connect();
String schemaTable = meta.getDatabaseMeta().getQuotedSchemaTableCombination(schema, table);
if (!db.checkTableExists(schemaTable)) {
  throw new KettleException("Target table " + schemaTable + " does not exist; create it before running");
}

Try / catch

try {
  db.getTableFields(schemaTable);
} catch (KettleException e) {
  if (e.getMessage().contains("TableNotFound")) {
    // generate DDL via step's SQL button or create table here
  }
  throw e;
}

Prevention

When it happens

Trigger: getTableFields()/SQL-building path executes checkTableExists on the quoted schema-table combination built from realSchemaName/realTableName and the table is absent in the target LucidDB database.

Common situations: Typo in table or schema name in the step dialog; table dropped or renamed after the transformation was configured; connected to the wrong database/environment (dev vs prod); case-sensitivity mismatch in quoted identifiers.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/3a2c8a39ca2e4713. 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:838

  }

  public RowMetaInterface getRequiredFields( VariableSpace space ) throws KettleException {
    String realTableName = space.environmentSubstitute( tableName );
    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" ) );
    }

  }

View on GitHub (pinned to f3058517a1)