{"record":{"id":"903ba0323e153c74","repo":"apache/druid","slug":"not-implemented-903ba0","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/kll/KllSketchBuildAggregator.java","lineNumber":48,"sourceCode":"  protected final ColumnValueSelector<ValueType> valueSelector;\n  @Nullable protected SketchType sketch;\n\n  KllSketchBuildAggregator(final ColumnValueSelector<ValueType> valueSelector, final SketchType sketch)\n  {\n    this.valueSelector = valueSelector;\n    this.sketch = sketch;\n  }\n\n  @Override\n  public synchronized Object get()\n  {\n    return sketch;\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    sketch = null;\n  }\n}\n","sourceCodeStart":30,"sourceCodeEnd":63,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/kll/KllSketchBuildAggregator.java#L30-L63","documentation":"KllSketchBuildAggregator accumulates values into a KllFloatsSketch object; its final result is the sketch itself, which is not a float. getFloat() is implemented only to satisfy the Aggregator interface and always throws UnsupportedOperationException. It indicates the aggregator was invoked through a numeric access path that doesn't apply to sketch aggregators.","triggerScenarios":"Druid (or custom code) calling agg.getFloat() on a KLL sketch aggregator — typically when the engine expects a numeric-valued aggregator, e.g. a misconfigured row-signature/type or code iterating aggregators assuming numeric output.","commonSituations":"Custom query tooling or extensions that read aggregator results numerically instead of checking for object (sketch) output; API changes in Druid versions that route through getFloat for double results.","solutions":["Retrieve the sketch result via getObject()/the object result path, not getFloat().","Ensure the aggregation's declared output type is the sketch object type, not float/double.","If this arises inside custom extension code, special-case sketch aggregators before numeric extraction."],"exampleFix":"// before\nfloat v = agg.getFloat();\n\n// after\nObject result = ((KllSketchBuildAggregator) agg).get(); // returns KllFloatsSketch","handlingStrategy":"type-guard","validationCode":"if (!(aggregator instanceof KllSketchBuildAggregator)) {\n  float v = aggregator.getFloat();\n}","typeGuard":"static Float safeGetFloat(Aggregator agg) {\n  if (agg instanceof KllSketchBuildAggregator) return null; // sketch-valued, not numeric\n  return agg.getFloat();\n}","tryCatchPattern":"try {\n  float v = agg.getFloat();\n} catch (UnsupportedOperationException e) {\n  // sketch aggregator: retrieve object result instead\n  Object sketch = agg.getObject();\n}","preventionTips":["Treat sketch aggregators as object-valued; use getObject().","Check the AggregatorFactory type before numeric extraction.","Declare correct output types in query/ingestion specs."],"tags":["druid","datasketches","kll","aggregator","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"}