prestodb/presto · error · UnsupportedOperationException

Unsupported type for 'day':

Error message

Unsupported type for 'day': 

What it means

PartitionTransforms.getColumnTransform implements the day transform only for DATE and TIMESTAMP types; an unsupported type reaching the day branch raises this NOT_SUPPORTED error for the mismatched partition field.

Source

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

                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));
                }
                if (type.equals(TIMESTAMP_WITH_TIME_ZONE)) {
                    LongUnaryOperator transformDay = value -> epochDay(unpackMillisUtc(value));
                    return new ColumnTransform(transform, INTEGER,
                            block -> transformBlock(TIMESTAMP_WITH_TIME_ZONE, block, transformDay),
                            ValueTransform.from(TIMESTAMP_WITH_TIME_ZONE, transformDay));
                }
                throw new UnsupportedOperationException("Unsupported type for 'day': " + field);
            case "hour":
                if (type.equals(TIMESTAMP)) {
                    LongUnaryOperator transformHour = value -> epochHour(value);
                    return new ColumnTransform(transform, INTEGER,
                            block -> transformBlock(TIMESTAMP, block, transformHour),
                            ValueTransform.from(TIMESTAMP, transformHour));
                }
                if (type.equals(TIMESTAMP_MICROSECONDS)) {
                    LongUnaryOperator transformHour = value -> epochHour(Math.floorDiv(value, 1000));
                    return new ColumnTransform(transform, INTEGER,
                            block -> transformBlock(TIMESTAMP_MICROSECONDS, block, transformHour),
                            ValueTransform.from(TIMESTAMP_MICROSECONDS, transformHour));
                }
                if (type.equals(TIMESTAMP_WITH_TIME_ZONE)) {
                    LongUnaryOperator transformHour = value -> epochHour(unpackMillisUtc(value));
                    return new ColumnTransform(transform, INTEGER,
                            block -> transformBlock(TIMESTAMP_WITH_TIME_ZONE, block, transformHour),
                            ValueTransform.from(TIMESTAMP_WITH_TIME_ZONE, transformHour));

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Use day() only on DATE/TIMESTAMP partition columns
  2. Fix the partition spec to match a transform supported by the column type
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-iceberg/src/main/java/com/facebook/presto/iceberg/PartitionTransforms.java:159 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/9c5530d1a12c2b96. Report an issue: GitHub.