apache/seatunnel · error · SeaTunnelRuntimeException
COMMON-17
COMMON-17
Error message
'<identifier>' unsupported convert type '<dataType>' of '<field>' to SeaTunnel data type.
What it means
DorisTypeConverterV2.convertArray failed to map an ARRAY column's inner element type to a SeaTunnel array type. After handling known inner types (INT variants, DATE/DATETIMEV2, LARGEINT), any unrecognized inner type throws this error.
Solutions
- Change the Doris column so the array element is a supported type (INT/BIGINT/DATE/DATETIMEV2/LARGEINT)
- Cast the array column to ARRAY<STRING> in a view and read that
- Upgrade SeaTunnel Doris connector for broader array inner-type support
Example fix
-- before ARRAY<DECIMALV3(10,2)> -- after ARRAY<STRING>
Defensive patterns
Strategy: validation
Validate before calling
String inner = columnType.replaceAll("(?i)^array<|>$", ""); Set<String> ok = Set.of("INT","BIGINT","DATE","DATETIMEV2","LARGEINT"); if (!ok.contains(inner.toUpperCase().split("\\(")[0])) throw new IllegalStateException("unsupported Doris array inner type: " + inner); Prevention
- Restrict Doris ARRAY inner types to those the connector supports
- Use views casting unsupported arrays to ARRAY<STRING>
- Keep connector updated for newer array element types
When it happens
Trigger: convertArray (called from convert) parses a Doris ARRAY<...> column whose extracted inner type is unsupported (e.g. ARRAY<DECIMALV3(..)> or ARRAY<JSON>) when reading Doris schema.
Common situations: Reading Doris tables with ARRAY<DECIMAL>, ARRAY<JSON>, or other newer inner types; Doris version drift between what the connector supports and the cluster's schema.
Related errors
- COMMON-17
- COMMON-19
- Invalid DECIMAL definition
- The column with type ARRAY will be converted to VECTOR in…
- 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/f8a81e60cd6c724d.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/datatype/DorisTypeConverterV2.java:175
|| columnInterType.equalsIgnoreCase(DORIS_STRING)) {
builder.dataType(ArrayType.STRING_ARRAY_TYPE);
} else if (columnInterType.toUpperCase(Locale.ROOT).startsWith(DORIS_ARRAY_DECIMAL_PRE)) {
int[] precisionAndScale = getPrecisionAndScale(columnInterType);
DecimalArrayType decimalArray =
new DecimalArrayType(
new DecimalType(precisionAndScale[0], precisionAndScale[1]));
builder.dataType(decimalArray);
} else if (columnInterType.equalsIgnoreCase(DORIS_ARRAY_DATE_INTER)
|| columnInterType.equalsIgnoreCase(DORIS_ARRAY_DATEV2_INTER)) {
builder.dataType(ArrayType.LOCAL_DATE_ARRAY_TYPE);
} else if (columnInterType.equalsIgnoreCase(DORIS_ARRAY_DATETIME_INTER)
|| columnInterType.equalsIgnoreCase(DORIS_ARRAY_DATETIMEV2_INTER)) {
builder.dataType(ArrayType.LOCAL_DATE_TIME_ARRAY_TYPE);
} else if (columnInterType.equalsIgnoreCase(DORIS_LARGEINT)) {
DecimalArrayType decimalArray = new DecimalArrayType(new DecimalType(20, 0));
builder.dataType(decimalArray);
} else {
throw CommonError.convertToSeaTunnelTypeError(IDENTIFIER, columnType, name);
}
}
private static String extractArrayType(String input) {
Pattern pattern = Pattern.compile("<(.*?)>");
Matcher matcher = pattern.matcher(input);
return matcher.find() ? matcher.group(1) : "";
}
private static String[] extractMapKeyValueType(String input) {
String[] result = new String[2];
input = input.replaceAll("map<", "").replaceAll("MAP<", "").replaceAll(">", "");
String[] split = input.split(",");
if (split.length == 4) {
// decimal(10,2),decimal(10,2)
result[0] = split[0] + "," + split[1];
result[1] = split[2] + "," + split[3];View on GitHub (pinned to cf67b549a7)