apache/druid · error · org.apache.druid.java.util.common.ISE

Unknown class for object:

Error message

Unknown class for object: 

What it means

A type-dispatch sentinel in FixedBucketsHistogram.combine: the incoming value was neither null, String (base64), FixedBucketsHistogram, nor Number, so the aggregator cannot merge it. This indicates a malformed intermediate result or an incompatible input column type feeding the aggregator.

Solutions

  1. Ensure the aggregation input column contains FixedBucketsHistogram objects, base64 strings, or numbers.
  2. Check for broker/segment data produced by an incompatible Druid version or a wrong output type from a preceding aggregator.
  3. Re-ingest or re-merge the affected segments if intermediate storage was corrupted.
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java:471 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/e087c7a1fed3e2c0. Report an issue: GitHub.

Appendix: source

Thrown at extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java:471

   *  - base64 encoded string of {@code FixedBucketsHistogram}
   *  - {@code FixedBucketsHistogram} object
   *  - Numeric value
   *
   * @param val
   */
  @VisibleForTesting
  public void combine(@Nullable Object val)
  {
    if (val == null) {
      incrementMissing();
    } else if (val instanceof String) {
      combineHistogram(fromBase64((String) val));
    } else if (val instanceof FixedBucketsHistogram) {
      combineHistogram((FixedBucketsHistogram) val);
    } else if (val instanceof Number) {
      add(((Number) val).doubleValue());
    } else {
      throw new ISE("Unknown class for object: " + val.getClass());
    }
  }

  /**
   * Merge another histogram into this one. Only the state of this histogram is updated.
   *
   * If the two histograms have identical buckets, a simpler algorithm is used.
   *
   * @param otherHistogram
   */
  public void combineHistogram(FixedBucketsHistogram otherHistogram)
  {
    if (otherHistogram == null) {
      return;
    }

    readWriteLock.writeLock().lock();
    otherHistogram.getReadWriteLock().readLock().lock();

View on GitHub (pinned to 9b90983fd2)