{"record":{"id":"4ea16191bb530eb3","repo":"apache/flink","slug":"unknown-columnio-s","errorCode":null,"errorMessage":"Unknown ColumnIO, %s","messagePattern":"Unknown ColumnIO, (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"flink-formats/flink-parquet/src/main/java/org/apache/flink/formats/parquet/vector/ParquetSplitReaderUtil.java","lineNumber":666,"sourceCode":"            ColumnIO elementTypeColumnIO;\n            if (columnIO instanceof GroupColumnIO) {\n                GroupColumnIO groupColumnIO = (GroupColumnIO) columnIO;\n                if (!StringUtils.isNullOrWhitespaceOnly(filedName)) {\n                    while (!Objects.equals(groupColumnIO.getName(), filedName)) {\n                        groupColumnIO = (GroupColumnIO) groupColumnIO.getChild(0);\n                    }\n                    elementTypeColumnIO = groupColumnIO;\n                } else {\n                    if (arrayType.getElementType() instanceof RowType) {\n                        elementTypeColumnIO = groupColumnIO;\n                    } else {\n                        elementTypeColumnIO = groupColumnIO.getChild(0);\n                    }\n                }\n            } else if (columnIO instanceof PrimitiveColumnIO) {\n                elementTypeColumnIO = columnIO;\n            } else {\n                throw new RuntimeException(String.format(\"Unknown ColumnIO, %s\", columnIO));\n            }\n\n            ParquetField field =\n                    constructField(\n                            new RowType.RowField(\"\", arrayType.getElementType()),\n                            getArrayElementColumn(elementTypeColumnIO));\n            if (repetitionLevel == field.getRepetitionLevel()) {\n                repetitionLevel = columnIO.getParent().getRepetitionLevel();\n            }\n            return new ParquetGroupField(\n                    type, repetitionLevel, definitionLevel, required, ImmutableList.of(field));\n        }\n\n        PrimitiveColumnIO primitiveColumnIO = (PrimitiveColumnIO) columnIO;\n        return new ParquetPrimitiveField(\n                type, required, primitiveColumnIO.getColumnDescriptor(), primitiveColumnIO.getId());\n    }\n","sourceCodeStart":648,"sourceCodeEnd":684,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-formats/flink-parquet/src/main/java/org/apache/flink/formats/parquet/vector/ParquetSplitReaderUtil.java#L648-L684","documentation":"RuntimeException from constructField in ParquetSplitReaderUtil while resolving an ARRAY field's element ColumnIO: the columnIO object is expected to be a GroupColumnIO (repeated group) or PrimitiveColumnIO; anything else - in practice impossible for well-formed files since ColumnIO only has those two concrete classes - trips this guard, so hitting it indicates schema/ColumnIO tree corruption or an API-level invariant break.","triggerScenarios":"constructField on an ArrayType where the resolved element columnIO is neither GroupColumnIO nor PrimitiveColumnIO - only reachable with malformed column IO trees built from inconsistent file metadata.","commonSituations":"Corrupted Parquet metadata; files written by broken experimental writers; extremely rare - most malformed schemas fail earlier in getAllColumnDescriptorByType.","solutions":["Regenerate or re-copy the file and retry; treat hitting this as data corruption","Compare with another reader (parquet-tools, Spark) to confirm the file is unreadable everywhere","Report upstream with the file schema if a valid file reproduces it"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"catch (RuntimeException e) { if (e.getMessage() != null && e.getMessage().startsWith(\"Unknown ColumnIO\")) { /* treat file as corrupt: quarantine and regenerate */ } else throw e; }","preventionTips":["Atomic writes (temp + rename) for all Parquet production jobs","Cross-validate suspicious files with an independent Parquet reader before debugging Flink"],"tags":["parquet","corruption","array","internal-invariant","flink"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}