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
- 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.
- Create a view over the table that exposes only supported column types and read from the view.
- Exclude the semi-structured column from the query (SELECT only needed columns).
- 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
- Avoid VARIANT/OBJECT/ARRAY columns in tables read by SeaTunnel, or expose CASTed views.
- Check information_schema for column types before adding new tables to pipelines.
- Pin and test the connector version against your Snowflake account's types.
- Prefer explicit column lists over SELECT *.
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.