Skip to content

Commit b57ddc3

Browse files
authored
chore(api-gateway): Response size optimization, pre-aggregations system API (#6728)
1 parent 6abee21 commit b57ddc3

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

packages/cubejs-api-gateway/src/gateway.ts

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -618,14 +618,29 @@ class ApiGateway {
618618
compilerApi.preAggregationsSchema
619619
);
620620

621-
const mergePartitionsAndVersionEntries = () => ({ preAggregation, partitions, ...props }) => ({
622-
...props,
621+
const checkExpand = (path: string | RegExp) => !query.expand ||
622+
(path instanceof RegExp
623+
? query.expand.some((p: string) => path.test(p))
624+
: query.expand.includes(path));
625+
626+
const mergePartitionsAndVersionEntries = () => ({ errors, preAggregation, partitions, invalidateKeyQueries, timezones }) => ({
627+
errors,
628+
invalidateKeyQueries,
623629
preAggregation,
624-
partitions: partitions.map(partition => {
625-
partition.versionEntries = versionEntriesResult?.versionEntriesByTableName[partition?.tableName] || [];
626-
partition.structureVersion = versionEntriesResult?.structureVersionsByTableName[partition?.tableName];
627-
return partition;
628-
}),
630+
timezones,
631+
partitions: partitions.map(partition => ({
632+
...(checkExpand('partitions.details') ? partition : {}),
633+
...(checkExpand('partitions.meta') ? {
634+
dataSource: partition.dataSource,
635+
preAggregationId: partition.preAggregationId,
636+
tableName: partition.tableName,
637+
type: partition.type,
638+
} : {}),
639+
...(checkExpand('partitions.versions') ? {
640+
versionEntries: versionEntriesResult?.versionEntriesByTableName[partition?.tableName] || [],
641+
structureVersion: versionEntriesResult?.structureVersionsByTableName[partition?.tableName] || [],
642+
} : {}),
643+
})),
629644
});
630645

631646
res({

packages/cubejs-api-gateway/src/query.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ const remapToQueryAdapterFormat = (query) => (query ? {
254254
} : query);
255255

256256
const queryPreAggregationsSchema = Joi.object().keys({
257+
expand: Joi.array().items(Joi.string()),
257258
metadata: Joi.object(),
258259
timezone: Joi.string(),
259260
timezones: Joi.array().items(Joi.string()),
@@ -274,7 +275,8 @@ const normalizeQueryPreAggregations = (query, defaultValues) => {
274275
return {
275276
metadata: query.metadata,
276277
timezones: query.timezones || (query.timezone && [query.timezone]) || defaultValues?.timezones || ['UTC'],
277-
preAggregations: query.preAggregations
278+
preAggregations: query.preAggregations,
279+
expand: query.expand
278280
};
279281
};
280282

packages/cubejs-api-gateway/test/mocks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export const preAggregationsResultFactory = () => ([
2828

2929
export const preAggregationPartitionsResultFactory = () => ([
3030
{
31-
timezone: 'UTC',
31+
timezones: ['UTC'],
3232
preAggregation: preAggregationsResultFactory()[0],
3333
partitions: [{
3434
tableName: 'dev_pre_aggregations.usage_usages20210430'

0 commit comments

Comments
 (0)