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
- Apply month() only to DATE/TIMESTAMP partition columns
- 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.