apache/seatunnel · error · IotdbConnectorException

UNSUPPORTED_DATA_TYPE

UNSUPPORTED_DATA_TYPE

Error message

Unsupported data type: 

What it means

Thrown by convert() in IoTDBv2SourceSinkWriter when mapping a SeaTunnel data type to a TSDataType for IoTDB and the type falls to the default branch. The writer cannot represent the SeaTunnel column type as an IoTDB type. This happens at type-conversion time when preparing the tablet field types, before any write.

Source

Thrown at seatunnel-connectors-v2/connector-iotdb-v2/src/main/java/org/apache/seatunnel/connectors/seatunnel/iotdbv2/sink/relational/IoTDBv2RelationalSinkWriter.java:164

                return TSDataType.BOOLEAN;
            case TINYINT:
            case SMALLINT:
            case INT:
                return TSDataType.INT32;
            case BIGINT:
                return TSDataType.INT64;
            case FLOAT:
                return TSDataType.FLOAT;
            case DOUBLE:
                return TSDataType.DOUBLE;
            case STRING:
                return TSDataType.STRING;
            case TIMESTAMP:
                return TSDataType.TIMESTAMP;
            case DATE:
                return TSDataType.DATE;
            default:
                throw new IotdbConnectorException(
                        CommonErrorCode.UNSUPPORTED_DATA_TYPE,
                        "Unsupported data type: " + dataType);
        }
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Cast/convert the unsupported column to a supported scalar (STRING/INT64/DOUBLE etc.) via a transform before the sink
  2. Drop the offending column from the sink schema
  3. Check IoTDB-v2 sink docs for the supported type mapping table
  4. Upgrade SeaTunnel in case newer versions map additional types

Example fix

// before
// schema: id INT64, payload MAP<STRING,STRING>
// after
// transform to stringify payload, schema: id INT64, payload STRING
Defensive patterns

Strategy: validation

Validate before calling

Set<String> mappable = Set.of("STRING","BOOLEAN","INT32","INT64","FLOAT","DOUBLE","TIMESTAMP","DATE");
rowType.getFieldTypes().stream()
    .map(t -> t.getSqlType().name())
    .filter(n -> !mappable.contains(n))
    .forEach(n -> { throw new IllegalArgumentException("Cannot map " + n + " to TSDataType"); });

Try / catch

try {
    TSDataType tsType = writer.convert(dataType);
} catch (IotdbConnectorException e) {
    if (CommonErrorCode.UNSUPPORTED_DATA_TYPE.equals(e.getSeaTunnelErrorCode())) {
        // fallback: stringify the column or skip it
    }
}

Prevention

When it happens

Trigger: A SeaTunnel row type column (e.g. MAP, ARRAY, ROW, BYTES, or a newly added type) reaches convert() and no case matches, throwing with 'Unsupported data type: <type>'.

Common situations: Upstream source emits complex/nested types; table schema includes an exotic type not in IoTDB's supported set; SeaTunnel version upgrade introduced new types not yet mapped in this sink.

Related errors


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