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
- Identify the unsupported SeaTunnel SqlType from '<dataType>' in the message.
- Pre-create the Oracle table and disable sink auto-create so reconvert DDL mapping is bypassed.
- Add a cast Transform to convert unsupported columns to supported types (STRING, NUMBER, TIMESTAMP) before the sink.
- 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
- Pre-create the Oracle table with explicit DDL and disable auto-create.
- Flatten arrays/maps/nested structures to scalar or STRING columns upstream.
- Check timezone-aware timestamp mappings (TIME ZONE variants) in the schema design.
- Run a schema conversion dry-run before production pipelines.
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.