{"record":{"id":"0dd95b98aed1fc43","repo":"apache/iceberg","slug":"unsupported-element-type-for-array-or-map-s-0dd95b","errorCode":null,"errorMessage":"Unsupported element type for Array or Map: %s","messagePattern":"Unsupported element type for Array or Map: (.+?)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink/v2.2/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.2/flink/src/main/java/org/apache/iceberg/flink/data/VariantRowDataWrapper.java#L190-L226","documentation":"VariantRowDataWrapper.elementValue converts a Variant element (inside an ARRAY or MAP) into Flink data according to the declared Flink LogicalType. The switch handles primitives, decimal, string, timestamps, binary, arrays, maps and rows; any other LogicalTypeRoot (e.g. DATE, TIME, INTERVAL, MULTISET) is unsupported and throws UnsupportedOperationException with the element type formatted in the message.","triggerScenarios":"Reading an Iceberg variant column through VariantRowDataWrapper where an array element type or map value type is declared as a Flink type outside the supported set — e.g. a variant array of DATE or TIME values, or a map with non-string key routed to elementValue, in VariantRowDataWrapper.getArray/getMap.","commonSituations":"Declaring a Flink schema for a variant column whose nested array/map element types use DATE, TIME, or other logical types the wrapper doesn't map; schema evolution adding new element types to variant collections; engine version differences in which Flink types a variant can surface as.","solutions":["Adjust the declared RowType so array element / map value types are among the supported set (primitives, decimal, string, timestamp, binary, array, map, row).","Convert unsupported element types (e.g. DATE, TIME) upstream — e.g. read them as string or as their epoch representations.","Upgrade iceberg-flink if a newer version added support for the logical type named in the message.","Filter out or cast the offending nested field in the query before it reaches the variant wrapper."],"exampleFix":"// before\n// rowType declares element type DATE() for a variant array\nRowData row = new VariantRowDataWrapper(rowType).wrap(variant);\nArrayData arr = row.getArray(pos); // throws\n\n// after\n// declare the element as VARCHAR and convert at the sink\nRowType fixedType = RowType.of(new VarCharType(), ...);\nRowData row = new VariantRowDataWrapper(fixedType).wrap(variant);\nStringData dateStr = row.getArray(pos).getString(0); // \"2026-09-11\"","handlingStrategy":"validation","validationCode":"Set<LogicalTypeRoot> supported = Set.of(LogicalTypeRoot.NULL, LogicalTypeRoot.BOOLEAN,\n    LogicalTypeRoot.TINYINT, LogicalTypeRoot.SMALLINT, LogicalTypeRoot.INTEGER, LogicalTypeRoot.BIGINT,\n    LogicalTypeRoot.FLOAT, LogicalTypeRoot.DOUBLE, LogicalTypeRoot.DECIMAL, LogicalTypeRoot.CHAR,\n    LogicalTypeRoot.VARCHAR, LogicalTypeRoot.TIMESTAMP_WITHOUT_TIME_ZONE,\n    LogicalTypeRoot.TIMESTAMP_WITH_LOCAL_TIME_ZONE, LogicalTypeRoot.BINARY, LogicalTypeRoot.VARBINARY,\n    LogicalTypeRoot.ARRAY, LogicalTypeRoot.MAP, LogicalTypeRoot.ROW);\nLogicalTypeRoot root = elemType.getTypeRoot();\nPreconditions.checkArgument(supported.contains(root),\n    \"Element type %s unsupported in Variant array/map\", elemType);","typeGuard":"boolean isVariantElementSupported(LogicalType t) {\n  switch (t.getTypeRoot()) {\n    case DATE:\n    case TIME_WITHOUT_TIME_ZONE:\n    case INTERVAL_YEAR_MONTH:\n    case INTERVAL_DAY_TIME:\n      return false;\n    default:\n      return true;\n  }\n}","tryCatchPattern":"try {\n  ArrayData arr = wrapper.getArray(pos);\n} catch (UnsupportedOperationException e) {\n  if (e.getMessage().startsWith(\"Unsupported element type for Array or Map:\")) {\n    log.error(\"Variant collection element type not supported: {}\", e.getMessage());\n    throw new UnsupportedColumnTypeException(e);\n  }\n  throw e;\n}","preventionTips":["Declare only supported LogicalTypes for variant array elements and map values in your RowType.","Convert DATE/TIME-typed variant elements to VARCHAR or INT representations upstream."],"tags":["flink","variant","array","map","unsupported-type"],"backgroundTag":"unsupported-dtype","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"}