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

  1. Do not request a float aggregate from a fixedBucketsHistogram aggregator; use the object result or a post-aggregator such as quantile/histogram aggregators.
  2. 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)