{"record":{"id":"14a289e69b2fe131","repo":"apache/druid","slug":"not-implemented-14a289","errorCode":null,"errorMessage":"Not implemented","messagePattern":"Not implemented","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"warning","filePath":"extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMergeAggregator.java","lineNumber":61,"sourceCode":"  public void aggregate()\n  {\n    final MomentSketchWrapper sketch = selector.getObject();\n    if (sketch == null) {\n      return;\n    }\n    this.momentsSketch.merge(sketch);\n  }\n\n  @Override\n  public Object get()\n  {\n    return momentsSketch;\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 void close()\n  {\n    momentsSketch = null;\n  }\n}\n","sourceCodeStart":43,"sourceCodeEnd":76,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMergeAggregator.java#L43-L76","documentation":"MomentSketchMergeAggregator.getFloat throws UnsupportedOperationException because merged Moments Sketch results are composite objects that cannot be exposed as a float. The merge aggregator combines sketches; any attempt to read its value as a float triggers this error.","triggerScenarios":"A query performs sketch merging (e.g. group-by across segments or a final merge stage) and requests the merged metric as FLOAT, causing getFloat() on the merge aggregator.","commonSituations":"Group-by queries with sketch aggregations coerced to float output; finalization/post-aggregation code calling getFloat on merged rows; query tooling assuming numeric aggregator types.","solutions":["Keep the sketch aggregation output as COMPLEX and read merged sketches via getObject.","Replace float coercion with sketch-specific post-aggregators (quantile, mean).","Remove any expression or cast that treats the merged sketch column as a float.","Use MomentSketchAggregatorFactory's merge/finalize APIs rather than numeric accessors."],"exampleFix":"// before\nPostAggregator p = (Float) row.get(\"sketch\"); // engine calls getFloat\n// after\nMomentSketchWrapper sketch = (MomentSketchWrapper) row.get(\"sketch\");\ndouble mean = sketch.mean();","handlingStrategy":"type-guard","validationCode":"if (\"FLOAT\".equals(querySpec.getOutputTypeOf(\"sketch\"))) {\n  throw new IllegalArgumentException(\"merged momentsketch requires COMPLEX output\");\n}","typeGuard":"Object val = row.get(\"sketch\");\nif (val instanceof MomentSketchWrapper) {\n  MomentSketchWrapper sketch = (MomentSketchWrapper) val; // safe, numeric via post-aggregator\n}","tryCatchPattern":"try {\n  return mergeAggregator.getFloat();\n} catch (UnsupportedOperationException e) {\n  throw new IllegalStateException(\"Read merged sketch via getObject, not getFloat\", e);\n}","preventionTips":["Never request FLOAT output on merged sketch aggregations.","Derive floats only via sketch post-aggregators.","Branch on aggregator type in generic tooling before calling numeric getters.","Read merged rows with getObject and cast to MomentSketchWrapper."],"tags":["unsupported-operation","aggregation","sketch","druid"],"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"}