{"record":{"id":"9e2710313c494ed8","repo":"pentaho/pentaho-kettle","slug":"trans-exception-unabletogetdependencyinfofromdb","errorCode":null,"errorMessage":"Trans.Exception.UnableToGetDependencyInfoFromDB","messagePattern":"Trans\\.Exception\\.UnableToGetDependencyInfoFromDB","errorType":"exception","errorClass":"KettleTransException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/Trans.java","lineNumber":2396,"sourceCode":"              try {\n                depdb.connect();\n                depdb.setCommit( logCommitSize );\n\n                String sql = \"SELECT MAX(\" + td.getFieldname() + \") FROM \" + td.getTablename();\n                RowMetaAndData r1 = depdb.getOneRow( sql );\n                if ( r1 != null ) {\n                  // OK, we have a row, get the result!\n                  Date maxvalue = (Date) r1.getData()[ 0 ];\n                  if ( maxvalue != null ) {\n                    if ( log.isDetailed() ) {\n                      log.logDetailed( BaseMessages.getString( PKG, \"Trans.Log.FoundDateFromTable\", td.getTablename(),\n                        \".\" + td.getFieldname(), \" = \" + maxvalue.toString() ) );\n                    }\n                    if ( maxvalue.getTime() > maxdepdate.getTime() ) {\n                      maxdepdate = maxvalue;\n                    }\n                  } else {\n                    throw new KettleTransException( BaseMessages.getString( PKG,\n                      \"Trans.Exception.UnableToGetDependencyInfoFromDB\", td.getDatabase().getName() + \".\", td\n                        .getTablename() + \".\", td.getFieldname() ) );\n                  }\n                } else {\n                  throw new KettleTransException( BaseMessages.getString( PKG,\n                    \"Trans.Exception.UnableToGetDependencyInfoFromDB\", td.getDatabase().getName() + \".\", td\n                      .getTablename() + \".\", td.getFieldname() ) );\n                }\n              } catch ( KettleException e ) {\n                throw new KettleTransException( BaseMessages.getString( PKG, \"Trans.Exception.ErrorInDatabase\", \"\" + td\n                  .getDatabase() ), e );\n              } finally {\n                depdb.close();\n              }\n            } else {\n              throw new KettleTransException( BaseMessages.getString( PKG, \"Trans.Exception.ConnectionCouldNotBeFound\",\n                \"\" + td.getDatabase() ) );\n            }","sourceCodeStart":2378,"sourceCodeEnd":2414,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/Trans.java#L2378-L2414","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Check that the dependency table exists, is non-empty, and the field name is correct","Verify the dependency database connection is defined and reachable","Run the MAX() query manually against the DB to see what it returns","Fix or remove the date-range dependency in the transformation settings"],"exampleFix":"// before: dependency on missing field\nnew TransDependency(dbMeta, \"staging_log\", \"last_updtaed\");\n// after: corrected field\nnew TransDependency(dbMeta, \"staging_log\", \"last_updated\");","handlingStrategy":"validation","validationCode":"for (TransDependency td : transMeta.getDependencies()) {\n  if (td.getDatabase() == null) throw new IllegalStateException(\"Dependency db missing\");\n  String sql = \"SELECT MAX(\" + td.getFieldname() + \") FROM \" + td.getTablename();\n  // run via td.getDatabase() to confirm a non-null value exists\n}","typeGuard":null,"tryCatchPattern":"try {\n  trans.execute(args);\n} catch (KettleTransException e) {\n  if (e.getMessage().contains(\"UnableToGetDependencyInfoFromDB\")) {\n    log.error(\"Dependency lookup failed: \" + e.getMessage());\n    // fix table/field or remove dependency\n  } else throw e;\n}","preventionTips":["Verify dependency tables are populated and fields exist before scheduled runs","Keep dependency field names in sync with schema changes","Ensure the dependency database connection is defined","Prefer explicit date parameters when dependency tables may be empty"],"tags":["kettle","database","dependency","date-range"],"backgroundTag":"empty-result-set","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}