apache/seatunnel · error · SeaTunnelRuntimeException

COMMON-17

COMMON-17

Error message

'${identifier}' unsupported convert type '${dataType}' of '${field}' to SeaTunnel data type.

What it means

YashanDB dialect type converter's convert() throws this when a YashanDB column type string has no mapping to a SeaTunnel data type. The default branch of the type switch is reached for YashanDB types (or VECTOR variants) that the converter does not recognize, so it refuses to guess a SeaTunnel type.

Solutions

  1. Identify the offending type from the error's dataType field and check the source table schema
  2. Cast the column to a supported type in the SQL query (e.g. TO_CHAR / NUMBER)
  3. Upgrade the connector version which may add the missing mapping
  4. Add a case for the missing type in YashanDbTypeConverter.convert()

Example fix

-- before: SELECT special_col FROM t
-- after
SELECT CAST(special_col AS VARCHAR(4000)) AS special_col FROM t
Defensive patterns

Strategy: try-catch

Try / catch

try {
    CatalogColumn col = yashanConverter.convert(typeDefine);
} catch (SeaTunnelConvertException e) {
    LOG.warn("Unmapped YashanDB type {} for column {}", typeDefine.getColumnType(), typeDefine.getName());
    // fallback: map to STRING type manually
}

Prevention

When it happens

Trigger: Calling YashanDbTypeConverter.convert() (via fromConnectorType/toSeaTunnelType) with a yashanType string not covered by the switch — e.g. an exotic or newer YashanDB data type.

Common situations: Reading a YashanDB table containing a newer or uncommon data type; YashanDB server version newer than the connector's supported type list; user-defined or domain types.

Related errors


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

Appendix: source

Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/yashandb/YashanDbTypeConverter.java:308

                if (typeDefine.getScale() == null) {
                    builder.scale(TIMESTAMP_DEFAULT_SCALE);
                } else {
                    builder.scale(typeDefine.getScale());
                }
                break;

                // ====================== Interval types (as STRING) ======================
            case INTERVAL_YEAR_TO_MONTH:
            case INTERVAL_DAY_TO_SECOND:
                builder.dataType(BasicType.STRING_TYPE);
                break;
            case VECTOR_NAME:
                builder.dataType(VectorType.VECTOR_FLOAT_TYPE);
                builder.scale(typeDefine.getScale());
                builder.columnLength(typeDefine.getLength());
                break;
            default:
                throw CommonError.convertToSeaTunnelTypeError(
                        DatabaseIdentifier.YASHANDB, yashanType, typeDefine.getName());
        }
        return builder.build();
    }

    @Override
    public BasicTypeDefine<?> reconvert(Column column) {
        BasicTypeDefine.BasicTypeDefineBuilder<?> builder =
                BasicTypeDefine.builder()
                        .name(column.getName())
                        .nullable(column.isNullable())
                        .comment(column.getComment())
                        .defaultValue(column.getDefaultValue());
        switch (column.getDataType().getSqlType()) {
            case BOOLEAN:
                builder.columnType(BOOLEAN);
                builder.dataType(BOOLEAN);
                break;

View on GitHub (pinned to cf67b549a7)