{"record":{"id":"d027d538c4cb42ed","repo":"apache/druid","slug":"cardinalitybufferaggregators-does-not-support-getd","errorCode":null,"errorMessage":"CardinalityBufferAggregators does not support getDouble()","messagePattern":"CardinalityBufferAggregators does not support getDouble\\(\\)","errorType":"exception","errorClass":"java.lang.UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityBufferAggregator.java","lineNumber":98,"sourceCode":"  }\n\n  @Override\n  public float getFloat(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"CardinalityBufferAggregator does not support getFloat()\");\n  }\n\n\n  @Override\n  public long getLong(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"CardinalityBufferAggregator does not support getLong()\");\n  }\n\n  @Override\n  public double getDouble(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"CardinalityBufferAggregators does not support getDouble()\");\n  }\n\n  @Override\n  public void close()\n  {\n    // no resources to cleanup\n  }\n\n  @Override\n  public void inspectRuntimeShape(RuntimeShapeInspector inspector)\n  {\n    for (int i = 0; i < selectorPluses.length; i++) {\n      inspector.visit(StringUtils.format(\"selector-%d\", i), selectorPluses[i].getSelector());\n    }\n  }\n}\n","sourceCodeStart":80,"sourceCodeEnd":115,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityBufferAggregator.java#L80-L115","documentation":"CardinalityBufferAggregator's getDouble() is unsupported: the buffer holds an HLL sketch, not a double, so the method always throws UnsupportedOperationException. (The message contains a pre-existing typo: 'CardinalityBufferAggregators'.)","triggerScenarios":"Calling bufferAggregator.getDouble(buf, position) on a cardinality buffer aggregator when a double-typed result is assumed.","commonSituations":"Vectorized double extraction on cardinality aggregations; generic aggregation pipelines that request double values from all aggregators.","solutions":["Read the sketch via get(buf, position) instead of getDouble()","Use a numeric aggregator if a double result is required","Finalize the sketch into an estimate before numeric consumption"],"exampleFix":"// before\ndouble v = bufferAggregator.getDouble(buf, position);\n// after\nObject v = bufferAggregator.get(buf, position); // HLL sketch","handlingStrategy":"type-guard","validationCode":"if (!(aggFactory instanceof CardinalityAggregatorFactory)) { double v = bufferAggregator.getDouble(buf, position); }","typeGuard":"if (factory instanceof CardinalityAggregatorFactory) {\n    Object v = bufferAggregator.get(buf, position);\n} else {\n    double v = bufferAggregator.getDouble(buf, position);\n}","tryCatchPattern":"try {\n    v = bufferAggregator.getDouble(buf, position);\n} catch (UnsupportedOperationException e) {\n    v = Double.NaN;\n}","preventionTips":["Use double aggregators for double-typed columns","Never call getDouble on sketch-based buffer aggregators","Keep result extraction generic via get() when aggregation type is unknown"],"tags":["java","druid","aggregation","cardinality","unsupported"],"backgroundTag":"unsupported-operation","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"}