pentaho/pentaho-kettle · error · KettleDatabaseException
Error determining value metadata from SQL resultset metadata
Error message
Error determining value metadata from SQL resultset metadata
What it means
Wrapper error while deriving a ValueMeta from a JDBC ResultSet's metadata in getSqlType(): either cloning the storage metadata or the database-specific customizeValueFromSQLType() customization threw, and it was rethrown as a plain SQLException with this message and the original cause.
Solutions
- Inspect the chained cause for the real failure (unsupported SQL type, driver quirk)
- Update or replace the JDBC driver if its resultset metadata is non-standard
- Simplify the query/column types that trigger the database-specific customization
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at core/src/main/java/org/pentaho/di/core/row/value/ValueMetaBase.java:4979 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f782f73cb808c5e7.
Report an issue: GitHub.
Appendix: source
Thrown at core/src/main/java/org/pentaho/di/core/row/value/ValueMetaBase.java:4979
//
try {
ValueMetaInterface storageMetaData = ValueMetaFactory.cloneValueMeta( v, ValueMetaInterface.TYPE_STRING );
storageMetaData.setStorageType( ValueMetaInterface.STORAGE_TYPE_NORMAL );
v.setStorageMetadata( storageMetaData );
} catch ( Exception e ) {
throw new SQLException( e );
}
}
ValueMetaInterface newV = null;
try {
newV = databaseMeta.getDatabaseInterface().customizeValueFromSQLType( v, rm, index );
} catch ( SQLException e ) {
throw new SQLException( e );
}
return newV == null ? v : newV;
} catch ( Exception e ) {
throw new KettleDatabaseException( "Error determining value metadata from SQL resultset metadata", e );
}
}
protected void getOriginalColumnMetadata( ValueMetaInterface v, ResultSetMetaData rm, int index, boolean ignoreLength )
throws SQLException {
// Grab the comment as a description to the field as well.
String comments = rm.getColumnLabel( index );
v.setComments( comments );
// get & store more result set meta data for later use
int originalColumnType = rm.getColumnType( index );
v.setOriginalColumnType( originalColumnType );
String originalColumnTypeName = rm.getColumnTypeName( index );
v.setOriginalColumnTypeName( originalColumnTypeName );
int originalPrecision = -1;
if ( !ignoreLength ) {View on GitHub (pinned to f3058517a1)