{"record":{"id":"36df60dd0f8cfdbd","repo":"apache/flink","slug":"nested-field-expression-not-possible-on-atomi-36df60","errorCode":null,"errorMessage":"Nested field expression \"{}\" not possible on atomic type {}.","messagePattern":"Nested field expression \"(.+?)\" not possible on atomic type (.+?)\\.","errorType":"exception","errorClass":"InvalidFieldReferenceException","httpStatus":null,"severity":"error","filePath":"flink-core/src/main/java/org/apache/flink/api/java/typeutils/TupleTypeInfoBase.java","lineNumber":173,"sourceCode":"                    ((CompositeType<?>) fieldType).getFlatFields(\"*\", offset, result);\n                } else {\n                    // we found the field to add\n                    // compute flat field position by adding skipped fields\n                    int flatFieldPos = offset;\n                    for (int i = 0; i < fieldPos; i++) {\n                        flatFieldPos += this.getTypeAt(i).getTotalFields();\n                    }\n                    result.add(new FlatFieldDescriptor(flatFieldPos, fieldType));\n                }\n            } else {\n                if (fieldType instanceof CompositeType<?>) {\n                    // forward offset\n                    for (int i = 0; i < fieldPos; i++) {\n                        offset += this.getTypeAt(i).getTotalFields();\n                    }\n                    ((CompositeType<?>) fieldType).getFlatFields(tail, offset, result);\n                } else {\n                    throw new InvalidFieldReferenceException(\n                            \"Nested field expression \\\"\"\n                                    + tail\n                                    + \"\\\" not possible on atomic type \"\n                                    + fieldType\n                                    + \".\");\n                }\n            }\n        }\n    }\n\n    @Override\n    public <X> TypeInformation<X> getTypeAt(String fieldExpression) {\n\n        Matcher matcher = PATTERN_NESTED_FIELDS.matcher(fieldExpression);\n        if (!matcher.matches()) {\n            if (fieldExpression.equals(ExpressionKeys.SELECT_ALL_CHAR)\n                    || fieldExpression.equals(ExpressionKeys.SELECT_ALL_CHAR_SCALA)) {\n                throw new InvalidFieldReferenceException(","sourceCodeStart":155,"sourceCodeEnd":191,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TupleTypeInfoBase.java#L155-L191","documentation":"Thrown by TupleTypeInfoBase.getFlatFields when a nested expression (e.g. \"f0.sub\") references a tuple field whose TypeInformation is atomic (not a CompositeType). You cannot drill into a scalar with a dot-separated tail. This is an InvalidFieldReferenceException.","triggerScenarios":"Calling tupleType.getFlatFields(\"f0.length\") where f0 is a String (atomic), or keyBy(\"f1.value\") where f1 is an Integer. The tail (matcher.group(5)) is non-null but fieldType is not a CompositeType.","commonSituations":"Developer assumes a tuple field holds a nested Tuple/POJO but it is a basic type. Common when working with mixed tuples where only some fields are composite.","solutions":["Remove the '.tail' — reference the atomic field directly (e.g. 'f0').","If nesting is required, confirm the field's type is a CompositeType via tupleType.getTypeAt(pos)."],"exampleFix":"// before\ntupleType.getFlatFields(\"f0.inner\"); // f0 is String\n// after\ntupleType.getFlatFields(\"f0\");","handlingStrategy":"type-guard","validationCode":"TypeInformation<?> ft = tupleType.getTypeAt(fieldPos);\nif (tail != null && !(ft instanceof CompositeType)) {\n    throw new IllegalArgumentException(\n        \"Cannot nest into atomic \" + ft);\n}","typeGuard":"boolean canNestInto(TupleTypeInfoBase<?> type, int pos) {\n    return type.getTypeAt(pos) instanceof CompositeType;\n}","tryCatchPattern":null,"preventionTips":["Verify a tuple field is a CompositeType before using nested expressions."],"tags":["tuple","nested-field","atomic-type","type-system","flink-core"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}