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

Unknown version

Error message

Unknown version 

What it means

ScalarStringColumnAndIndexSupplier.read() supports only the nested string-column versions it implements (V1). A version byte in the segment that matches none of them triggers this generic String throw, since the reader cannot interpret the unknown on-disk layout.

Solutions

  1. Upgrade the reading Druid processes to a version that supports the segment's column format
  2. Rebuild the segment by re-ingesting or re-compacting the affected data with the current Druid version
  3. Replace the segment with an intact replica if the version byte appears corrupted
  4. Keep writer and reader druid-processing versions consistent across the cluster
Defensive patterns

Strategy: try-catch

Validate before calling

// Gate segment loading on writer-version compatibility metadata
if (compareVersions(segmentMetadata.getVersion(), maxSupportedReaderVersion) > 0) {
  throw new IllegalStateException("Refusing to load segment " + segmentId
      + ": writer version " + segmentMetadata.getVersion() + " unsupported by reader");
}

Try / catch

try {
  // load segment / nested string column
} catch (RuntimeException e) {
  if (e.getMessage() != null && e.getMessage().startsWith("Unknown version")) {
    LOG.warn(e, "Unknown column version in %s; scheduling re-ingest", segmentId);
    coordinatorClient.requestReingest(segmentId);
  } else {
    throw e;
  }
}

Prevention

When it happens

Trigger: Reading a segment whose nested string column version byte is newer than the running Druid supports, or a corrupted file whose version byte is invalid (e.g. wrong file boundary/truncation landing on the wrong offset).

Common situations: Version skew in rolling upgrades (segments written by newer historicals, read by older ones); downgrades that leave behind segments in a newer format; corrupt segment files served from cache.

Related errors


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

Appendix: source

Thrown at processing/src/main/java/org/apache/druid/segment/nested/ScalarStringColumnAndIndexSupplier.java:112

            ColumnSerializerUtils.BITMAP_INDEX_FILE_NAME
        );
        GenericIndexed<ImmutableBitmap> valueIndexes = GenericIndexed.read(
            valueIndexBuffer,
            bitmapSerdeFactory.getObjectStrategy(),
            columnBuilder.getFileMapper()
        );
        return new ScalarStringColumnAndIndexSupplier(
            dictionarySupplier,
            ints,
            valueIndexes,
            bitmapSerdeFactory
        );
      }
      catch (IOException ex) {
        throw new RE(ex, "Failed to deserialize V%s column.", version);
      }
    } else {
      throw new RE("Unknown version " + version);
    }
  }


  private final Supplier<? extends Indexed<ByteBuffer>> dictionarySupplier;
  private final Supplier<ColumnarInts> encodedColumnSupplier;
  private final GenericIndexed<ImmutableBitmap> valueIndexes;
  private final ColumnIndexSupplier stringIndexSupplier;
  private final BitmapSerdeFactory serdeFactory;

  private ScalarStringColumnAndIndexSupplier(
      Supplier<? extends Indexed<ByteBuffer>> dictionarySupplier,
      Supplier<ColumnarInts> encodedColumnSupplier,
      GenericIndexed<ImmutableBitmap> valueIndexes,
      BitmapSerdeFactory serdeFactory
  )
  {
    this.dictionarySupplier = dictionarySupplier;

View on GitHub (pinned to 9b90983fd2)