{"record":{"id":"1f05c5c7829e0184","repo":"apache/beam","slug":"arrow-schema-conversion-does-not-support-beam-type-s-for","errorCode":null,"errorMessage":"Arrow schema conversion does not support Beam type '%s' for field '%s'.","messagePattern":"Arrow schema conversion does not support Beam type '(.+?)' for field '(.+?)'\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/arrow/src/main/java/org/apache/beam/sdk/extensions/arrow/ArrowConversion.java","lineNumber":99,"sourceCode":"        arrowType = new ArrowType.FloatingPoint(FloatingPointPrecision.SINGLE);\n        break;\n      case DOUBLE:\n        arrowType = new ArrowType.FloatingPoint(FloatingPointPrecision.DOUBLE);\n        break;\n      case STRING:\n        arrowType = ArrowType.Utf8.INSTANCE;\n        break;\n      case BOOLEAN:\n        arrowType = ArrowType.Bool.INSTANCE;\n        break;\n      case BYTES:\n        arrowType = ArrowType.Binary.INSTANCE;\n        break;\n      case DATETIME:\n        arrowType = new ArrowType.Timestamp(TimeUnit.MILLISECOND, \"UTC\");\n        break;\n      default:\n        throw new IllegalArgumentException(\n            String.format(\n                \"Arrow schema conversion does not support Beam type '%s' for field '%s'.\",\n                beamFieldType.getTypeName(), field.getName()));\n    }\n\n    org.apache.arrow.vector.types.pojo.FieldType arrowFieldType =\n        beamFieldType.getNullable()\n            ? org.apache.arrow.vector.types.pojo.FieldType.nullable(arrowType)\n            : org.apache.arrow.vector.types.pojo.FieldType.notNullable(arrowType);\n    return new org.apache.arrow.vector.types.pojo.Field(\n        field.getName(), arrowFieldType, Collections.emptyList());\n  }\n\n  /** Get Beam Field from Arrow Field. */\n  private static Field toBeamField(org.apache.arrow.vector.types.pojo.Field field) {\n    FieldType beamFieldType = toFieldType(field.getFieldType(), field.getChildren());\n    return Field.of(field.getName(), beamFieldType);\n  }","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/arrow/src/main/java/org/apache/beam/sdk/extensions/arrow/ArrowConversion.java#L81-L117","documentation":"toArrowField maps Beam schema field types to Arrow types; Beam types with no Arrow equivalent (e.g. ITERABLE, MAP, logical types not handled) hit the default branch and throw. The library intentionally limits conversion to primitive-compatible types.","triggerScenarios":"Converting a Beam Schema to Arrow via ArrowConversion when the Schema contains a field whose FieldType has an unsupported TypeName (anything not covered by the switch: beyond BYTE..DATETIME, e.g. ITERABLE, MAP, DECIMAL, logical types).","commonSituations":"Converting rows from sources with nested or logical types (e.g. JsonToRow schemas, BigQuery logical types) to Arrow record batches for cross-language/instance output.","solutions":["Flatten or drop unsupported fields from the Beam Schema before conversion","Map unsupported types manually (e.g. convert ITERABLE to repeated primitives, DECIMAL to string) before calling toArrowField","Extend the switch in ArrowConversion to add the needed mapping and contribute upstream","Catch IllegalArgumentException and skip/convert the offending field by name reported in the message"],"exampleFix":"// before\nSchema schema = row.getSchema(); // contains ITERABLE field\nVectorSchemaRoot root = ArrowConversion.toArrowVector(allocator, rows, schema);\n// after\nSchema flat = new Schema(schema.getFields().stream()\n    .filter(f -> f.getType().getTypeName().isPrimitiveType())\n    .collect(Collectors.toList()));\nVectorSchemaRoot root = ArrowConversion.toArrowVector(allocator, rows, flat);","handlingStrategy":"validation","validationCode":"java.util.Set<TypeName> supported = Set.of(TypeName.BYTE, TypeName.INT16, TypeName.INT32,\n    TypeName.INT64, TypeName.FLOAT, TypeName.DOUBLE, TypeName.STRING, TypeName.BOOLEAN,\n    TypeName.DATETIME);\nfor (Field f : schema.getFields()) {\n  if (!supported.contains(f.getType().getTypeName())) {\n    throw new IllegalArgumentException(\"Unsupported field for Arrow: \" + f.getName());\n  }\n}","typeGuard":null,"tryCatchPattern":"try { root = ArrowConversion.toArrowVector(allocator, rows, schema); } catch (IllegalArgumentException e) { schema = dropUnsupportedFields(schema); root = ArrowConversion.toArrowVector(allocator, rows, schema); }","preventionTips":["Flatten nested/logical Beam types before Arrow conversion","Pre-scan schemas with isPrimitiveType()","Keep conversion utilities close to the version of ArrowConversion in use"],"tags":["java","arrow","schema","type-conversion"],"backgroundTag":"unsupported-dtype","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}