Badhusha Muhammed
06/17/2026, 3:32 AMXiang Fu
Badhusha Muhammed
06/17/2026, 3:39 AMXiang Fu
TIMESTAMP as non-numeric, even though Pinot stores TIMESTAMP internally as LONG epoch millis. This was fixed later in PR #17200: https://github.com/apache/pinot/pull/17200, included from 1.5.0 onward.
Cleanest fix: upgrade/backport that PR. Then you can keep TC1 as TIMESTAMP and avoid schema changes.
If you must stay on stock 1.4.0, your workaround is generally valid, but I’d avoid changing segmentsConfig.timeColumnName. Instead:
- Keep segmentsConfig.timeColumnName = TC1
- Add a new LONG column, e.g. TC1_epoch_ms
- Add transform config: TC1_epoch_ms = TC1
- Reload/backfill all existing completed segments so the new column is materialized
- Handle consuming segments/force-commit as appropriate
- Verify TC1_epoch_ms min/max matches TC1 epoch millis
- Set upsertConfig.comparisonColumn = TC1_epoch_ms
- Re-enable metadataTTL / deletedKeysTTL
Important: do not re-enable TTL before the backfill/reload is complete. If older segments do not have the derived LONG value materialized, Pinot can see default/missing values and TTL may clean the wrong upsert metadata.
So short answer: no table recreation should be required. Best path is backport the fix; otherwise use a derived LONG comparison column and fully backfill it before enabling TTL again.Badhusha Muhammed
06/17/2026, 4:53 AMIf you must stay on stock 1.4.0, your workaround is generally valid, but I’d avoid changingset. InsteadsegmentsConfig.timeColumnName
upsertConfig.comparisonColumn = TC1_epoch_ms ..?
This is changing right ..?Xiang Fu
Badhusha Muhammed
06/17/2026, 5:29 AM