{"record":{"id":"267c5d420ca10d2c","repo":"apache/iceberg","slug":"cannot-convert-dict-encoded-field-s-of-type-s","errorCode":null,"errorMessage":"Cannot convert dict encoded field '%s' of type '%s' to Arrow vector as it is currently not supported","messagePattern":"Cannot convert dict encoded field '(.+?)' of type '(.+?)' to Arrow vector as it is currently not supported","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"arrow/src/main/java/org/apache/iceberg/arrow/DictEncodedArrowConverter.java","lineNumber":77,"sourceCode":"      } else if (Type.TypeID.TIMESTAMP.equals(vectorHolder.icebergType().typeId())) {\n        return toTimestampVector(vectorHolder, accessor);\n      } else if (Type.TypeID.TIMESTAMP_NANO.equals(vectorHolder.icebergType().typeId())) {\n        return toTimestampNanoVector(vectorHolder, accessor);\n      } else if (Type.TypeID.LONG.equals(vectorHolder.icebergType().typeId())) {\n        return toBigIntVector(vectorHolder, accessor);\n      } else if (Type.TypeID.FLOAT.equals(vectorHolder.icebergType().typeId())) {\n        return toFloat4Vector(vectorHolder, accessor);\n      } else if (Type.TypeID.DOUBLE.equals(vectorHolder.icebergType().typeId())) {\n        return toFloat8Vector(vectorHolder, accessor);\n      } else if (Type.TypeID.STRING.equals(vectorHolder.icebergType().typeId())) {\n        return toVarCharVector(vectorHolder, accessor);\n      } else if (Type.TypeID.BINARY.equals(vectorHolder.icebergType().typeId())) {\n        return toVarBinaryVector(vectorHolder, accessor);\n      } else if (Type.TypeID.TIME.equals(vectorHolder.icebergType().typeId())) {\n        return toTimeMicroVector(vectorHolder, accessor);\n      }\n\n      throw new IllegalArgumentException(\n          String.format(\n              \"Cannot convert dict encoded field '%s' of type '%s' to Arrow \"\n                  + \"vector as it is currently not supported\",\n              vectorHolder.icebergField().name(), vectorHolder.icebergType().typeId()));\n    }\n\n    return vectorHolder.vector();\n  }\n\n  private static DecimalVector toDecimalVector(\n      VectorHolder vectorHolder, ArrowVectorAccessor<?, String, ?, ?> accessor) {\n    int precision = ((Types.DecimalType) vectorHolder.icebergType()).precision();\n    int scale = ((Types.DecimalType) vectorHolder.icebergType()).scale();\n\n    DecimalVector vector =\n        new DecimalVector(\n            vectorHolder.vector().getName(),\n            ArrowSchemaUtil.convert(vectorHolder.icebergField()).getFieldType(),","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/arrow/src/main/java/org/apache/iceberg/arrow/DictEncodedArrowConverter.java#L59-L95","documentation":"DictEncodedArrowConverter.toArrowVector only supports dictionary-encoded fields of INT, LONG, FLOAT, DOUBLE, BINARY, and TIME Iceberg types. Any other dict-encoded type reaching the converter throws this IllegalArgumentException naming the field and type ID.","triggerScenarios":"Reading a data file whose dictionary-encoded column has an Iceberg type outside the supported set (e.g. dict-encoded DATE, TIMESTAMP, or DECIMAL) via the vectorized Arrow read path.","commonSituations":"Parquet files written by other engines with dictionary encoding on unusual column types; enabling vectorized reads on such data.","solutions":["Disable dictionary encoding for that column or rewrite the data so the column uses a supported encoding.","Disable vectorized/Arrow reads for the scan (fall back to the non-vectorized path).","Filter or project out the unsupported column in the scan schema."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"Set<Type.TypeID> supported = Set.of(Type.TypeID.INT, Type.TypeID.LONG, Type.TypeID.FLOAT, Type.TypeID.DOUBLE, Type.TypeID.BINARY, Type.TypeID.TIME);","typeGuard":"static boolean isDictDecodable(Types.NestedField f) { return Set.of(Type.TypeID.INT, Type.TypeID.LONG, Type.TypeID.FLOAT, Type.TypeID.DOUBLE, Type.TypeID.BINARY, Type.TypeID.TIME).contains(f.type().typeId()); }","tryCatchPattern":"try { return toArrowVector(holder, accessor); } catch (IllegalArgumentException e) { /* fall back to non-dict-encoded read path */ }","preventionTips":["Avoid dictionary encoding on DATE/TIMESTAMP/DECIMAL columns when writing Parquet for Arrow reads","Fall back to non-vectorized reads when schemas include unusual dict-encoded types"],"tags":["java","arrow","dictionary-encoding","type-mismatch"],"backgroundTag":"unsupported-dtype","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}