{"record":{"id":"8f7e9ca457f0e6f6","repo":"apache/flink","slug":"only-simple-types-are-supported-in-the-second-leve","errorCode":null,"errorMessage":"Only simple types are supported in the second level nesting of fields '%s' but was: %s","messagePattern":"Only simple types are supported in the second level nesting of fields '(.+?)' but was: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/CsvRowSchemaConverter.java","lineNumber":242,"sourceCode":"            for (LogicalType fieldType : rowType.getChildren()) {\n                validateNestedField(fieldName, fieldType);\n            }\n            return CsvSchema.ColumnType.ARRAY;\n        } else {\n            throw new IllegalArgumentException(\n                    \"Unsupported type '\"\n                            + type.asSummaryString()\n                            + \"' for field '\"\n                            + fieldName\n                            + \"'.\");\n        }\n    }\n\n    private static void validateNestedField(String fieldName, TypeInformation<?> info) {\n        if (!NUMBER_TYPES.contains(info)\n                && !STRING_TYPES.contains(info)\n                && !BOOLEAN_TYPES.contains(info)) {\n            throw new IllegalArgumentException(\n                    \"Only simple types are supported in the second level nesting of fields '\"\n                            + fieldName\n                            + \"' but was: \"\n                            + info);\n        }\n    }\n\n    private static void validateNestedField(String fieldName, LogicalType type) {\n        if (!NUMBER_TYPE_ROOTS.contains(type.getTypeRoot())\n                && !STRING_TYPE_ROOTS.contains(type.getTypeRoot())\n                && !BOOLEAN_TYPE_ROOTS.contains(type.getTypeRoot())) {\n            throw new IllegalArgumentException(\n                    \"Only simple types are supported in the second level nesting of fields '\"\n                            + fieldName\n                            + \"' but was: \"\n                            + type.asSummaryString());\n        }\n    }","sourceCodeStart":224,"sourceCodeEnd":260,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/CsvRowSchemaConverter.java#L224-L260","documentation":"Validation from the TypeInformation overload of CsvRowSchemaConverter.validateNestedField(): when converting an ARRAY or ROW field, each element type must itself be a simple number/string/boolean. If a nested element is itself complex (map, another row/array), conversion aborts with 'Only simple types are supported in the second level nesting' — CSV's Jackson schema has no representation for deeper structure.","triggerScenarios":"A RowTypeInfo containing BasicArrayTypeInfo<ObjectArrayTypeInfo<RowTypeInfo...>> or ObjectArrayTypeInfo<MapTypeInfo...>: arrays-of-rows or arrays-of-maps inside the row.","commonSituations":"Reusing rich event types (orders with line-item arrays that are themselves rows) for a CSV DataStream sink without flattening.","solutions":["Flatten nested rows inside arrays into delimited strings or separate columns before CSV writing.","Move to a hierarchical format (json/avro/parquet) for such schemas.","Restructure the row so arrays contain only scalars."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"// Check array/row elements before schema build:\nvoid checkNested(String name, TypeInformation<?> el) {\n    if (!isCsvSimpleType(el)) throw new IllegalArgumentException(\n        \"Nested field \" + name + \" too deep for CSV: \" + el);\n}","typeGuard":"static boolean isCsvSimpleType(TypeInformation<?> info) {\n    return NUMBER_TYPES.contains(info) || STRING_TYPES.contains(info)\n        || BOOLEAN_TYPES.contains(info);\n}","tryCatchPattern":null,"preventionTips":["Keep arrays/rows to a single level of scalars for CSV","Flatten line-item-style structures into strings or normalized streams"],"tags":["csv","nesting","type-information","unsupported-type"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}