apache/druid · error · org.apache.druid.java.util.common.ISE
Unknown outlier handling mode
Error message
Unknown outlier handling mode: %s
What it means
Unsupported-operation sentinel: FixedBucketsHistogramAggregator accumulates histogram objects, so any query layer that tries to read the aggregate as a primitive float via getFloat() cannot be served; the aggregator only exposes its result through get() as a histogram object.
Solutions
- Do not request a float aggregate from a fixedBucketsHistogram aggregator; use the object result or a post-aggregator such as quantile/histogram aggregators.
- Change the query's aggregation output type (e.g. use a numeric aggregator for float results).
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java:1172 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/82c6f4a737e4c43f.
Report an issue: GitHub.
Appendix: source
Thrown at extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java:1172
*
* Called when merging two histograms, where the histogram to be merged has upperLimit less than my lowerLimit
* @param otherHistogram other histogram being merged
*/
void handleOutliersCombineDifferentBucketsAllLower(FixedBucketsHistogram otherHistogram);
}
private OutlierHandler makeOutlierHandler()
{
switch (outlierHandlingMode) {
case IGNORE:
return new IgnoreOutlierHandler();
case OVERFLOW:
return new OverflowOutlierHandler();
case CLIP:
return new ClipOutlierHandler();
default:
throw new ISE("Unknown outlier handling mode: %s", outlierHandlingMode);
}
}
private static class IgnoreOutlierHandler implements OutlierHandler
{
@Override
public void handleOutlierAdd(boolean exceededMax)
{
}
@Override
public void simpleInterpolateMergeHandleOutliers(
FixedBucketsHistogram otherHistogram,
double rangeStart,
double rangeEnd
)
{
}View on GitHub (pinned to 9b90983fd2)