pentaho/pentaho-kettle · error · KettleTransException

Trans.Exception.UnableToGetDependencyInfoFromDB

Error message

Trans.Exception.UnableToGetDependencyInfoFromDB

What it means

Transformations can define date-range dependencies (table/field lookups) to compute a maximum dependency date. During init(), Trans queries each dependency's database; if the query returns no usable value (null max value) or the dependency's database meta is missing, it throws KettleTransException with Trans.Exception.UnableToGetDependencyInfoFromDB, including database, table, and field names.

Solutions

  1. Check that the dependency table exists, is non-empty, and the field name is correct
  2. Verify the dependency database connection is defined and reachable
  3. Run the MAX() query manually against the DB to see what it returns
  4. Fix or remove the date-range dependency in the transformation settings

Example fix

// before: dependency on missing field
new TransDependency(dbMeta, "staging_log", "last_updtaed");
// after: corrected field
new TransDependency(dbMeta, "staging_log", "last_updated");
Defensive patterns

Strategy: validation

Validate before calling

for (TransDependency td : transMeta.getDependencies()) {
  if (td.getDatabase() == null) throw new IllegalStateException("Dependency db missing");
  String sql = "SELECT MAX(" + td.getFieldname() + ") FROM " + td.getTablename();
  // run via td.getDatabase() to confirm a non-null value exists
}

Try / catch

try {
  trans.execute(args);
} catch (KettleTransException e) {
  if (e.getMessage().contains("UnableToGetDependencyInfoFromDB")) {
    log.error("Dependency lookup failed: " + e.getMessage());
    // fix table/field or remove dependency
  } else throw e;
}

Prevention

When it happens

Trigger: A TransDependency (td) lookup runs but either maxvalue is null (no rows returned) for the dependency field, or td.getDatabase() is null - both paths throw this message with db/table/field names.

Common situations: Dependency table empty or field name misspelled so the MAX() query returns null; dependency database connection missing from metadata; wrong schema/table names after a migration.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/9e2710313c494ed8. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/Trans.java:2396

              try {
                depdb.connect();
                depdb.setCommit( logCommitSize );

                String sql = "SELECT MAX(" + td.getFieldname() + ") FROM " + td.getTablename();
                RowMetaAndData r1 = depdb.getOneRow( sql );
                if ( r1 != null ) {
                  // OK, we have a row, get the result!
                  Date maxvalue = (Date) r1.getData()[ 0 ];
                  if ( maxvalue != null ) {
                    if ( log.isDetailed() ) {
                      log.logDetailed( BaseMessages.getString( PKG, "Trans.Log.FoundDateFromTable", td.getTablename(),
                        "." + td.getFieldname(), " = " + maxvalue.toString() ) );
                    }
                    if ( maxvalue.getTime() > maxdepdate.getTime() ) {
                      maxdepdate = maxvalue;
                    }
                  } else {
                    throw new KettleTransException( BaseMessages.getString( PKG,
                      "Trans.Exception.UnableToGetDependencyInfoFromDB", td.getDatabase().getName() + ".", td
                        .getTablename() + ".", td.getFieldname() ) );
                  }
                } else {
                  throw new KettleTransException( BaseMessages.getString( PKG,
                    "Trans.Exception.UnableToGetDependencyInfoFromDB", td.getDatabase().getName() + ".", td
                      .getTablename() + ".", td.getFieldname() ) );
                }
              } catch ( KettleException e ) {
                throw new KettleTransException( BaseMessages.getString( PKG, "Trans.Exception.ErrorInDatabase", "" + td
                  .getDatabase() ), e );
              } finally {
                depdb.close();
              }
            } else {
              throw new KettleTransException( BaseMessages.getString( PKG, "Trans.Exception.ConnectionCouldNotBeFound",
                "" + td.getDatabase() ) );
            }

View on GitHub (pinned to f3058517a1)