apache/seatunnel · error · UnsupportedOperationException

Unsupported data type: ${dataType}

Error message

Unsupported data type: ${dataType}

What it means

MilvusSourceConverter.convertColumn maps Milvus FieldSchema DataType values to SeaTunnel PhysicalColumn types. Any Milvus DataType not explicitly handled (Bool, Int8-64, Float, Double, VarChar, String, JSON, Array, and the vector types) causes a plain UnsupportedOperationException 'Unsupported data type: <dataType>'.

Source

Thrown at seatunnel-connectors-v2/connector-milvus/src/main/java/org/apache/seatunnel/connectors/seatunnel/milvus/utils/source/MilvusSourceConverter.java:351

                builder.dataType(VectorType.VECTOR_FLOAT16_TYPE);
                for (KeyValuePair keyValuePair : fieldSchema.getTypeParamsList()) {
                    if (keyValuePair.getKey().equals("dim")) {
                        builder.scale(Integer.valueOf(keyValuePair.getValue()));
                        break;
                    }
                }
                break;
            case BFloat16Vector:
                builder.dataType(VectorType.VECTOR_BFLOAT16_TYPE);
                for (KeyValuePair keyValuePair : fieldSchema.getTypeParamsList()) {
                    if (keyValuePair.getKey().equals("dim")) {
                        builder.scale(Integer.valueOf(keyValuePair.getValue()));
                        break;
                    }
                }
                break;
            default:
                throw new UnsupportedOperationException("Unsupported data type: " + dataType);
        }

        return builder.build();
    }

    private JsonObject convertDynamicField(Map<String, Object> fieldValuesMap) {
        JsonObject dynamicField = new JsonObject();
        for (Map.Entry<String, Object> entry : fieldValuesMap.entrySet()) {
            if (!existField.contains(entry.getKey())) {
                dynamicField.add(entry.getKey(), gson.toJsonTree(entry.getValue()));
            }
        }
        return dynamicField;
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Identify the reported DataType and remove/transform that field, or use only supported field types in the collection.
  2. Upgrade SeaTunnel/connector-milvus to a version mapping that DataType.
  3. As a stopgap, patch convertColumn to map the DataType to the closest SeaTunnel type (e.g. STRING).

Example fix

// before
default:
    throw new UnsupportedOperationException("Unsupported data type: " + dataType);
// after
case Geometry:
    builder.dataType(BasicType.STRING_TYPE);
    break;
default:
    throw new UnsupportedOperationException("Unsupported data type: " + dataType);
Defensive patterns

Strategy: try-catch

Validate before calling

// pre-check Milvus collection schema
for (FieldSchema f : describeResp.getFieldsList()) {
    if (!SUPPORTED_MILVUS_DATATYPES.contains(f.getDataType())) {
        throw new IllegalArgumentException("Milvus field " + f.getName() + " has unsupported type " + f.getDataType());
    }
}

Try / catch

try { column = MilvusSourceConverter.convertColumn(fieldSchema); } catch (UnsupportedOperationException e) { log.error("Milvus type not mapped: {}", e.getMessage()); throw new CatalogException(e.getMessage(), e); }

Prevention

When it happens

Trigger: Calling convertColumn (schema/table discovery paths) on a Milvus field whose DataType enum is new or unmapped, e.g. newer Milvus types added after this connector was written.

Common situations: Connecting to a newer Milvus server that exposes new data types; using a feature type (e.g. SparseFloatVector variants, function-output fields) unsupported by the connector version.

Related errors


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