{"record":{"id":"7771a094f74b6503","repo":"apache/seatunnel","slug":"no-converter-found-for-key","errorCode":null,"errorMessage":"No converter found for key:{}","messagePattern":"No converter found for key:(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-common/src/main/java/org/apache/seatunnel/connectors/seatunnel/common/source/arrow/converter/StructConverter.java","lineNumber":53,"sourceCode":"    public Object convert(int rowIndex, StructVector fieldVector) {\n        return fieldVector.isNull(rowIndex) ? null : fieldVector.getObject(rowIndex);\n    }\n\n    @Override\n    public Object convert(\n            int rowIndex, StructVector fieldVector, Map<String, Function> genericsConverters) {\n        Map<String, ?> valueMap = fieldVector.getObject(rowIndex);\n        return valueMap.entrySet().stream()\n                .collect(\n                        Collectors.toMap(\n                                Map.Entry::getKey,\n                                e -> {\n                                    Optional<Function> optional =\n                                            Optional.ofNullable(genericsConverters.get(e.getKey()));\n                                    if (optional.isPresent()) {\n                                        return optional.get().apply(e.getValue());\n                                    } else {\n                                        log.warn(\"No converter found for key:{}\", e.getKey());\n                                        return e.getValue();\n                                    }\n                                }));\n    }\n\n    @Override\n    public boolean support(Types.MinorType type) {\n        return Types.MinorType.STRUCT == type;\n    }\n}\n","sourceCodeStart":35,"sourceCodeEnd":64,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-common/src/main/java/org/apache/seatunnel/connectors/seatunnel/common/source/arrow/converter/StructConverter.java#L35-L64","documentation":"StructConverter converts Arrow vector children to SeaTunnel types using a map of per-field converters (genericsConverters). When a child field's key has no registered converter, this warning is logged and the raw value is passed through unconverted. This is a graceful fallback, not an exception; the unconverted value may have an unexpected Java type downstream.","triggerScenarios":"An Arrow StructVector contains a child field whose name/key is not present in the genericsConverters map — i.e., an Arrow data type the converter factory did not build a converter for (e.g. unusual logical types like Decimal, Union, or Extension types).","commonSituations":"Reading Arrow data produced by upstream systems with richer types than the connector supports; new Arrow logical types not covered by the converter registry; nested/complex structs whose children were not registered.","solutions":["Check which key is reported and add/register a converter for that Arrow child type, or upgrade SeaTunnel to a version that supports it","Inspect the Arrow schema upstream and cast unsupported columns to supported types (e.g. cast Decimal to Double) before they reach the source","Verify the passthrough value type downstream is acceptable; if not, transform the data at the source system"],"exampleFix":"// before (registry missing Decimal converter)\ngenericsConverters = Map.of(\"int\", intFn, \"varchar\", strFn);\n// after\ngenericsConverters.put(\"decimal\", decimalFn); // register converter for the missing key","handlingStrategy":"fallback","validationCode":"// Validate Arrow schema before reading\nfor (Field child : structVector.getField().getChildren()) {\n  if (!knownConverterKeys.contains(child.getName())) {\n    log.warn(\"Column {} will pass through unconverted\", child.getName());\n  }\n}","typeGuard":"boolean hasConverter(String key) {\n  return genericsConverters.containsKey(key);\n}","tryCatchPattern":null,"preventionTips":["Cast unsupported Arrow types upstream to primitives before writing","Keep upstream Arrow schema and connector version compatible","Downstream, assert/verify value types after conversion to catch passthrough values"],"tags":["arrow","type-conversion","fallback"],"backgroundTag":"unsupported-dtype","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}