{"record":{"id":"7087403dd7d4c0b7","repo":"apache/druid","slug":"not-implemented-708740","errorCode":null,"errorMessage":"Not implemented","messagePattern":"Not implemented","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":500,"severity":"error","filePath":"extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchMergeAggregator.java","lineNumber":58,"sourceCode":"  }\n\n  @Override\n  public synchronized void aggregate()\n  {\n    updateUnion(selector, union);\n  }\n\n\n  @Override\n  public synchronized Object get()\n  {\n    return union.getResult();\n  }\n\n  @Override\n  public float getFloat()\n  {\n    throw new UnsupportedOperationException(\"Not implemented\");\n  }\n\n  @Override\n  public long getLong()\n  {\n    throw new UnsupportedOperationException(\"Not implemented\");\n  }\n\n  @Override\n  public synchronized void close()\n  {\n    union = null;\n  }\n\n  static void updateUnion(ColumnValueSelector selector, DoublesUnion union)\n  {\n    final Object object = selector.getObject();\n    if (object == null) {","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchMergeAggregator.java#L40-L76","documentation":"DoublesSketchMergeAggregator unions existing quantiles DoublesSketches; the result is a sketch, not a scalar, so getFloat() deliberately throws UnsupportedOperationException. Numeric access to a merge aggregator is not supported by design.","triggerScenarios":"Calling getFloat() on a DoublesSketchMergeAggregator, e.g. when a query or custom code path expects a float output from a merging quantilesDoublesSketch aggregation.","commonSituations":"Merging sketches in subqueries whose results are consumed by numeric selectors; generic aggregator code paths defaulting to getFloat; tests asserting numeric merging.","solutions":["Call get() which returns union.getResult() (the sketch) or the finalized value","Set shouldFinalize=true and read via get() when a numeric quantile/rank is needed","Use quantilesDoublesSketchToQuantile/ToRank post-aggregators for typed numeric output"],"exampleFix":"// before\nfloat v = mergeAggregator.getFloat();\n// after\nObject result = mergeAggregator.get();\ndouble v = ((Number) result).doubleValue(); // when shouldFinalize=true","handlingStrategy":"type-guard","validationCode":"Object result = mergeAggregator.get();\nif (!(result instanceof DoublesSketch) && !(result instanceof Number)) {\n  throw new IllegalStateException(\"Unexpected merged sketch result: \" + (result == null ? \"null\" : result.getClass()));\n}","typeGuard":"boolean isFinalized(Aggregator agg) { return agg.get() instanceof Number; }","tryCatchPattern":"try {\n  return mergeAggregator.getFloat();\n} catch (UnsupportedOperationException e) {\n  Object v = mergeAggregator.get();\n  return v instanceof Number ? ((Number) v).floatValue() : Float.NaN;\n}","preventionTips":["Read merged sketch results through get()","Use shouldFinalize=true for scalar outputs, post-aggregators for quantiles/ranks","Do not type merged sketch columns as float"],"tags":["java","druid","sketch","merge","unsupported-operation"],"backgroundTag":"method-not-implemented","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"}