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
SnowflakeDataTypeConvertor.toSeaTunnelType maps Snowflake connector catalog data types to SeaTunnel types. Any Snowflake type that reaches the switch default has no configured mapping and throws COMMON-17 convertToSeaTunnelTypeError with DatabaseIdentifier.SNOWFLAKE, the connector data type, and the field name.
Solutions
- Identify the unsupported Snowflake type from the error message and cast it in the source query (e.g. TO_VARCHAR(variant_col))
- Change the table schema to use supported types (string, numeric, timestamp, boolean)
- Upgrade SeaTunnel to a version with broader Snowflake type support
- Add the missing case to SnowflakeDataTypeConvertor.toSeaTunnelType in a custom build
Example fix
// before SELECT variant_col FROM t; // after SELECT TO_VARCHAR(variant_col) AS variant_col FROM t;
Defensive patterns
Strategy: validation
Validate before calling
-- Check for semi-structured columns before configuring the JDBC catalog
SELECT column_name, data_type FROM information_schema.columns
WHERE table_name = 'MY_TABLE'
AND data_type IN ('VARIANT','OBJECT','ARRAY','GEOGRAPHY','GEOMETRY','BINARY'); Type guard
boolean isSupportedSnowflakeType(String snowflakeType) {
return java.util.List.of("NUMBER","DECIMAL","INT","FLOAT","BOOLEAN",
"VARCHAR","CHAR","DATE","TIME","TIMESTAMP_NTZ",
"TIMESTAMP_LTZ","TIMESTAMP_TZ")
.contains(snowflakeType.toUpperCase());
} Prevention
- Avoid VARIANT/OBJECT/ARRAY columns in tables read via the JDBC catalog
- Cast semi-structured columns with TO_VARCHAR in a source query or view
- Pre-check information_schema for unsupported data types
- Upgrade SeaTunnel for broader Snowflake type coverage
When it happens
Trigger: Catalog/schema conversion of a Snowflake column whose ConnectorDataType is not handled by the switch — e.g. rare Snowflake types like VARIANT, OBJECT, ARRAY, GEOGRAPHY, or BINARY that lack a case in toSeaTunnelType.
Common situations: Reading Snowflake tables containing semi-structured VARIANT/OBJECT/ARRAY columns; GEOGRAPHY/GEOMETRY columns; BLOB-like binary columns not mapped by this converter version.
Related errors
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/eb91e4ecfea539e8.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/snowflake/SnowflakeDataTypeConvertor.java:152
case SNOWFLAKE_GEOMETRY:
return BasicType.STRING_TYPE;
case SNOWFLAKE_BINARY:
case SNOWFLAKE_VARBINARY:
case SNOWFLAKE_GEOGRAPHY:
return PrimitiveByteArrayType.INSTANCE;
case SNOWFLAKE_DATE:
return LocalTimeType.LOCAL_DATE_TYPE;
case SNOWFLAKE_TIME:
return LocalTimeType.LOCAL_TIME_TYPE;
case SNOWFLAKE_DATE_TIME:
case SNOWFLAKE_TIMESTAMP:
case SNOWFLAKE_TIMESTAMP_NTZ:
return LocalTimeType.LOCAL_DATE_TIME_TYPE;
case SNOWFLAKE_TIMESTAMP_LTZ:
case SNOWFLAKE_TIMESTAMP_TZ:
return LocalTimeType.OFFSET_DATE_TIME_TYPE;
default:
throw CommonError.convertToSeaTunnelTypeError(
DatabaseIdentifier.SNOWFLAKE, connectorDataType, field);
}
}
@Override
public String toConnectorType(
String field,
SeaTunnelDataType<?> seaTunnelDataType,
Map<String, Object> dataTypeProperties) {
checkNotNull(seaTunnelDataType, "seaTunnelDataType cannot be null");
SqlType sqlType = seaTunnelDataType.getSqlType();
switch (sqlType) {
case TINYINT:
case SMALLINT:
return SNOWFLAKE_SMALLINT;
case INT:
return SNOWFLAKE_INTEGER;View on GitHub (pinned to cf67b549a7)