apache/seatunnel · warning
The timestamp column {} type timestamp({}) is out of range,
Error message
The timestamp column {} type timestamp({}) is out of range, which exceeds the maximum scale of {}, it will be converted to timestamp({}) What it means
A log warning in DmdbTypeConverter.reconvert for TIMESTAMP columns: the fractional-second scale exceeds MAX_TIMESTAMP_SCALE, so the converter clamps it to the maximum and builds a DM TIMESTAMP with reduced sub-second precision.
Source
Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/dm/DmdbTypeConverter.java:481
+ "it will be converted to time({})",
column.getName(),
column.getScale(),
MAX_SCALE,
timeScale);
}
builder.columnType(String.format("%s(%s)", DM_TIME, timeScale));
builder.scale(timeScale);
} else {
builder.columnType(DM_TIME);
}
break;
case TIMESTAMP:
builder.dataType(DM_TIMESTAMP);
if (column.getScale() != null && column.getScale() > 0) {
Integer timestampScale = column.getScale();
if (timestampScale > MAX_TIMESTAMP_SCALE) {
timestampScale = MAX_TIMESTAMP_SCALE;
log.warn(
"The timestamp column {} type timestamp({}) is out of range, "
+ "which exceeds the maximum scale of {}, "
+ "it will be converted to timestamp({})",
column.getName(),
column.getScale(),
MAX_TIMESTAMP_SCALE,
timestampScale);
}
builder.columnType(String.format("%s(%s)", DM_TIMESTAMP, timestampScale));
builder.scale(timestampScale);
} else {
builder.columnType(DM_TIMESTAMP);
}
break;
case TIMESTAMP_TZ:
builder.dataType(DM_DATETIME_WITH_TIME_ZONE);
if (column.getScale() != null && column.getScale() > 0) {
Integer timestampTzScale = column.getScale();View on GitHub (pinned to cf67b549a7)
Solutions
- Set the source timestamp scale within Dameng's MAX_TIMESTAMP_SCALE
- Accept the clamped timestamp(x) precision
- Pre-create the DM column type manually and skip auto conversion
- Truncate fractional seconds in a transform before writing
Example fix
// before TIMESTAMP(9) // after TIMESTAMP(6) -- clamped to MAX_TIMESTAMP_SCALE
Defensive patterns
Strategy: validation
Validate before calling
if (column.getScale() != null && column.getScale() > MAX_TIMESTAMP_SCALE) {
// truncate to supported scale before sync
} Prevention
- Use microsecond (6) or millisecond (3) precision timestamps when targeting Dameng
- Compare source and target timestamp precision after initial sync
When it happens
Trigger: reconvert() on a TimestampType column with scale != null && scale > MAX_TIMESTAMP_SCALE (e.g. TIMESTAMP(9) from nanosecond-precision sources).
Common situations: Replicating MySQL/Postgres TIMESTAMP(6) or higher into Dameng; losing nanosecond/microsecond precision in the target schema.
Understand the failure class
Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.
Related errors
- The timestamp_tz column {} type datetime_tz({}) is out of ra
- The timestamp column {} type timestamp({}) is out of range,
- The time column {} type time({}) is out of range, which exce
- The timestamp column {} type timestamp({}) is out of range,
- The timestamp column {} type timestamp({}) is out of range,
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/f47a623e22bac98a.
Report an issue: GitHub.