cube-js / cube-js/cube

Pre-aggregation partitions not correctly building after daylight saving change

Open
#10,096 0 comments 1 reaction 1 assignee Claimed by @KSDaemon View on GitHub
Dominant language
Rust
Stars
20.8k
Forks
2.1k
Avg merge
1d 2h
Merged PRs (30d)
181

Description

**Describe the bug**
Since the Daylight Saving Time (DST) change on October 26, 2025 (in `Europe/Zurich` clocks go back 1 hour), queries against a pre-aggregated table are failing with the following error:

```
No pre-aggregation partitions were built yet for the pre-aggregation serving this query and this API instance wasn't set up to build pre-aggregations. Please make sure your refresh worker is configured correctly, running, pre-aggregation tables are built and all pre-aggregation refresh settings like timezone match. Expected table name patterns: prod_pre_aggregations.statistics_day_*_2ba3g30q_*
```

This issue does not occur outside of DST transitions. Restarting the Cube.js container and manually triggering a pre-aggreations rebuild via POST `/v1/pre-aggregations/jobs` resolves the problem.

**To Reproduce**
1. Set up a Cube.js instance with a pre-aggregation like the one below
2. Simulate or wait for a DST transition (e.g., end of DST where clocks go back 1 hour).
3. Query the pre-aggregated measure after the transition

**Expected behavior**
There should be no errors after DST transitions. With this configuration, pre-aggregations should refresh automatically:
```
refreshKey: {
every: '1 hour'
}
```

**Minimally reproducible Cube Schema**

```javascript
cube('statistics', {
sql: 'SELECT * FROM statistics',

refreshKey: {
every: '1 hour'
},

joins: {},

measures: {
count: {
type: 'count',
drillMembers: [organizationid]
}
},

dimensions: {
organizationid: {
sql: `${CUBE}.\`organizationId\``,
type: 'string'
}
},

preAggregations: {
day: {
dimensionReferences: [statistics.key, statistics.organizationid],
granularity: `day`,
measureReferences: [count],
scheduledRefresh: true,
timeDimensionReference: createdat,
type: `rollup`
}
}
});
```

```
cube:
depends_on:
cubestore:
condition: service_started
environment:
- CUBEJS_API_SECRET=
- CUBEJS_CUBESTORE_HOST=cubestore
- CUBEJS_DB_TYPE=mysql
- CUBEJS_SCHEDULED_REFRESH_TIMEZONES=Europe/Zurich
image: cubejs/cube:${CUBEJS_VERSION}
volumes:
- cube-configuration:/cube/conf

cube-refresh-worker:
depends_on:
cubestore:
condition: service_started
environment:
- CUBEJS_API_SECRET=
- CUBEJS_CUBESTORE_HOST=cubestore
- CUBEJS_DB_TYPE=mysql
- CUBEJS_REFRESH_WORKER=true
- CUBEJS_SCHEDULED_REFRESH_TIMEZONES=Europe/Zurich
image: cubejs/cube:${CUBEJS_VERSION}
volumes:
- cube-configuration:/cube/conf

cubestore:
environment:
- CUBESTORE_REMOTE_DIR=/cube/data
image: cubejs/cubestore:${CUBEJS_VERSION}
volumes:
- cubestore-volume:/cube/data
```

**Version:**
1.0.7

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.