apache/seatunnel · error · SeaTunnelRuntimeException

COMMON-17

COMMON-17

Error message

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

What it means

SnowflakeTypeConverter.convert() maps a Snowflake source column type (typeDefine, e.g. from DESCRIBE/metadata) to a SeaTunnel data type. Unknown/unmapped Snowflake type strings hit the switch's default branch and throw CommonError.convertToSeaTunnelTypeError. The source cannot read that column into the SeaTunnel type system.

Source

Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/snowflake/SnowflakeTypeConverter.java:184

                builder.dataType(LocalTimeType.LOCAL_DATE_TYPE);
                break;
            case SNOWFLAKE_TIME:
                builder.dataType(LocalTimeType.LOCAL_TIME_TYPE);
                builder.scale(9);
                break;
            case SNOWFLAKE_DATE_TIME:
            case SNOWFLAKE_TIMESTAMP:
            case SNOWFLAKE_TIMESTAMP_NTZ:
                builder.dataType(LocalTimeType.LOCAL_DATE_TIME_TYPE);
                builder.scale(9);
                break;
            case SNOWFLAKE_TIMESTAMP_LTZ:
            case SNOWFLAKE_TIMESTAMP_TZ:
                builder.dataType(LocalTimeType.OFFSET_DATE_TIME_TYPE);
                builder.scale(9);
                break;
            default:
                throw CommonError.convertToSeaTunnelTypeError(
                        DatabaseIdentifier.SNOWFLAKE, dataType, 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 TINYINT:
            case SMALLINT:
                builder.columnType(SNOWFLAKE_SMALLINT);
                builder.dataType(SNOWFLAKE_SMALLINT);

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Cast the column to a supported type in the Snowflake SQL query/table view, e.g. SELECT CAST(v AS STRING) AS v FROM t.
  2. Create a view over the table that exposes only supported column types and read from the view.
  3. Exclude the semi-structured column from the query (SELECT only needed columns).
  4. Upgrade the connector/SeaTunnel version in case newer mappings were added; otherwise add a mapping case for the type.

Example fix

// before: SELECT * FROM raw_events (contains VARIANT col)
// after
SELECT event_id, CAST(payload AS STRING) AS payload_str FROM raw_events
Defensive patterns

Strategy: validation

Validate before calling

-- Run before the job to find unsupported Snowflake columns
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'MY_TABLE'
  AND data_type NOT IN ('NUMBER','DECIMAL','NUMERIC','INT','INTEGER','BIGINT','SMALLINT',
                        'FLOAT','FLOAT8','DOUBLE','REAL','VARCHAR','CHAR','CHARACTER',
                        'STRING','TEXT','BOOLEAN','DATE','TIME','TIMESTAMP_NTZ',
                        'TIMESTAMP_LTZ','TIMESTAMP_TZ','BINARY','VARBINARY');

Try / catch

try {
    sourceReader.read();
} catch (SeaTunnelRuntimeException e) {
    if (e.getMessage().contains("unsupported convert type")) {
        // rewrite query with CAST for the named column, then retry
    } else { throw e; }
}

Prevention

When it happens

Trigger: Reading a Snowflake table whose column type string is not among the handled SNOWFLAKE_* constants (e.g. VARIANT, OBJECT, ARRAY, GEOGRAPHY, or a custom/alias type) during catalog/table schema conversion.

Common situations: Semi-structured Snowflake columns (VARIANT/OBJECT/ARRAY) in a source table; newer Snowflake types not supported by the connector version; type aliases resolving to unexpected strings in metadata.

Related errors


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