apache/druid · critical · IllegalArgumentException

Unsupported single-value version[%s]

Error message

Unsupported single-value version[%s]

What it means

When deserializing a single-valued dictionary-encoded string column, DictionaryEncodedColumnPartSerde.read dispatches on the column's VERSION enum. If the version is not UNCOMPRESSED_SINGLE_VALUE, UNCOMPRESSED_WITH_FLAGS, or COMPRESSED, this IAE is thrown. The segment column was written with an unknown/incompatible format version.

Source

Thrown at processing/src/main/java/org/apache/druid/segment/serde/DictionaryEncodedColumnPartSerde.java:432

            rSpatialIndex != null,
            columnFormatSpec
        ));
      }

      private WritableSupplier<ColumnarInts> readSingleValuedColumn(
          VERSION version,
          ByteBuffer buffer,
          SegmentFileMapper fileMapper
      )
      {
        switch (version) {
          case UNCOMPRESSED_SINGLE_VALUE:
          case UNCOMPRESSED_WITH_FLAGS:
            return VSizeColumnarInts.readFromByteBuffer(buffer);
          case COMPRESSED:
            return CompressedVSizeColumnarIntsSupplier.fromByteBuffer(buffer, byteOrder, fileMapper);
          default:
            throw new IAE("Unsupported single-value version[%s]", version);
        }
      }

      private WritableSupplier<ColumnarMultiInts> readMultiValuedColumn(
          VERSION version,
          ByteBuffer buffer,
          int flags,
          SegmentFileMapper fileMapper
      )
      {
        switch (version) {
          case UNCOMPRESSED_MULTI_VALUE: {
            return VSizeColumnarMultiInts.readFromByteBuffer(buffer);
          }
          case UNCOMPRESSED_WITH_FLAGS: {
            if (Feature.MULTI_VALUE.isSet(flags)) {
              return VSizeColumnarMultiInts.readFromByteBuffer(buffer);
            } else {

View on GitHub (pinned to 9b90983fd2)

Solutions

  1. Upgrade the historical/broker to a Druid version that can read the segment format (the version that wrote it).
  2. Re-ingest the affected data with the current cluster version to rewrite segments in a supported format.
  3. Restore corrupted segment files from deep storage.
  4. Verify all cluster nodes run the same Druid version before loading shared segment stores.
Defensive patterns

Strategy: validation

Try / catch

try {
    cursor = adapter.makeCursors(filter, interval, virtualColumns, granularity, descending, queryMetrics);
} catch (IAE e) {
    if (e.getMessage().contains("Unsupported single-value version")) {
        log.error("Segment format unsupported; upgrade Druid or re-ingest segment %s", segmentId);
    }
    throw e;
}

Prevention

When it happens

Trigger: readSingleValuedColumn (invoked via read() during segment load) encountering a VERSION value outside the supported set — segment written by a newer Druid or corrupted version byte.

Common situations: Rolling back Druid to a version older than the one that wrote the segments; mixing cluster versions where a broker/historical reads segments from a newer writer; bit rot or truncated files corrupting the version field.

Related errors


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