apache/seatunnel · warning

{} will probably cause value overflow.

Error message

{} will probably cause value overflow.

What it means

VerticaTypeMapper.mapping converts VERTICA_DECIMAL columns to SeaTunnel DecimalType. Vertica allows DECIMAL precision above 38, but SeaTunnel's DecimalType is capped at 38, so when precision > 38 the mapper logs this warning and coerces to DECIMAL(38,18). Values with more than 38 significant digits may overflow or lose scale.

Source

Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/vertica/VerticaTypeMapper.java:119

            case VERTICA_TINYINT:
            case VERTICA_TINYINT_UNSIGNED:
            case VERTICA_SMALLINT:
            case VERTICA_SMALLINT_UNSIGNED:
            case VERTICA_MEDIUMINT:
            case VERTICA_MEDIUMINT_UNSIGNED:
            case VERTICA_INT:
            case VERTICA_INTEGER:
            case VERTICA_YEAR:
                return BasicType.INT_TYPE;
            case VERTICA_INT_UNSIGNED:
            case VERTICA_INTEGER_UNSIGNED:
            case VERTICA_BIGINT:
                return BasicType.LONG_TYPE;
            case VERTICA_BIGINT_UNSIGNED:
                return new DecimalType(20, 0);
            case VERTICA_DECIMAL:
                if (precision > 38) {
                    LOG.warn("{} will probably cause value overflow.", VERTICA_DECIMAL);
                    return new DecimalType(38, 18);
                }
                return new DecimalType(precision, scale);
            case VERTICA_DECIMAL_UNSIGNED:
                return new DecimalType(precision + 1, scale);
            case VERTICA_FLOAT:
                return BasicType.FLOAT_TYPE;
            case VERTICA_FLOAT_UNSIGNED:
                LOG.warn("{} will probably cause value overflow.", VERTICA_FLOAT_UNSIGNED);
                return BasicType.FLOAT_TYPE;
            case VERTICA_DOUBLE:
                return BasicType.DOUBLE_TYPE;
            case VERTICA_DOUBLE_UNSIGNED:
                LOG.warn("{} will probably cause value overflow.", VERTICA_DOUBLE_UNSIGNED);
                return BasicType.DOUBLE_TYPE;
            case VERTICA_CHAR:
            case VERTICA_TINYTEXT:
            case VERTICA_MEDIUMTEXT:

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Alter the Vertica column to DECIMAL(38,s) or lower precision so it maps losslessly
  2. Accept DECIMAL(38,18) and validate that your data fits (integer digits <= 20)
  3. Pre-read the column as VARCHAR and convert manually if full precision is required

Example fix

// before: Vertica column DECIMAL(45,5) -> warning, coerced to DECIMAL(38,18)
// after: alter Vertica column to fit
ALTER TABLE t ALTER COLUMN d SET DATA TYPE DECIMAL(38,5);
Defensive patterns

Strategy: validation

Validate before calling

// Check Vertica decimal precision before running the pipeline:
SELECT column_name, numeric_precision, numeric_scale
FROM v_catalog.columns
WHERE table_name = 't' AND data_type LIKE 'DECIMAL%'
  AND numeric_precision > 38;

Prevention

When it happens

Trigger: Catalog-based (schema evolution) reads where a Vertica table column is DECIMAL/NUMERIC with precision > 38 (e.g. DECIMAL(40,10)); the mapper runs during type conversion from Vertica metadata.

Common situations: Vertica tables created with very large precision decimals (Vertica permits up to 1024); migrating Vertica data to engines capped at 38-digit decimals.

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/b654363f7e1ba8eb. Report an issue: GitHub.