Skip to content

Pre-aggregation partitions not correctly building after daylight saving changeΒ #10096

@gizmodus

Description

@gizmodus

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

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions