apache/seatunnel · error · SeaTunnelRuntimeException
COMMON-17
COMMON-17
Error message
'${identifier}' unsupported convert type '${dataType}' of '${field}' to SeaTunnel data type. What it means
MaxCompute runtime type converter's convert() throws this when a column's native SqlType (from the typeDefine builder) is INTERVAL or another unmapped type. INTERmidate types like INTERVAL have no SeaTunnel equivalent mapping, so the default branch throws instead of returning a wrong type.
Solutions
- Cast the interval column to a supported type (e.g. BIGINT seconds or STRING) upstream
- Remove interval columns from the schema/SELECT list
- Add an INTERVAL mapping case in MaxComputeTypeConverter.convert() if a sensible representation exists
Example fix
// before: schema includes Column.of("dur", TimeIntervalType.class)
// after
Column dur = Column.of("dur", BasicType.LONG_TYPE); // store seconds Defensive patterns
Strategy: try-catch
Try / catch
try {
CatalogColumn col = maxComputeConverter.convert(column);
} catch (SeaTunnelConvertException e) {
LOG.warn("Unsupported SqlType {} for column {}", column.getDataType().getSqlType(), column.getName());
// fallback: replace with a supported representation upstream
} Prevention
- Fail fast on INTERVAL and exotic types at schema-definition time
When it happens
Trigger: MaxComputeTypeConverter.convert() (also invoked via arrayColumn/keyColumn/valueColumn for nested elements) encounters a Column with SqlType INTERVAL or any type without an explicit case.
Common situations: Source schema containing interval or exotic types propagated into MaxCompute read/write paths; nested array/map element columns carrying unmapped SqlTypes.
Related errors
- COMMON-17
- COMMON-19
- The decimal column type decimal( , ) is out of range, which…
- The decimal column type decimal( , ) is out of range, which…
- The decimal column type decimal( , ) is out of range, which…
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/8c08cd96af0c369b.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-maxcompute/src/main/java/org/apache/seatunnel/connectors/seatunnel/maxcompute/datatype/MaxComputeTypeConverter.java:307
if (typeDefine.getLength() == null || typeDefine.getLength() <= 0) {
builder.columnLength(MAX_VARBINARY_LENGTH);
} else {
builder.columnLength(typeDefine.getLength());
}
builder.dataType(PrimitiveByteArrayType.INSTANCE);
break;
case DATE:
builder.dataType(LocalTimeType.LOCAL_DATE_TYPE);
break;
case DATETIME:
case TIMESTAMP:
case TIMESTAMP_NTZ:
builder.dataType(LocalTimeType.LOCAL_DATE_TIME_TYPE);
builder.scale(typeDefine.getScale());
break;
case INTERVAL:
default:
throw CommonError.convertToSeaTunnelTypeError(
MaxcomputeBaseOptions.PLUGIN_NAME, dataType, typeDefine.getName());
}
}
return builder.build();
}
@Override
public BasicTypeDefine<TypeInfo> reconvert(Column column) {
BasicTypeDefine.BasicTypeDefineBuilder<TypeInfo> builder =
BasicTypeDefine.<TypeInfo>builder()
.name(column.getName())
.nullable(column.isNullable())
.comment(column.getComment())
.defaultValue(column.getDefaultValue());
switch (column.getDataType().getSqlType()) {
case NULL:
builder.nativeType(TypeInfoFactory.getPrimitiveTypeInfo(OdpsType.STRING));View on GitHub (pinned to cf67b549a7)