apache/seatunnel · warning

The timestamp column

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

When converting a TIMESTAMP (no time zone) column for Snowflake, its scale exceeds 9, the maximum Snowflake supports. SeaTunnel logs this warning and maps the column to TIMESTAMP_NTZ at scale 9, truncating any finer fractional-second precision.

Solutions

  1. Cap the source timestamp scale at 9.
  2. Pre-create the Snowflake table with TIMESTAMP_NTZ(9) and round values in the pipeline.
  3. Accept the warning if nanosecond precision suffices.
  4. Use STRING mapping if the extra digits must be preserved verbatim.

Example fix

// before
new Column with sqlType=TIMESTAMP, scale=12
// after
new Column with sqlType=TIMESTAMP, scale=9
Defensive patterns

Strategy: validation

Validate before calling

if (column.getScale() != null && column.getScale() > 9) {
    log.warn("TIMESTAMP column {} scale {} will be truncated to 9 for Snowflake",
        column.getName(), column.getScale());
}

Type guard

boolean fitsSnowflakeTimestampScale(Column c) {
    return c.getScale() == null || c.getScale() <= 9;
}

Prevention

When it happens

Trigger: reconvert() handles a Column with sqlType TIMESTAMP and column.getScale() > 9, e.g. timestamp(12) from a source that allows more than nanosecond precision.

Common situations: Syncing from engines with picosecond/nanosecond+ timestamps or schema definitions that over-declare scale into Snowflake targets.

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


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

Appendix: source

Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/snowflake/SnowflakeTypeConverter.java:327

                builder.dataType(SNOWFLAKE_GEOMETRY);
                break;
            case TIME:
                if (column.getScale() != null && column.getScale() > 9) {
                    log.warn(
                            "The timestamp column {} type time({}) is out of range, "
                                    + "which exceeds the maximum scale of {}, "
                                    + "it will be converted to time({})",
                            column.getName(),
                            column.getScale(),
                            9,
                            9);
                }
                builder.columnType(SNOWFLAKE_TIME);
                builder.dataType(SNOWFLAKE_TIME);
                break;
            case TIMESTAMP:
                if (column.getScale() != null && column.getScale() > 9) {
                    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(),
                            9,
                            9);
                }
                builder.columnType(SNOWFLAKE_TIMESTAMP_NTZ);
                builder.dataType(SNOWFLAKE_TIMESTAMP_NTZ);
                break;
            case TIMESTAMP_TZ:
                if (column.getScale() != null && column.getScale() > 9) {
                    log.warn(
                            "The timestamp_tz column {} type timestamp_tz({}) is out of range, "
                                    + "which exceeds the maximum scale of {}, "
                                    + "it will be converted to timestamp_tz({})",
                            column.getName(),

View on GitHub (pinned to cf67b549a7)