{"record":{"id":"3f0348b7932eda64","repo":"apache/druid","slug":"comparing-histograms-is-not-supported-3f0348","errorCode":null,"errorMessage":"Comparing histograms is not supported","messagePattern":"Comparing histograms is not supported","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":500,"severity":"error","filePath":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchToHistogramPostAggregator.java","lineNumber":155,"sourceCode":"\n  @JsonProperty\n  @JsonInclude(JsonInclude.Include.NON_NULL)\n  public float[] getSplitPoints()\n  {\n    return splitPoints;\n  }\n\n  @JsonProperty\n  @JsonInclude(JsonInclude.Include.NON_NULL)\n  public Integer getNumBins()\n  {\n    return numBins;\n  }\n\n  @Override\n  public Comparator<double[]> getComparator()\n  {\n    throw new IAE(\"Comparing histograms is not supported\");\n  }\n\n  @Override\n  public Set<String> getDependentFields()\n  {\n    return field.getDependentFields();\n  }\n\n  @Override\n  public String toString()\n  {\n    return getClass().getSimpleName() + \"{\" +\n        \"name='\" + name + '\\'' +\n        \", field=\" + field +\n        \", splitPoints=\" + Arrays.toString(splitPoints) +\n        \", numBins=\" + numBins +\n        \"}\";\n  }","sourceCodeStart":137,"sourceCodeEnd":173,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllFloatsSketchToHistogramPostAggregator.java#L137-L173","documentation":"Like the CDF post-aggregator, the histogram post-aggregator outputs an array of doubles that cannot be meaningfully ordered, so getComparator() deliberately throws IAE. Druid requires a comparator only when the post-aggregator is used in an ordering or comparison context.","triggerScenarios":"Using KLL_SKETCH_TO_HISTOGRAM output in ORDER BY, in a having/filter comparison, or in any code path that calls PostAggregator.getComparator() on this object.","commonSituations":"Ordering query results by a histogram column, or generic query tooling that assumes every post-aggregator is comparable.","solutions":["Sort by a scalar column or expression instead of the histogram output.","Extract a scalar (e.g. a quantile via KLL_SKETCH_TO_QUANTILE) and order on that.","Avoid using this post-aggregator in comparator-requiring contexts such as order-by specs."],"exampleFix":"// before\n... ORDER BY \"histogram_output\"\n\n// after\n... ORDER BY \"histogram_output[0]\" -- or a scalar quantile expression","handlingStrategy":"validation","validationCode":"if (postAgg instanceof KllFloatsSketchToHistogramPostAggregator && requiresComparator(querySpec)) {\n  throw new IllegalArgumentException(\"Histogram output is not comparable; use a scalar expression for ordering\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Do not sort or filter on histogram post-aggregator output.","Extract a scalar value for ordering purposes.","Keep histogram post-aggregators display-only."],"tags":["druid","datasketches","kll","post-aggregator","unsupported-operation"],"backgroundTag":"unsupported-operation","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}