apache/seatunnel · error · IllegalArgumentException

Vitess CDC bootstrap schema does not support catalog SQL typ

Error message

Vitess CDC bootstrap schema does not support catalog SQL type '%s' for column '%s'.

What it means

Vitess CDC's bootstrap schema builder maps each column's SeaTunnel catalog data type to a java.sql.Types constant. When a column's type falls outside the supported set (VARCHAR, INT, TIME, TIMESTAMP, etc.), resolveJdbcType throws this IllegalArgumentException. It means the Vitess connector cannot represent that column type in its bootstrap schema, so the table schema cannot be constructed.

Source

Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-vitess/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/vitess/source/split/VitessTableSchemaState.java:193

            case BIGINT:
                return Types.BIGINT;
            case FLOAT:
                return Types.FLOAT;
            case DOUBLE:
                return Types.DOUBLE;
            case DECIMAL:
                return Types.DECIMAL;
            case BYTES:
                return Types.BINARY;
            case DATE:
                return Types.DATE;
            case TIME:
                return Types.TIME;
            case TIMESTAMP:
            case TIMESTAMP_TZ:
                return Types.TIMESTAMP;
            default:
                throw new IllegalArgumentException(
                        String.format(
                                "Vitess CDC bootstrap schema does not support catalog SQL type '%s' for column '%s'.",
                                column.getDataType().getSqlType(), column.getName()));
        }
    }

    private static String defaultTypeName(SqlType sqlType) {
        switch (sqlType) {
            case STRING:
                return "VARCHAR";
            case BOOLEAN:
                return "BOOLEAN";
            case TINYINT:
                return "TINYINT";
            case SMALLINT:
                return "SMALLINT";
            case INT:
                return "INT";

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Identify the column named in the message and alter its Vitess type to a supported equivalent (e.g. change to a supported numeric/string/datetime type) or exclude the column from the catalog table
  2. Add the missing case to resolveJdbcType's switch in VitessTableSchemaState.java mapping the new ColumnDataType to an appropriate java.sql.Types constant and rebuild
  3. Upgrade SeaTunnel to a version that maps the column's type, checking the connector's type-mapping code for newly supported cases

Example fix

// before
case TIME:
    return Types.TIME;
default:
    throw new IllegalArgumentException(...);
// after
case TIME:
    return Types.TIME;
case JSON:
    return Types.VARCHAR;
default:
    throw new IllegalArgumentException(...);
Defensive patterns

Strategy: validation

Validate before calling

Set<ColumnDataType> supported = Set.of(ColumnDataType.STRING, ColumnDataType.INT, ColumnDataType.BIGINT, ColumnDataType.DOUBLE, ColumnDataType.TIME, ColumnDataType.TIMESTAMP, ColumnDataType.TIMESTAMP_TZ);
for (Column column : tableColumns) {
    if (!supported.contains(column.getDataType())) {
        throw new IllegalArgumentException("Column '" + column.getName() + "' type " + column.getDataType().getSqlType() + " is not supported by Vitess CDC bootstrap");
    }
}

Type guard

boolean isSupportedVitessType(Column c) {
    return c != null && c.getDataType() != null && SUPPORTED_SQL_TYPES.contains(c.getDataType().getSqlType());
}

Try / catch

try {
    CatalogTable table = catalog.getTable(tablePath);
} catch (IllegalArgumentException e) {
    if (e.getMessage().contains("does not support catalog SQL type")) {
        logger.error("Unsupported column type during Vitess bootstrap: {}", e.getMessage());
        throw new ConfigurationException("Exclude or change the unsupported column", e);
    }
    throw e;
}

Prevention

When it happens

Trigger: Calling columnEditor -> resolveJdbcType during bootstrap (snapshot) schema building when a Vitess column's ColumnDataType maps to a SeaTunnel SqlType not handled by the switch, e.g. exotic types like BIT, JSON, UUID, ENUM/SET variants, or newly added Vitess types.

Common situations: Bootstrapping a Vitess table that contains newer or unusual column types (JSON, BIT, custom typed columns) not yet mapped by the connector; running a SeaTunnel version whose Vitess type-mapping table lags behind the Vitess server schema.

Related errors


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