apache/druid · error · java.lang.UnsupportedOperationException
CardinalityBufferAggregator does not support getFloat()
Error message
CardinalityBufferAggregator does not support getFloat()
What it means
CardinalityBufferAggregator aggregates HLL sketches into a ByteBuffer and only supports reading the sketch via get(). getFloat() throws UnsupportedOperationException because no float primitive is stored.
Source
Thrown at processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityBufferAggregator.java:85
CardinalityAggregator.hashValues(selectorPluses, collector);
}
}
finally {
buf.limit(oldLimit);
buf.position(oldPosition);
}
}
@Override
public Object get(ByteBuffer buf, int position)
{
return HyperUniquesBufferAggregator.doGet(buf, position);
}
@Override
public float getFloat(ByteBuffer buf, int position)
{
throw new UnsupportedOperationException("CardinalityBufferAggregator does not support getFloat()");
}
@Override
public long getLong(ByteBuffer buf, int position)
{
throw new UnsupportedOperationException("CardinalityBufferAggregator does not support getLong()");
}
@Override
public double getDouble(ByteBuffer buf, int position)
{
throw new UnsupportedOperationException("CardinalityBufferAggregators does not support getDouble()");
}
@Override
public void close()
{View on GitHub (pinned to 9b90983fd2)
Solutions
- Read the sketch via get(buf, position) (HyperUniquesBufferAggregator.doGet) instead of getFloat()
- Use the cardinality aggregation only with object/string-typed result handling
- Choose a numeric aggregator if a float result is required
Example fix
// before float v = bufferAggregator.getFloat(buf, position); // after Object v = bufferAggregator.get(buf, position); // HLL sketch
Defensive patterns
Strategy: type-guard
Validate before calling
if (!(aggFactory instanceof CardinalityAggregatorFactory)) { float v = bufferAggregator.getFloat(buf, position); } Type guard
if (factory instanceof CardinalityAggregatorFactory) {
Object v = bufferAggregator.get(buf, position);
} else {
float v = bufferAggregator.getFloat(buf, position);
} Try / catch
try {
v = bufferAggregator.getFloat(buf, position);
} catch (UnsupportedOperationException e) {
v = Float.NaN;
} Prevention
- Read cardinality buffer results via get()/HyperUniquesBufferAggregator.doGet
- Avoid numeric-typed result extraction for cardinality aggregations
- Match aggregation factory type to result-row column type
When it happens
Trigger: Calling bufferAggregator.getFloat(buf, position) on a CardinalityAggregatorFactory-created buffer aggregator, i.e. when the query engine resolves the aggregation type as FLOAT.
Common situations: Vectorized/numeric result extraction on a cardinality aggregation; custom code assuming all buffer aggregators expose numeric getters.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- CardinalityAggregator does not support getFloat()
- CardinalityAggregator does not support getLong()
- CardinalityAggregator does not support getDouble()
- CardinalityBufferAggregator does not support getLong()
- CardinalityBufferAggregators does not support getDouble()
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/a981fa42edd28321.
Report an issue: GitHub.