CubeJS Docker Compose环境预聚合上传报错:文件或目录不存在
问题
通过Docker Compose默认配置搭建CubeJS环境,使用预聚合功能时所有预聚合均报错,示例报错:
Error: Error during upload of dev_pre_aggregations.publishers_users_rollup_2yhuuedy_kidftr4f_1ht5m0r-0.csv.gz create table: CREATE TABLE dev_pre_aggregations.
: Internal: No such file or directory (os error 2
Cube定义代码如下:
cube(`Users`, { sql: `SELECT * FROM users`, preAggregations: { users_rollup: { type: 'rollup', dimensions: [CUBE.id, CUBE.email] } }, joins: { }, measures: { count: { type: `count`, } }, dimensions: { id: { sql: `id`, type: `number`, primaryKey: true }, email: { sql: `email`, type: `string` } }, dataSource: `default` }); cube(`Publishers`, { extends: Users, sql: `SELECT * FROM ${Users.sql}`, }); cube(`Statistics`, { sql: `SELECT * FROM impressions`, preAggregations: { statistics_by_publisher_rollup: { type: 'rollup', measures: [CUBE.impressions], dimensions: [CUBE.publisherId], timeDimension: CUBE.date, granularity: `day` }, statistics_with_publishers_rollup: { type: `rollupJoin`, measures: [CUBE.impressions], dimensions: [CUBE.publisherId, Publishers.email], rollups: [Publishers.users_rollup, CUBE.statistics_by_publisher_rollup] } }, joins: { Publishers: { relationship: `belongsTo`, sql: `${CUBE.advertiserId} = ${Publishers.id}` } }, measures: { impressions: { sql: `impressions`, type: `sum`, } }, dimensions: { date: { sql: `date`, type: `time` }, publisherId: { sql: `publisher_id`, type: `number`, primaryKey: true }, }, dataSource: `statistics` });
当前.cubestore/data目录下仅存在temp-uploads文件夹,无其他预聚合相关内容。
解决方案
1. 修复CubeStore目录权限
Docker挂载的本地目录可能存在权限不足,导致CubeStore无法创建预聚合相关文件:
- 停止所有容器:
docker-compose down - 修改本地
.cubestore/data目录权限,匹配容器内运行用户(通常为1000:1000):chown -R 1000:1000 .cubestore/data - 重启容器:
docker-compose up -d
2. 重新初始化CubeStore
若CubeStore初始化不完整,会导致无法创建预聚合表:
- 停止容器后,清空
.cubestore/data目录下所有内容 - 重启容器,让CubeStore重新完成初始化
- 查看CubeStore日志确认初始化状态:
docker-compose logs cubestore
3. 修正Cube定义中的错误
- Publishers Cube冗余配置:继承
Users后无需重复定义sql,移除该配置避免冲突:cube(`Publishers`, { extends: Users, }); - Statistics Cube关联错误:关联条件中使用了不存在的
advertiserId,修正为正确的publisherId:joins: { Publishers: { relationship: `belongsTo`, sql: `${CUBE.publisherId} = ${Publishers.id}` } }
4. 手动触发预聚合构建
修改完成后,手动触发预聚合验证修复效果:
- 通过CubeJS Playground执行依赖预聚合的查询
- 或使用CLI命令构建:
npx cubejs-cli pre-aggregations build - 检查
.cubestore/data目录是否生成新内容,同时查看容器日志确认无报错
内容的提问来源于stack exchange,提问作者Ewan Walker
相关产品推荐
相关产品推荐

