{"record":{"id":"519a5e1b766dfbe2","repo":"apache/seatunnel","slug":"unsupported-data-type-519a5e","errorCode":"UNSUPPORTED_DATA_TYPE","errorMessage":"SeaTunnel can not parse this date format [%s] of field [%s]","messagePattern":"SeaTunnel can not parse this date format \\[(.+?)\\] of field \\[(.+?)\\]","errorType":"error_code","errorClass":"SeaTunnelJsonFormatException","httpStatus":null,"severity":"error","filePath":"seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/debezium/DebeziumRowConverter.java","lineNumber":127,"sourceCode":"                return value.asText();\n            case BYTES:\n                try {\n                    return value.binaryValue();\n                } catch (IOException e) {\n                    throw new RuntimeException(\"Invalid bytes field\", e);\n                }\n            case DATE:\n                String dateStr = value.asText();\n                if (value.canConvertToLong()) {\n                    return LocalDate.ofEpochDay(Long.parseLong(dateStr));\n                }\n                DateTimeFormatter dateFormatter = fieldFormatterMap.get(fieldName);\n                if (dateFormatter == null) {\n                    dateFormatter = DateUtils.matchDateFormatter(dateStr);\n                    fieldFormatterMap.put(fieldName, dateFormatter);\n                }\n                if (dateFormatter == null) {\n                    throw new SeaTunnelJsonFormatException(\n                            CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,\n                            String.format(\n                                    \"SeaTunnel can not parse this date format [%s] of field [%s]\",\n                                    dateStr, fieldName));\n                }\n                return dateFormatter.parse(dateStr).query(TemporalQueries.localDate());\n            case TIME:\n                String timeStr = value.asText();\n                if (value.canConvertToLong()) {\n                    long time = Long.parseLong(timeStr);\n                    if (timeStr.length() == 8) {\n                        time = TimeUnit.SECONDS.toMicros(time);\n                    } else if (timeStr.length() == 11) {\n                        time = TimeUnit.MILLISECONDS.toMicros(time);\n                    }\n                    return LocalTime.ofNanoOfDay(time);\n                }\n","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/debezium/DebeziumRowConverter.java#L109-L145","documentation":"For DATE fields delivered as strings, the converter matches the string against a set of known date formatters (DateUtils.matchDateFormatter). If no formatter matches, the format cannot interpret the value and throws SeaTunnelJsonFormatException with UNSUPPORTED_DATA_TYPE. Only recognized date patterns can be converted to a SeaTunnelDate.","triggerScenarios":"getValue() on a DATE field whose asText() produces a string (e.g. \"31/12/2026\" or \"2026-13-01\") that matches none of the supported patterns; also canExtendToDate fails so the string path is taken and matchDateFormatter returns null.","commonSituations":"Source columns typed as text with locale-specific or non-ISO date formats; Debezium converters emitting dates in unexpected formats; data quality issues (invalid dates like 2026-02-30) in the source database.","solutions":["Clean/normalize the source column to an ISO format (yyyy-MM-dd) or a supported pattern","Add a custom date converter/SMT in Debezium to emit ISO-8601 dates","Pre-parse the field upstream (e.g. in a transform) so it arrives as a number (epoch days) instead of a string","Extend DateUtils.matchDateFormatter with the needed pattern if the format is legitimate and recurring"],"exampleFix":"// before: source emits '12/31/2026'\n// after: Debezium SMT normalizes to ISO\n\"transforms\": \"dateFmt\",\n\"transforms.dateFmt.type\": \"org.apache.seatunnel...TimestampConverter$Value\",\n\"transforms.dateFmt.field\": \"birth_date\",\n\"transforms.dateFmt.target.type\": \"Date\",\n\"transforms.dateFmt.format\": \"yyyy-MM-dd\"","handlingStrategy":"try-catch","validationCode":"String s = payload.get(\"dateField\").asText();\nif (java.time.LocalDate.parse(s) == null) { /* not ISO */ }\n// or pre-check with the same formatter set used by DateUtils.matchDateFormatter","typeGuard":null,"tryCatchPattern":"try {\n    row = converter.parse(payload);\n} catch (SeaTunnelJsonFormatException e) {\n    if (e.getMessage().contains(\"can not parse this date format\")) {\n        log.error(\"Normalize source date column to yyyy-MM-dd or add a matching formatter\", e);\n    }\n    throw e;\n}","preventionTips":["Store dates in ISO yyyy-MM-dd (DATE type) columns at the source","Avoid locale-specific text date formats in CDC columns","Pre-convert problematic columns upstream or via a transform","Cover date formats in pipeline integration tests"],"tags":["cdc","debezium","date","format"],"backgroundTag":"invalid-date-format","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}