apache/seatunnel · error · SeaTunnelJsonFormatException

UNSUPPORTED_DATA_TYPE

UNSUPPORTED_DATA_TYPE

Error message

unsupported parse type: ${type}

What it means

RowToJsonConverters.createNotNullConverter only implements converters for known SeaTunnel data types (ROW, ARRAY, MAP, primitives, etc.); any other/unmapped type reaches the default branch and fails with UNSUPPORTED_DATA_TYPE. It means the serializer cannot translate this SeaTunnel type into JSON.

Source

Thrown at seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/RowToJsonConverters.java:223

                                            ISO_LOCAL_DATE_TIME.format(
                                                    ((OffsetDateTime) value).toLocalDateTime()));
                        }
                    };
                }
                return new RowToJsonConverter() {
                    @Override
                    public JsonNode convert(ObjectMapper mapper, JsonNode reuse, Object value) {
                        return mapper.getNodeFactory()
                                .textNode(ISO_OFFSET_DATE_TIME.format((OffsetDateTime) value));
                    }
                };
            case ARRAY:
                return createArrayConverter((ArrayType) type);
            case MAP:
                MapType mapType = (MapType) type;
                return createMapConverter(mapType.getKeyType(), mapType.getValueType());
            default:
                throw new SeaTunnelJsonFormatException(
                        CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,
                        "unsupported parse type: " + type);
        }
    }

    private RowToJsonConverter createRowConverter(SeaTunnelRowType rowType) {
        final RowToJsonConverter[] fieldConverters =
                Arrays.stream(rowType.getFieldTypes())
                        .map(
                                new Function<SeaTunnelDataType<?>, Object>() {
                                    @Override
                                    public Object apply(SeaTunnelDataType<?> seaTunnelDataType) {
                                        return createConverter(seaTunnelDataType);
                                    }
                                })
                        .toArray(
                                new IntFunction<RowToJsonConverter[]>() {
                                    @Override

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Check the SeaTunnelRowType field types feeding the JSON serialization and cast unsupported fields to supported types (e.g. STRING, INT, ARRAY)
  2. Upgrade seatunnel-formats/seatunnel-format-json to a version that supports the data type
  3. Convert the unsupported type to a supported one upstream with a transform before the JSON sink
  4. If a legitimate type is unsupported, extend createNotNullConverter with a case for it

Example fix

// before
Transform: field kept as Map<ArrayType...> unsupported by JSON converter
// after
sql { sql = "SELECT CAST(complex_field AS STRING) AS complex_field FROM source_table" }
Defensive patterns

Strategy: type-guard

Validate before calling

for (DataField f : rowType.getFields()) {
    if (!SUPPORTED_JSON_TYPES.contains(f.getDataType().getSqlType())) {
        throw new IllegalStateException("Type not JSON-serializable: " + f.getDataType());
    }
}

Type guard

switch (type.getSqlType()) { case STRING: case INT: case BIGINT: case ARRAY: case MAP: case ROW: /* supported */ break; default: /* cast upstream */ }

Try / catch

try { converter = rowToJsonConverters.createConverter(rowType); } catch (SeaTunnelJsonFormatException e) { if (e.getSeaTunnelErrorCode() == CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE) { /* cast field or upgrade */ } else { throw e; } }

Prevention

When it happens

Trigger: Converting a SeaTunnelRow to JSON where the row type contains a data type not handled by the converter's switch (e.g. an unsupported or newly added SeaTunnelDataType reaching createConverter -> createNotNullConverter).

Common situations: Using a connector/transform output with exotic types (e.g. new type variants added to the API after this format was written) as sink input for JSON format; mismatched type declarations in config; older format module paired with newer API types.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/fc552fdfb2d59d0e. Report an issue: GitHub.