prestodb/presto · error · UnsupportedOperationException
Unsupported type for 'year':
Error message
Unsupported type for 'year':
What it means
PartitionTransforms.getColumnTransform implements the Iceberg year transform only for DATE, TIMESTAMP (and microsecond variants); any other type reaching the year case falls through to this NOT_SUPPORTED error, meaning a partition spec applies year() to an incompatible column type.
Source
Thrown at presto-iceberg/src/main/java/com/facebook/presto/iceberg/PartitionTransforms.java:107
if (type.equals(TIMESTAMP)) {
LongUnaryOperator transformYear = value -> epochYear(value);
return new ColumnTransform(transform, INTEGER,
block -> transformBlock(TIMESTAMP, block, transformYear),
ValueTransform.from(TIMESTAMP, transformYear));
}
if (type.equals(TIMESTAMP_MICROSECONDS)) {
LongUnaryOperator transformYear = value -> epochYear(Math.floorDiv(value, 1000));
return new ColumnTransform(transform, INTEGER,
block -> transformBlock(TIMESTAMP_MICROSECONDS, block, transformYear),
ValueTransform.from(TIMESTAMP_MICROSECONDS, transformYear));
}
if (type.equals(TIMESTAMP_WITH_TIME_ZONE)) {
LongUnaryOperator transformYear = value -> epochYear(unpackMillisUtc(value));
return new ColumnTransform(transform, INTEGER,
block -> transformBlock(TIMESTAMP_WITH_TIME_ZONE, block, transformYear),
ValueTransform.from(TIMESTAMP_WITH_TIME_ZONE, transformYear));
}
throw new UnsupportedOperationException("Unsupported type for 'year': " + field);
case "month":
if (type.equals(DATE)) {
LongUnaryOperator transformMonth = value -> epochMonth(DAYS.toMillis(value));
return new ColumnTransform(transform, INTEGER,
block -> transformBlock(DATE, block, transformMonth),
ValueTransform.from(DATE, transformMonth));
}
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));View on GitHub (pinned to 55bb57d202)
Solutions
- Change the partition transform so year() is only applied to date/timestamp columns
- Recreate the table's partition spec with a transform matching the column type
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at presto-iceberg/src/main/java/com/facebook/presto/iceberg/PartitionTransforms.java:107 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/249fb8748e8e054e.
Report an issue: GitHub.