prestodb/presto · error · SemanticException
INVALID_SESSION_PROPERTY
INVALID_SESSION_PROPERTY
Error message
Invalid session property '%s'
What it means
SetSessionTask validates SET SESSION property names: a property must have at most two parts (system property, or connector.property). A name with more than two dot-separated parts is rejected with SemanticException(INVALID_SESSION_PROPERTY). This enforces Presto's <catalog>.<property> or bare-property session naming scheme.
Source
Thrown at presto-main-base/src/main/java/com/facebook/presto/execution/SetSessionTask.java:58
import static java.lang.String.format;
public class SetSessionTask
implements SessionTransactionControlTask<SetSession>
{
@Override
public String getName()
{
return "SET SESSION";
}
@Override
public ListenableFuture<?> execute(SetSession statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, QueryStateMachine stateMachine, List<Expression> parameters, String query)
{
Session session = stateMachine.getSession();
QualifiedName propertyName = statement.getName();
List<String> parts = propertyName.getParts();
if (parts.size() > 2) {
throw new SemanticException(INVALID_SESSION_PROPERTY, statement, "Invalid session property '%s'", propertyName);
}
// validate the property name
PropertyMetadata<?> propertyMetadata;
if (parts.size() == 1) {
accessControl.checkCanSetSystemSessionProperty(session.getIdentity(), session.getAccessControlContext(), parts.get(0));
propertyMetadata = metadata.getSessionPropertyManager().getSystemSessionPropertyMetadata(parts.get(0))
.orElseThrow(() -> new SemanticException(INVALID_SESSION_PROPERTY, statement, "Session property %s does not exist", statement.getName()));
}
else {
ConnectorId connectorId = getConnectorIdOrThrow(stateMachine.getSession(), metadata, parts.get(0), statement, catalogError);
accessControl.checkCanSetCatalogSessionProperty(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), parts.get(0), parts.get(1));
propertyMetadata = metadata.getSessionPropertyManager().getConnectorSessionPropertyMetadata(connectorId, parts.get(1))
.orElseThrow(() -> new SemanticException(INVALID_SESSION_PROPERTY, statement, "Session property %s does not exist", statement.getName()));
}
Type type = propertyMetadata.getSqlType();
Object objectValue;View on GitHub (pinned to 55bb57d202)
Solutions
- Collapse the property to at most two parts: SET SESSION catalog.property = value.
- Look up the exact session property name via SHOW SESSION and use it verbatim.
- If a deeper key is intended as a connector property, check the connector docs for its flat session-property name.
Example fix
-- before SET SESSION hive.storage.format.values = ORC -- after SET SESSION hive.orc_bloom_filter_fpp = 0.05
Defensive patterns
Strategy: validation
Validate before calling
SHOW SESSION; -- confirm exact property name and its part count before SET SESSION
if (propName.split('.').length > 2) throw new Error(`Invalid session property: ${propName}`); Type guard
function isValidSessionProperty(name) {
return /^[A-Za-z_][\w]*(\.[A-Za-z_][\w]*)?$/.test(name);
} Try / catch
try {
await run(`SET SESSION ${prop} = ${value}`);
} catch (e) {
if (e.message.includes("Invalid session property")) {
console.error(`Use at most catalog.property format; run SHOW SESSION to list valid names`);
}
throw e;
} Prevention
- Run SHOW SESSION to discover valid property names before setting them.
- Keep session-property configuration in checked-in, reviewed queries.
- Map hierarchical config keys to their flat Presto session-property equivalents.
- Validate property names in any tool that generates SET SESSION statements.
When it happens
Trigger: SET SESSION a.b.c = value where the property name has three or more dot-separated parts.
Common situations: Copy-pasting JVM-style or hierarchical property keys (e.g. hive.storage.format.foo) into SET SESSION; tools generating property names with extra namespace segments; confusion between connector properties and catalog-level flags.
Related errors
- INVALID_TABLE_PROPERTY
- INVALID_ANALYZE_PROPERTY
- INVALID_MATERIALIZED_VIEW_PROPERTY
- Invalid time from server:
- Expected column to be a time type but is
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/a134ca113b51631b.
Report an issue: GitHub.