{"record":{"id":"1126a3c63dae4af7","repo":"apache/iceberg","slug":"unsupported-element-type-for-array-or-map-s","errorCode":null,"errorMessage":"Unsupported element type for Array or Map: %s","messagePattern":"Unsupported element type for Array or Map: (.+?)","errorType":"exception","errorClass":"java.lang.UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink/v2.1/flink/src/main/java/org/apache/iceberg/flink/data/VariantRowDataWrapper.java","lineNumber":208,"sourceCode":"      case BOOLEAN -> variant.getBoolean();\n      case TINYINT -> variant.getByte();\n      case SMALLINT -> variant.getShort();\n      case INTEGER -> intValue(variant);\n      case BIGINT -> longValue(variant);\n      case FLOAT -> variant.getFloat();\n      case DOUBLE -> doubleValue(variant);\n      case DECIMAL -> decimalDataValue(variant, (DecimalType) elementType);\n      case CHAR, VARCHAR -> StringData.fromString(variant.getString());\n      case TIMESTAMP_WITHOUT_TIME_ZONE ->\n          timestampValue(variant, ((TimestampType) elementType).getPrecision());\n      case TIMESTAMP_WITH_LOCAL_TIME_ZONE ->\n          timestampValue(variant, ((LocalZonedTimestampType) elementType).getPrecision());\n      case BINARY, VARBINARY -> variant.getBytes();\n      case ARRAY -> arrayDataValue(variant, ((ArrayType) elementType).getElementType());\n      case MAP -> mapDataValue(variant, (MapType) elementType);\n      case ROW -> new VariantRowDataWrapper((RowType) elementType).wrap(variant);\n      default ->\n          throw new UnsupportedOperationException(\n              String.format(\"Unsupported element type for Array or Map: %s\", elementType));\n    };\n  }\n\n  private static MapData mapDataValue(Variant variant, MapType mapType) {\n    if (isNull(variant)) {\n      return null;\n    }\n\n    LogicalType keyType = mapType.getKeyType();\n    LogicalType valueType = mapType.getValueType();\n\n    Preconditions.checkArgument(\n        keyType instanceof VarCharType,\n        \"Only Map with STRING key type is supported in Variant to RowData conversion\");\n\n    Map<Object, Object> mapData = Maps.newHashMap();\n    List<String> keys = BinaryVariantAccessorUtils.fieldNames(variant);","sourceCodeStart":190,"sourceCodeEnd":226,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v2.1/flink/src/main/java/org/apache/iceberg/flink/data/VariantRowDataWrapper.java#L190-L226","documentation":"elementValue converts a Variant value according to an expected Flink LogicalType; types outside the handled switch (not array/map/row/primitive cases) are rejected with this UnsupportedOperationException naming the LogicalType.","triggerScenarios":"Reading an ARRAY or MAP whose element/value LogicalType is not supported by elementValue (an unmapped type) and calling mapDataValue/arrayDataValue on a non-null variant.","commonSituations":"Schemas containing arrays or maps of unsupported element types (e.g. nested variant or newer logical types) read with a Flink runtime lacking that support.","solutions":["Upgrade iceberg-flink to a version supporting the element LogicalType","Restructure the schema so array/map elements use supported types","Flatten nested structures or store the element as a supported type (string/binary)"],"exampleFix":"// before\nTypes.NestedField f = schema.findField(\"tags\"); // MAP<STRING, VARIANT>\n// after\nTypes.NestedField f = schema.findField(\"tags\"); // MAP<STRING, STRING> supported","handlingStrategy":"type-guard","validationCode":"LogicalType el = arrayType.getElementType();\n// ensure el is a supported primitive/row before reading array data","typeGuard":"boolean isSupported(LogicalType t) {\n  return t instanceof IntType || t instanceof BigIntType || t instanceof VarCharType\n      || t instanceof RowType || t instanceof BinaryType || t instanceof LocalZonedTimestampType;\n}","tryCatchPattern":"try { return row.getArray(pos); }\ncatch (UnsupportedOperationException e) { /* unsupported element type: degrade to binary/string read */ }","preventionTips":["Restrict array/map element types to supported logical types","Validate RowType before registering the source","Keep iceberg-flink runtime current with table schema features"],"tags":["flink","variant","unsupported-type"],"backgroundTag":"unsupported-operation","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T21:17:11.552Z"}