apache/seatunnel · error · SeaTunnelRuntimeException

COMMON-19

COMMON-19

Error message

'${identifier}' unsupported convert SeaTunnel data type '${dataType}' of '${field}' to connector data type.

What it means

Thrown by OracleTypeConverter.reconvert() when a SeaTunnel data type cannot be mapped back to an Oracle column type for sink writes or table creation. The switch covers TIMESTAMP WITH [LOCAL] TIME ZONE variants and others; the default branch fires for unsupported SeaTunnel SqlTypes. It fails during sink schema preparation.

Source

Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleTypeConverter.java:453

                    if (timestampTzScale > MAX_TIMESTAMP_SCALE) {
                        log.warn(
                                "The timestamp_tz column {} type timestamp({}) is out of range, "
                                        + "which exceeds the maximum scale of {}, "
                                        + "it will be converted to timestamp({})",
                                column.getName(),
                                timestampTzScale,
                                MAX_TIMESTAMP_SCALE,
                                MAX_TIMESTAMP_SCALE);
                        timestampTzScale = MAX_TIMESTAMP_SCALE;
                    }
                    builder.columnType(
                            String.format("TIMESTAMP(%s) WITH LOCAL TIME ZONE", timestampTzScale));
                    builder.scale(timestampTzScale);
                }
                builder.dataType(ORACLE_TIMESTAMP_WITH_LOCAL_TIME_ZONE);
                break;
            default:
                throw CommonError.convertToConnectorTypeError(
                        DatabaseIdentifier.ORACLE,
                        column.getDataType().getSqlType().name(),
                        column.getName());
        }
        return builder.build();
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Identify the unsupported SeaTunnel SqlType from '<dataType>' in the message.
  2. Pre-create the Oracle table and disable sink auto-create so reconvert DDL mapping is bypassed.
  3. Add a cast Transform to convert unsupported columns to supported types (STRING, NUMBER, TIMESTAMP) before the sink.
  4. Extend OracleTypeConverter.reconvert() with the missing mapping and contribute it upstream.

Example fix

// before
ARRAY column -> Oracle sink auto-create: error
// after
transform: Sql { sql = "SELECT id, to_json(tags) AS tags FROM source" }
Defensive patterns

Strategy: validation

Validate before calling

// Validate the sink schema maps to Oracle types before table creation
for (Column col : sinkSchema.getColumns()) {
    try { new OracleTypeConverter().reconvert(col); }
    catch (SeaTunnelRuntimeException e) {
        throw new IllegalStateException("Oracle sink cannot map column " + col.getName() + " of " + col.getDataType());
    }
}

Type guard

boolean isOracleSinkColumnValid(Column col) {
    try { new OracleTypeConverter().reconvert(col); return true; }
    catch (SeaTunnelRuntimeException e) { return false; }
}

Try / catch

try {
    converter.reconvert(column);
} catch (SeaTunnelRuntimeException e) {
    if (e.getMessage().contains("unsupported convert SeaTunnel data type")) {
        throw new IllegalArgumentException("Cast column " + column.getName() + " to a scalar type before the Oracle sink");
    }
    throw e;
}

Prevention

When it happens

Trigger: reconvert(Column) on OracleTypeConverter where column.getDataType().getSqlType() falls to the default branch at OracleTypeConverter.java:453 — e.g. MAP/ARRAY/VECTOR types or SeaTunnel types without an Oracle mapping in this dialect.

Common situations: Auto-creating an Oracle sink table from sources with complex types (nested documents, arrays, vectors); cross-database pipelines whose SeaTunnel types (e.g. from MySQL TIMESTAMP or PostgreSQL arrays) lack Oracle equivalents in the converter.

Related errors


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