apache/seatunnel · error · IllegalArgumentException

Unsupported parse SeaTunnel Type from '%s'.

Error message

Unsupported parse SeaTunnel Type from '%s'.

What it means

Within parseRowType, each field's declared type must resolve to a parseable SeaTunnel type; value types like LIST, NUMBER, BOOLEAN or NULL at a field-type position are not valid row field types, so the converter throws IllegalArgumentException with the offending value.

Source

Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/SeaTunnelDataTypeConvertorUtil.java:182

            switch (typeVal.valueType()) {
                case STRING:
                    {
                        fieldTypes[idx] =
                                deserializeSeaTunnelDataType(
                                        fieldNames[idx], (String) typeVal.unwrapped());
                    }
                    break;
                case OBJECT:
                    {
                        fieldTypes[idx] = parseRowType((ConfigObject) typeVal);
                    }
                    break;
                case LIST:
                case NUMBER:
                case BOOLEAN:
                case NULL:
                default:
                    throw new IllegalArgumentException(
                            String.format(
                                    "Unsupported parse SeaTunnel Type from '%s'.",
                                    typeVal.unwrapped()));
            }
        }
        return new SeaTunnelRowType(fieldNames, fieldTypes);
    }

    private static SeaTunnelDataType<?> parseMapType(String field, String columnStr) {
        String genericType = getGenericType(columnStr).trim();
        int index =
                genericType.toUpperCase().startsWith(SqlType.DECIMAL.name())
                        ?
                        // if map key is decimal, we should find the index of second ','
                        genericType.indexOf(",", genericType.indexOf(",") + 1)
                        :
                        // if map key is not decimal, we should find the index of first ','
                        genericType.indexOf(",");

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Correct the field type names to supported SeaTunnel types (string, int, bigint, double, map<...>, array<...>, row<...>)
  2. For containers, always include the element/value type parameters
  3. Check the connector's supported data type docs for the exact syntax

Example fix

// before
row<name list>            // incomplete/unsupported
// after
row<name array<string>>
Defensive patterns

Strategy: validation

Validate before calling

String[] supported = {"string","boolean","tinyint","smallint","int","bigint","float","double","decimal","date","time","timestamp","bytes","array","map","row"};
// ensure each field type token is one of these (with required params)

Try / catch

try { type = SeaTunnelDataTypeConvertorUtil.parseRowType(s); } catch (IllegalArgumentException e) { /* fix offending token shown in message */ }

Prevention

When it happens

Trigger: A field in a ROW type declaration uses an unsupported/unknown type token (e.g. 'row<a list>' where 'list' lacks element type, or any unrecognized name falling into the default switch case).

Common situations: Typos in type names (STRINGG, INTEGR), using container types without required parameters, or strings produced by another system using different type naming conventions.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


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