{"record":{"id":"6233511230ff743e","repo":"apache/druid","slug":"not-implemented-623351","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/MomentSketchMergeBufferAggregator.java","lineNumber":85,"sourceCode":"    MomentSketchWrapper ms0 = MomentSketchWrapper.fromBytes(mutationBuffer);\n    ms0.merge(msNext);\n\n    mutationBuffer.position(position);\n    ms0.toBytes(mutationBuffer);\n  }\n\n  @Override\n  public Object get(ByteBuffer buf, int position)\n  {\n    ByteBuffer mutationBuffer = buf.asReadOnlyBuffer();\n    mutationBuffer.position(position);\n    return MomentSketchWrapper.fromBytes(mutationBuffer);\n  }\n\n  @Override\n  public float getFloat(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"Not implemented\");\n  }\n\n  @Override\n  public long getLong(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"Not implemented\");\n  }\n\n  @Override\n  public double getDouble(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"Not implemented\");\n  }\n\n  @Override\n  public void close()\n  {\n  }","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMergeBufferAggregator.java#L67-L103","documentation":"MomentSketchMergeBufferAggregator.getFloat throws UnsupportedOperationException because the buffered merge aggregator holds serialized sketch bytes and cannot produce a scalar float. It fires when the vectorized query engine requests the merged sketch aggregation as FLOAT.","triggerScenarios":"A vectorized (buffer aggregator) query path coerces the merged momentsketch metric to FLOAT output type, causing getFloat(buf, position) to be called.","commonSituations":"Group-by/timeseries queries with float output coercion on sketch metrics; SQL planner float casts; reporting tooling assuming all aggregations are numeric.","solutions":["Declare the merged sketch aggregation as COMPLEX output type.","Remove float casts/post-aggregators from the sketch metric.","Use sketch post-aggregators to derive numeric values from the merged sketch.","Disable vectorization coercion or verify the native query JSON has no FLOAT outputType on the sketch aggregator."],"exampleFix":"// before\n{\"type\": \"momentsketch\", \"fieldName\": \"value\", \"outputType\": \"FLOAT\"}\n// after\n{\"type\": \"momentsketch\", \"fieldName\": \"value\"}","handlingStrategy":"validation","validationCode":"// reject unsupported output types in merged/vectorized sketch specs\nif (\"FLOAT\".equals(aggregatorSpec.get(\"outputType\"))) {\n  throw new IllegalArgumentException(\"momentsketch merge buffer aggregator does not support FLOAT output\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  float v = mergeBufferAggregator.getFloat(buf, position);\n} catch (UnsupportedOperationException e) {\n  MomentSketchWrapper sketch = mergeBufferAggregator.get(buf, position);\n}","preventionTips":["Configure COMPLEX output for merged sketch aggregations.","Remove float coercion from sketch columns in vectorized queries.","Validate query JSON before submission.","Test group-by/timeseries vectorized execution with sketch metrics."],"tags":["unsupported-operation","aggregation","sketch","vectorized","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"}