You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Cube.js预聚合每12小时或指定UTC时间(凌晨4点)刷新?

Cube.js预聚合固定间隔/特定时间自动刷新配置方案

一、配置固定间隔或特定时间刷新

Cube.js的预聚合刷新可通过refreshKey的schedule字段(基于标准Cron表达式)实现固定时间点或间隔的自动刷新,替代原有的every相对时间配置。以下是修改后的Orders Cube代码:

cube('Orders', {
  sql: `SELECT id, user_id, total_price, added_at FROM public.orders`,

  preAggregations: {
    OrdersSummary: {
      dimensions: [Orders.id, Orders.userId, Orders.totalPrice],
      // UTC时间每12小时刷新一次(0分触发)
      refreshKey: {
        schedule: '0 */12 * * *'
      }
    },
    OrdersDetails: {
      dimensions: [Orders.id, Orders.userId, Orders.addedAt],
      // UTC时间每天凌晨4点固定刷新
      refreshKey: {
        schedule: '0 4 * * *'
      }
    }
  },

  dimensions: {
    id: {
      sql: `id`,
      type: `number`,
      primaryKey: true
    },
    userId: {
      sql: `user_id`,
      type: `number`
    },
    totalPrice: {
      sql: `total_price`,
      type: `number`
    },
    addedAt: {
      sql: `added_at`,
      type: `time`
    }
  }
});

Cron表达式说明:

  • 0 */12 * * *:每12小时的0分执行一次,实现固定12小时间隔刷新
  • 0 4 * * *:每天UTC时间4点0分执行一次,满足特定时间点刷新需求

二、解决刷新行为不一致问题

测试时出现刷新不按时触发的情况,通常是以下原因导致:

  1. 默认按需刷新机制:Cube.js默认只有当有查询请求触发预聚合时,才会检查是否需要刷新。无查询请求时,不会主动执行刷新。
  2. 未开启调度器:要实现主动定时刷新,需在Cube.js配置文件(cube.js)中开启调度器:
module.exports = {
  scheduler: true,
  scheduledRefreshTimer: 60, // 每隔60秒检查一次刷新任务,可按需调整
};
  1. 服务运行状态:确保Cube.js服务持续运行,调度器才能正常轮询并执行刷新任务。

验证刷新是否生效的方式:查看Cube.js服务日志,搜索Pre-aggregation refresh相关日志条目,确认刷新任务的触发时间和执行结果。

三、重要注意事项

  • Cron表达式基于UTC时间,若需适配本地时区,需自行计算时区偏移后调整表达式。
  • every字段是基于上次刷新时间的相对间隔,而schedule是绝对时间点,更适合固定间隔或特定时间的刷新需求。
  • 预聚合刷新会消耗数据库资源,建议选择业务低峰期执行。

内容的提问来源于stack exchange,提问作者Abdellah-ELAAROUB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:15:59