prestodb/presto · error · UnsupportedOperationException

Unsupported type for 'month':

Error message

Unsupported type for 'month': 

What it means

PartitionTransforms.getColumnTransform implements the month transform only for date/timestamp types; other column types reaching the month branch trigger this NOT_SUPPORTED error, indicating an invalid transform-to-type pairing in the partition spec.

Source

Thrown at presto-iceberg/src/main/java/com/facebook/presto/iceberg/PartitionTransforms.java:133

                if (type.equals(TIMESTAMP)) {
                    LongUnaryOperator transformMonth = value -> epochMonth(value);
                    return new ColumnTransform(transform, INTEGER,
                            block -> transformBlock(TIMESTAMP, block, transformMonth),
                            ValueTransform.from(TIMESTAMP, transformMonth));
                }
                if (type.equals(TIMESTAMP_MICROSECONDS)) {
                    LongUnaryOperator transformMonth = value -> epochMonth(Math.floorDiv(value, 1000));
                    return new ColumnTransform(transform, INTEGER,
                            block -> transformBlock(TIMESTAMP_MICROSECONDS, block, transformMonth),
                            ValueTransform.from(TIMESTAMP_MICROSECONDS, transformMonth));
                }
                if (type.equals(TIMESTAMP_WITH_TIME_ZONE)) {
                    LongUnaryOperator transformMonth = value -> epochMonth(unpackMillisUtc(value));
                    return new ColumnTransform(transform, INTEGER,
                            block -> transformBlock(TIMESTAMP_WITH_TIME_ZONE, block, transformMonth),
                            ValueTransform.from(TIMESTAMP_WITH_TIME_ZONE, transformMonth));
                }
                throw new UnsupportedOperationException("Unsupported type for 'month': " + field);
            case "day":
                if (type.equals(DATE)) {
                    LongUnaryOperator transformDay = value -> epochDay(DAYS.toMillis(value));
                    return new ColumnTransform(transform, INTEGER,
                            block -> transformBlock(DATE, block, transformDay),
                            ValueTransform.from(DATE, transformDay));
                }
                if (type.equals(TIMESTAMP)) {
                    LongUnaryOperator transformDay = value -> epochDay(value);
                    return new ColumnTransform(transform, INTEGER,
                            block -> transformBlock(TIMESTAMP, block, transformDay),
                            ValueTransform.from(TIMESTAMP, transformDay));
                }
                if (type.equals(TIMESTAMP_MICROSECONDS)) {
                    LongUnaryOperator transformDay = value -> epochDay(Math.floorDiv(value, 1000));
                    return new ColumnTransform(transform, INTEGER,
                            block -> transformBlock(TIMESTAMP_MICROSECONDS, block, transformDay),
                            ValueTransform.from(TIMESTAMP_MICROSECONDS, transformDay));

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Apply month() only to DATE/TIMESTAMP partition columns
  2. Adjust the partition spec to use a transform valid for the column's type (e.g. truncate or bucket for strings)
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-iceberg/src/main/java/com/facebook/presto/iceberg/PartitionTransforms.java:133 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/b3c853167f1f1773. Report an issue: GitHub.