apache/seatunnel · error · TDengineConnectorException

UNSUPPORTED_DATA_TYPE

UNSUPPORTED_DATA_TYPE

Error message

Doesn't support TDENGINE type '%s' yet.

What it means

TDengineTypeMapper.mapping() throws when converting a TDengine column type that SeaTunnel does not yet support — specifically TDENGINE_GEOMETRY, TDENGINE_UNKNOWN, or any unrecognized type string. It fails fast instead of silently losing data.

Source

Thrown at seatunnel-connectors-v2/connector-tdengine/src/main/java/org/apache/seatunnel/connectors/seatunnel/tdengine/typemapper/TDengineTypeMapper.java:150

            case TDENGINE_TIME:
                return LocalTimeType.LOCAL_TIME_TYPE;
            case TDENGINE_DATETIME:
            case TDENGINE_TIMESTAMP:
                return LocalTimeType.LOCAL_DATE_TIME_TYPE;

            case TDENGINE_TINYBLOB:
            case TDENGINE_MEDIUMBLOB:
            case TDENGINE_BLOB:
            case TDENGINE_LONGBLOB:
            case TDENGINE_VARBINARY:
            case TDENGINE_BINARY:
                return PrimitiveByteArrayType.INSTANCE;

                // Doesn't support yet
            case TDENGINE_GEOMETRY:
            case TDENGINE_UNKNOWN:
            default:
                throw new TDengineConnectorException(
                        CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,
                        String.format("Doesn't support TDENGINE type '%s' yet.", tdengineType));
        }
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Exclude GEOMETRY/unsupported columns from the query (select only supported columns).
  2. Convert the GEOMETRY column to a supported type in TDengine (e.g. store WKT as BINARY/VARCHAR) and read that instead.
  3. Upgrade SeaTunnel to a version whose TDengineTypeMapper supports the type, if available.
  4. Check the tdengineType value in the message to confirm which type is unhandled before changing schema.

Example fix

// before
query = "SELECT id, location FROM sensors"; // location is GEOMETRY
// after
query = "SELECT id, CAST(location AS BINARY) AS location FROM sensors"; // or drop the column
Defensive patterns

Strategy: validation

Validate before calling

// Check column types up front
try (ResultSet rs = stmt.executeQuery("DESCRIBE " + table)) {
    while (rs.next()) {
        String type = rs.getString("type");
        if (type.contains("GEOMETRY")) throw new IllegalStateException("Unsupported column: " + rs.getString("field"));
    }
}

Type guard

boolean isSupportedTdengineType(String t) {
    String u = t == null ? "" : t.toUpperCase();
    return u.contains("BOOL") || u.contains("TINYINT") || u.contains("SMALLINT") || u.contains("INT")
        || u.contains("BIGINT") || u.contains("FLOAT") || u.contains("DOUBLE")
        || u.contains("TIMESTAMP") || u.contains("BINARY") || u.contains("NCHAR") || u.contains("VARCHAR");
}

Try / catch

try {
    catalog.getTable(tablePath);
} catch (UnsupportedOperationException | IllegalArgumentException e) {
    log.error("Table has unsupported TDengine types; exclude or cast them", e);
}

Prevention

When it happens

Trigger: Reading (schema conversion for) a table containing a GEOMETRY column, an unknown type returned by the driver, or a type added in a newer TDengine version that the mapper has no case for.

Common situations: Querying TDengine 3.x tables with GEOMETRY columns; upgrading TDengine introduces a new data type the connector doesn't map; typo'd/unsupported type strings in metadata.

Related errors


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