diff --git a/packages/cubejs-api-gateway/src/gateway.ts b/packages/cubejs-api-gateway/src/gateway.ts index 006db77b91d3b..e6047928582d0 100644 --- a/packages/cubejs-api-gateway/src/gateway.ts +++ b/packages/cubejs-api-gateway/src/gateway.ts @@ -440,6 +440,7 @@ class ApiGateway { app.get('/cubejs-system/v1/pre-aggregations', systemMiddlewares, systemAsyncHandler(async (req, res) => { await this.getPreAggregations({ cacheOnly: !!req.query.cacheOnly, + metaOnly: !!req.query.metaOnly, context: req.context, res: this.resToResultFn(res) }); @@ -619,7 +620,7 @@ class ApiGateway { } } - public async getPreAggregations({ cacheOnly, context, res }: { cacheOnly?: boolean, context: RequestContext, res: ResponseResultFn }) { + public async getPreAggregations({ cacheOnly, metaOnly, context, res }: { cacheOnly?: boolean, metaOnly?: boolean, context: RequestContext, res: ResponseResultFn }) { const requestStarted = new Date(); try { const compilerApi = await this.getCompilerApi(context); @@ -635,6 +636,7 @@ class ApiGateway { preAggregations: preAggregations.map(p => ({ id: p.id, cacheOnly, + metaOnly })) }, ) diff --git a/packages/cubejs-api-gateway/src/query.js b/packages/cubejs-api-gateway/src/query.js index a3d323d5ca758..02ea1fa56c27b 100644 --- a/packages/cubejs-api-gateway/src/query.js +++ b/packages/cubejs-api-gateway/src/query.js @@ -290,6 +290,7 @@ const queryPreAggregationsSchema = Joi.object().keys({ preAggregations: Joi.array().items(Joi.object().keys({ id: Joi.string().required(), cacheOnly: Joi.boolean(), + metaOnly: Joi.boolean(), partitions: Joi.array().items(Joi.string()), refreshRange: Joi.array().items(Joi.string()).length(2), // TODO: Deprecate after cloud changes })) diff --git a/packages/cubejs-server-core/src/core/RefreshScheduler.ts b/packages/cubejs-server-core/src/core/RefreshScheduler.ts index c79365f7d1f54..2b7db4c5e52f8 100644 --- a/packages/cubejs-server-core/src/core/RefreshScheduler.ts +++ b/packages/cubejs-server-core/src/core/RefreshScheduler.ts @@ -33,6 +33,7 @@ type PreAggregationsQueryingOptions = { preAggregations: { id: string, cacheOnly?: boolean, + metaOnly?: boolean, partitions?: string[] }[], forceBuildPreAggregations?: boolean, @@ -391,7 +392,17 @@ export class RefreshScheduler { return Promise.all(preAggregations.map(preAggregation => async () => { const { timezones } = queryingOptions; - const { partitions: partitionsFilter, cacheOnly } = preAggregationsQueryingOptions[preAggregation.id] || {}; + const { partitions: partitionsFilter, cacheOnly, metaOnly } = preAggregationsQueryingOptions[preAggregation.id] || {}; + + if (metaOnly) { + return { + timezones, + preAggregation, + partitions: [], + errors: [], + partitionsWithDependencies: [] + }; + } const type = preAggregation?.preAggregation?.type; const isEphemeralPreAggregation = type === 'rollupJoin' || type === 'rollupLambda';