{"record":{"id":"2aee1c963a40a8f2","repo":"apache/seatunnel","slug":"common-19","errorCode":"COMMON-19","errorMessage":"'<identifier>' unsupported convert SeaTunnel data type '<dataType>' of '<field>' to connector data type.","messagePattern":"'<identifier>' unsupported convert SeaTunnel data type '<dataType>' of '<field>' to connector data type\\.","errorType":"error_code","errorClass":"SeaTunnelRuntimeException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-amazondynamodb/src/main/java/org/apache/seatunnel/connectors/seatunnel/amazondynamodb/serialize/DefaultSeaTunnelRowSerializer.java","lineNumber":108,"sourceCode":"            case DECIMAL:\n                return AttributeValue.Type.N;\n            case STRING:\n            case DATE:\n            case TIME:\n            case TIMESTAMP:\n                return AttributeValue.Type.S;\n            case BOOLEAN:\n                return AttributeValue.Type.BOOL;\n            case NULL:\n                return AttributeValue.Type.NUL;\n            case BYTES:\n                return AttributeValue.Type.B;\n            case MAP:\n                return AttributeValue.Type.M;\n            case ARRAY:\n                return AttributeValue.Type.L;\n            default:\n                throw CommonError.convertToConnectorTypeError(\n                        \"AmazonDynamoDB\", seaTunnelDataType.getSqlType().toString(), field);\n        }\n    }\n\n    private AttributeValue convertItem(\n            String field,\n            Object value,\n            SeaTunnelDataType seaTunnelDataType,\n            AttributeValue.Type measurementsType) {\n        if (value == null) {\n            return AttributeValue.builder().nul(true).build();\n        }\n        switch (measurementsType) {\n            case N:\n                return AttributeValue.builder()\n                        .n(Integer.toString(((Number) value).intValue()))\n                        .build();\n            case S:","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-amazondynamodb/src/main/java/org/apache/seatunnel/connectors/seatunnel/amazondynamodb/serialize/DefaultSeaTunnelRowSerializer.java#L90-L126","documentation":"AmazonDynamoDB connector's DefaultSeaTunnelRowSerializer.convertType() maps a SeaTunnel SQL type to the corresponding DynamoDB AttributeValue type (S, N, B, M, L, etc.). When the field's SeaTunnel type has no mapping in the switch statement, it throws CommonError.convertToConnectorTypeError (COMMON-19). This means the serializer cannot represent that SeaTunnel type as a DynamoDB attribute, so the row cannot be written.","triggerScenarios":"Writing a SeaTunnelRow to DynamoDB whose SeaTunnelRowType contains a field with a SqlType not handled by convertType()'s switch (e.g. MAP/ARRAY variants beyond the mapped ones, or types like DATE, TIME, NULL, ROW depending on connector version). Triggered via serialize() -> convertTypes() -> convertType().","commonSituations":"Using a source table with columns typed as ROW/struct or other nested types and sinking to DynamoDB; schema drift after upstream adds a new column type; hardcoding a catalog schema that includes unsupported types like FLOAT or a newly added SeaTunnel type.","solutions":["Change the SeaTunnelRowType schema to only use supported types (STRING, INT, BIGINT, DOUBLE, BOOLEAN, BYTES, MAP, ARRAY) for the DynamoDB sink.","Add a converter/transform (e.g. CAST or field filter) upstream to drop or convert the unsupported field before the sink.","Extend DefaultSeaTunnelRowSerializer.convertType()/convertItem() with a mapping for the missing SqlType if the type genuinely maps to a DynamoDB attribute type.","Check the connector version's supported-type list in docs and align the catalog schema accordingly."],"exampleFix":"// before\nSeaTunnelRowType rowType = new SeaTunnelRowType(\n    new String[]{\"id\", \"created\"},\n    new SeaTunnelDataType[]{BasicType.STRING_TYPE, LocalTimeType.LOCAL_TIME_TYPE});\n\n// after (convert TIME to STRING upstream)\nSeaTunnelRowType rowType = new SeaTunnelRowType(\n    new String[]{\"id\", \"created\"},\n    new SeaTunnelDataType[]{BasicType.STRING_TYPE, BasicType.STRING_TYPE});","handlingStrategy":"validation","validationCode":"java\nSet<SqlType> supported = EnumSet.of(SqlType.STRING, SqlType.INT, SqlType.BIGINT, SqlType.DOUBLE, SqlType.BOOLEAN, SqlType.BYTES, SqlType.MAP, SqlType.ARRAY);\nfor (SeaTunnelDataType<?> t : rowType.getFieldTypes()) {\n    if (!supported.contains(t.getSqlType())) {\n        throw new IllegalArgumentException(\"Unsupported type for DynamoDB sink: \" + t.getSqlType());\n    }\n}","typeGuard":"java\nboolean isSupported(SeaTunnelDataType<?> t) {\n    switch (t.getSqlType()) {\n        case STRING: case INT: case BIGINT: case DOUBLE:\n        case BOOLEAN: case BYTES: case MAP: case ARRAY:\n            return true;\n        default:\n            return false;\n    }\n}","tryCatchPattern":null,"preventionTips":["Validate the sink schema against the connector's supported type list before job submission.","Keep the catalog schema explicit rather than inferring from source to avoid unexpected types.","Add a Filter/CAST transform for columns that DynamoDB cannot represent.","Re-validate schemas after upstream schema changes or SeaTunnel upgrades."],"tags":["dynamodb","serialization","unsupported-type","sea-tunnel"],"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"}