apache/druid · error · UnsupportedColumnTypeException

Cannot handle column

Error message

Cannot handle column [%s] with type [%s]

What it means

UnsupportedColumnTypeFrameColumnReader is the fallback reader for column types the frame columnar format cannot decode. readRACColumn unconditionally throws UnsupportedColumnTypeException naming the column and its (unsupported) type. Hitting it means a frame containing a column with a type outside the supported set was read.

Solutions

  1. Upgrade Druid so all nodes support the column type, or remove the unsupported column from the query/output
  2. Cast the column to a supported type in SQL (e.g. CAST to VARCHAR/LONG) before it reaches frame processing
  3. Inspect the error's columnName/columnType and check FrameColumnReaders.create to confirm support
  4. If a legitimate new type is missing, report/patch the reader for that ColumnType

Example fix

// before
String v = row.get(rowSignature.indexOf("weirdCol")); // throws for unsupported type
// after
String v = row.get(rowSignature.indexOf("CAST(weirdCol AS VARCHAR)")); // or drop the column
Defensive patterns

Strategy: type-guard

Validate before calling

ColumnType t = signature.getColumnType(idx).orElse(null); if (t == null || !SUPPORTED_RAC_TYPES.contains(t)) { throw new UnsupportedColumnTypeException(name, t); }

Type guard

boolean isSupportedColumnType(ColumnType t) { return t != null && EnumSet.of(ColumnType.LONG, ColumnType.FLOAT, ColumnType.DOUBLE, ColumnType.STRING).contains(t); }

Try / catch

try { column.readRACColumn(frame); } catch (UnsupportedColumnTypeException e) { log.warn("Skipping unsupported column {} of type {}", e.getColumnName(), e.getColumnType()); }

Prevention

When it happens

Trigger: Calling FrameReader/columnar reader machinery on a frame whose row-alias (RAC) column has an unsupported ColumnType (e.g. newly introduced types not yet handled by the frame reader, or COMPLEX variants without support).

Common situations: Druid version skew: frames written by a newer cluster node with a new type read by an older node; array-of-array or exotic complex types flowing through MSQ/frame pipelines; queries selecting columns with types unsupported by frame exchange.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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

Appendix: source

Thrown at processing/src/main/java/org/apache/druid/frame/read/columnar/UnsupportedColumnTypeFrameColumnReader.java:49

 * frame reader
 */
public class UnsupportedColumnTypeFrameColumnReader implements FrameColumnReader
{

  private final String columnName;
  @Nullable
  private final ColumnType columnType;

  UnsupportedColumnTypeFrameColumnReader(String columnName, @Nullable ColumnType columnType)
  {
    this.columnName = columnName;
    this.columnType = columnType;
  }

  @Override
  public Column readRACColumn(Frame frame)
  {
    throw new UnsupportedColumnTypeException(columnName, columnType);
  }

  @Override
  public ColumnPlus readColumn(Frame frame)
  {
    throw new UnsupportedColumnTypeException(columnName, columnType);
  }
}

View on GitHub (pinned to 9b90983fd2)