{"record":{"id":"c4a595da11d6fa25","repo":"apache/druid","slug":"not-implemented","errorCode":null,"errorMessage":"Not implemented","messagePattern":"Not implemented","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"extensions-contrib/ddsketch/src/main/java/org/apache/druid/query/aggregation/ddsketch/DDSketchBufferAggregator.java","lineNumber":103,"sourceCode":"          x,\n          x.getClass()\n      );\n    }\n  }\n\n  @Override\n  public Object get(final ByteBuffer buffer, final int position)\n  {\n    // sketchCache is an IdentityHashMap where the reference of buffer is used for equality checks.\n    // So the returned object isn't impacted by the changes in the buffer object made by concurrent threads.\n    DDSketch obj = sketchCache.get(buffer).get(position);\n    return obj;\n  }\n\n  @Override\n  public float getFloat(final ByteBuffer buffer, final int position)\n  {\n    throw new UnsupportedOperationException(\"Not implemented\");\n  }\n\n  @Override\n  public long getLong(final ByteBuffer buffer, final int position)\n  {\n    throw new UnsupportedOperationException(\"Not implemented\");\n  }\n\n  @Override\n  public void close()\n  {\n    sketchCache.clear();\n  }\n\n  @Override\n  public void relocate(int oldPosition, int newPosition, ByteBuffer oldBuffer, ByteBuffer newBuffer)\n  {\n    DDSketch sketch = sketchCache.get(oldBuffer).get(oldPosition);","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-contrib/ddsketch/src/main/java/org/apache/druid/query/aggregation/ddsketch/DDSketchBufferAggregator.java#L85-L121","documentation":"DDSketchBufferAggregator.getFloat() is not implemented: sketches held in the aggregation buffer cannot be read as a float primitive. UnsupportedOperationException is thrown intentionally whenever the engine attempts to extract a float from the buffer-aggregated sketch.","triggerScenarios":"Running a query whose execution plan (e.g. group-by with certain accessors, or non-vectorized paths) calls getFloat on the ddsketch buffer aggregator's result, or finalizing the result as a float metric.","commonSituations":"GroupBy queries treating the sketch result as a numeric metric, using float-typed accessors/finalizers, or custom accessors built for numeric aggregators.","solutions":["Access the sketch result via ddsketchQuantile/ddsketchQuantiles post-aggregators, not as a float.","Keep ddsketch results as complex objects (sketch columns) and only extract numbers in post-aggregation.","Use a numeric aggregator if a float result is genuinely required."],"exampleFix":"// before\nfloat v = agg.getFloat(); // UnsupportedOperationException\n// after\nDDSketch sketch = (DDSketch) agg.get();\ndouble p90 = sketch.getValueAtQuantile(0.9);","handlingStrategy":"fallback","validationCode":null,"typeGuard":"Object o = agg.get(buffer, position);\nif (o instanceof DDSketch) { /* handle as sketch */ }","tryCatchPattern":"try {\n  return agg.getFloat(buffer, position);\n} catch (UnsupportedOperationException e) {\n  return ((DDSketch) agg.get(buffer, position)).getCount() > 0 ? (float) agg.computeQuantile(buffer, position, 0.5) : Float.NaN;\n}","preventionTips":["Never read buffer-aggregated ddsketch results as primitives.","Always finalize sketch results through ddsketch post-aggregators.","Use numeric aggregators when primitive float results are required."],"tags":["ddsketch","aggregation","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"}