prestodb/presto · warning · PinotException
PINOT_UNSUPPORTED_EXPRESSION
PINOT_UNSUPPORTED_EXPRESSION
Error message
%s
What it means
checkSupported is the Pinot connector's generic guard: when a condition guaranteeing translatable SQL is not met, it throws PinotException with code PINOT_UNSUPPORTED_EXPRESSION carrying the caller-supplied message. The connector only pushes down constructs it can express in Pinot query syntax, so anything else is rejected at planning time.
Source
Thrown at presto-pinot-toolkit/src/main/java/com/facebook/presto/pinot/PinotPushdownUtils.java:126
this.callExpression = callExpression;
}
public CallExpression getCallExpression()
{
return callExpression;
}
@Override
public String toString()
{
return callExpression.toString();
}
}
public static void checkSupported(boolean condition, String errorMessage, Object... errorMessageArgs)
{
if (!condition) {
throw new PinotException(PINOT_UNSUPPORTED_EXPRESSION, Optional.empty(), String.format(errorMessage, errorMessageArgs));
}
}
public abstract static class AggregationColumnNode
{
private final ExpressionType expressionType;
private final VariableReferenceExpression outputColumn;
public AggregationColumnNode(ExpressionType expressionType, VariableReferenceExpression outputColumn)
{
this.expressionType = expressionType;
this.outputColumn = outputColumn;
}
public VariableReferenceExpression getOutputColumn()
{
return outputColumn;
}View on GitHub (pinned to 55bb57d202)
Solutions
- Rewrite the query to avoid the unsupported construct (e.g. simplify the WHERE clause or use a supported function)
- Use the exact message in the exception to identify which expression failed and replace it with a Pinot-compatible equivalent
- If the expression must be supported, filter rows outside the connector (e.g. wrap the query or fetch raw data and post-process)
- Check connector docs/release notes; newer Presto/Pinot versions may support the construct, so upgrade
Example fix
// before SELECT * FROM t WHERE regexp_like(col, 'a.*') // after SELECT * FROM t WHERE col LIKE 'a%'
Defensive patterns
Strategy: try-catch
Validate before calling
// pre-check that pushed predicates only use supported functions // keep WHERE clauses to comparisons with literal right-hand sides // avoid regexp/UDF-style functions in pushdown-eligible queries
Try / catch
try {
query.execute();
} catch (PinotException e) {
if (e.getErrorCode() == PINOT_UNSUPPORTED_EXPRESSION.toErrorCode().getCode()) {
// fall back to a non-pushdown plan or rewrite the query
} else {
throw e;
}
} Prevention
- Read the message to see the exact rejected expression
- Restrict pushed-down predicates to simple column-literal comparisons
- Test new query patterns against Pinot before production use
When it happens
Trigger: Any call to PinotPushdownUtils.checkSupported(false, ...) during pushdown planning, e.g. an expression, function, or clause the connector cannot translate into Pinot PQL/SQL.
Common situations: Querying with functions Pinot lacks (e.g. regexp predicates, exotic types), filters on unsupported expressions like non-literal right sides, or IS NULL on array/map types.
Related errors
- PINOT_UNSUPPORTED_EXPRESSION
- PINOT_UNSUPPORTED_EXPRESSION
- PINOT_UNSUPPORTED_EXPRESSION
- PINOT_UNSUPPORTED_EXPRESSION
- DRUID_QUERY_GENERATOR_FAILURE
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/628143c8d6e75cc4.
Report an issue: GitHub.