apache/seatunnel · error · org.apache.seatunnel.common.exception.SeaTunnelRuntimeException

COMMON-17

COMMON-17

Error message

'<identifier>' unsupported convert type '<dataType>' of '<field>' to SeaTunnel data type.

What it means

This error is thrown by the IRIS JDBC dialect's type converter when a source column type (IRIS data type) cannot be mapped to any supported SeaTunnel data type. SeaTunnel reads the database metadata / column definitions and maps each type; the default branch of the switch in IrisTypeConverter.convert() fires when the type has no mapping. It means schema conversion failed before any data was read or written.

Source

Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/iris/IrisTypeConverter.java:259

                builder.dataType(LocalTimeType.LOCAL_DATE_TIME_TYPE);
                break;
            case IRIS_BINARY:
            case IRIS_BINARY_VARYING:
            case IRIS_RAW:
            case IRIS_VARBINARY:
                builder.dataType(PrimitiveByteArrayType.INSTANCE);
                builder.columnLength(charOrBinaryLength);
                break;
            case IRIS_LONGVARBINARY:
            case IRIS_BLOB:
            case IRIS_IMAGE:
            case IRIS_LONG_BINARY:
            case IRIS_LONG_RAW:
                builder.dataType(PrimitiveByteArrayType.INSTANCE);
                builder.columnLength(Long.valueOf(Integer.MAX_VALUE));
                break;
            default:
                throw CommonError.convertToSeaTunnelTypeError(
                        DatabaseIdentifier.IRIS, irisDataType, typeDefine.getName());
        }
        return builder.build();
    }

    @Override
    public BasicTypeDefine reconvert(Column column) {
        BasicTypeDefine.BasicTypeDefineBuilder builder =
                BasicTypeDefine.builder()
                        .name(column.getName())
                        .precision(column.getColumnLength())
                        .length(column.getColumnLength())
                        .nullable(column.isNullable())
                        .comment(column.getComment())
                        .scale(column.getScale())
                        .defaultValue(column.getDefaultValue());
        switch (column.getDataType().getSqlType()) {
            case NULL:

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Identify the offending column from the error message field '<field>' and check its IRIS data type.
  2. Use a catalog 'table-names' config with explicit table_path/schema instead of auto-discovery, or exclude the offending column via query projection (SELECT only supported columns).
  3. Cast the column in a custom SQL query to a supported type (e.g. CAST to VARCHAR or BLOB) so the converter sees a mappable type.
  4. If the type is a legitimate new IRIS type, add a mapping case in IrisTypeConverter.convert() and contribute it upstream.

Example fix

// before
SELECT * FROM mytable;
// after
SELECT id, name, CAST(unusual_col AS VARCHAR(200)) AS unusual_col FROM mytable;
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-check column types against IRIS converter support before running the job
List<BasicTypeDefine> cols = catalog.getTableColumn(...).getColumns();
Set<String> supported = Set.of("VARCHAR","CHAR","INT","BIGINT","DECIMAL","DOUBLE","TIMESTAMP","DATE","TIME","BIT","IRIS_LONG_BINARY","IRIS_LONG_RAW");
for (BasicTypeDefine c : cols) {
  if (!supported.contains(c.getDataType().toUpperCase())) {
    throw new IllegalStateException("Column " + c.getName() + " type " + c.getDataType() + " not supported by IRIS converter");
  }
}

Type guard

boolean isSupportedIrisType(BasicTypeDefine td) {
    try { new IrisTypeConverter().convert(td); return true; }
    catch (SeaTunnelRuntimeException e) { return false; }
}

Try / catch

try {
    SeaTunnelDataType<?> dt = new IrisTypeConverter().convert(typeDefine);
} catch (SeaTunnelRuntimeException e) {
    if (e.getMessage().contains("unsupported convert type")) {
        LOG.warn("Skipping unsupported IRIS column: {}", e.getMessage());
    } else { throw e; }
}

Prevention

When it happens

Trigger: Calling convert(BasicTypeDefine) on IrisTypeConverter with a typeDefine whose data type falls through to the default switch branch in IrisTypeConverter.java:259 — e.g. unusual IRIS types like %Library.FilemanDate, custom user-defined types, or type names not in the supported list (IRIS_LONG_BINARY/IRIS_LONG_RAW etc. are handled, everything else is not).

Common situations: Reading from an InterSystems IRIS table containing exotic or user-defined column types; catalog/table-auto-parse mode where SeaTunnel discovers the schema automatically; IRIS version differences introducing new type names the converter doesn't know.

Related errors


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