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
- Upgrade the historical/broker to a Druid version that can read the segment format (the version that wrote it).
- Re-ingest the affected data with the current cluster version to rewrite segments in a supported format.
- Restore corrupted segment files from deep storage.
- 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
- Align Druid versions across the cluster before rolling upgrades/downgrades.
- Re-ingest legacy segments after major version upgrades if format support changes.
- Verify segment integrity after bulk copies between storage tiers.
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
- Unsupported multi-value version[%s]
- Unknown version %s
- Unknown version[%s]
- Unknown version[%s]
- Unknown version[%s]
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/f791c92b1706847f.
Report an issue: GitHub.