{"record":{"id":"8f345f2ffcc7c519","repo":"prestodb/presto","slug":"iceberg-column-type-fieldtype-typeid-is-not-s","errorCode":null,"errorMessage":"Iceberg column type ${fieldType.typeId()} is not supported","messagePattern":"Iceberg column type (.+?) is not supported","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"presto-iceberg/src/main/java/com/facebook/presto/iceberg/ColumnIdentity.java","lineNumber":185,"sourceCode":"            return new ColumnIdentity(id, name, ARRAY, ImmutableList.of(elementColumn), typeAttributes);\n        }\n\n        if (fieldType.isStructType()) {\n            List<ColumnIdentity> fieldColumns = fieldType.asStructType().fields().stream()\n                    .map(ColumnIdentity::createColumnIdentity)\n                    .collect(toImmutableList());\n            return new ColumnIdentity(id, name, STRUCT, fieldColumns, typeAttributes);\n        }\n\n        if (fieldType.isMapType()) {\n            List<ColumnIdentity> keyValueColumns = fieldType.asMapType().fields().stream()\n                    .map(ColumnIdentity::createColumnIdentity)\n                    .collect(toImmutableList());\n            checkArgument(keyValueColumns.size() == 2, \"Expected map type to have two fields\");\n            return new ColumnIdentity(id, name, MAP, keyValueColumns, typeAttributes);\n        }\n\n        throw new UnsupportedOperationException(format(\"Iceberg column type %s is not supported\", fieldType.typeId()));\n    }\n\n    // Derives the Iceberg V3 type-disambiguation attributes (ORC Appendix A\n    // semantics) that the format-erased Presto type cannot represent. Returns\n    // Optional.empty() when nothing is set, so the attribute is omitted from the\n    // serialized handle and column identities are unchanged for the common\n    // case.\n    //\n    // Only UUID and FIXED are derived today: both Iceberg types map to Presto\n    // VARBINARY, so the binary variant and (for FIXED) the length are\n    // genuinely lost without these attributes. Iceberg LONG already maps 1:1\n    // to Presto BIGINT (and INT to INTEGER), so a `long-type` attribute would\n    // be redundant; timestamp unit is always microseconds in the current\n    // Iceberg spec; and `iceberg.required` (nullability) is carried by the ORC\n    // writer path. Those fields remain on IcebergTypeAttributes so the wire\n    // format and the native worker are ready for them, but deriving them here\n    // is deferred to avoid rewriting every column identity.\n    private static Optional<IcebergTypeAttributes> deriveTypeAttributes(org.apache.iceberg.types.Type fieldType)","sourceCodeStart":167,"sourceCodeEnd":203,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-iceberg/src/main/java/com/facebook/presto/iceberg/ColumnIdentity.java#L167-L203","documentation":"ColumnIdentity.createColumnIdentity maps Iceberg primitive field types to Presto column identities; when the field's typeId is one the connector does not recognize/translate, this NOT_SUPPORTED guard fires, meaning the table's schema contains an Iceberg type unsupported by this Presto version.","triggerScenarios":"Thrown at presto-iceberg/src/main/java/com/facebook/presto/iceberg/ColumnIdentity.java:185 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Identify the offending column type from the Iceberg schema and change it to a supported type","Upgrade Presto to a version supporting the newer Iceberg type (e.g. variant/nanosecond timestamps)"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}