Skip to content

Commit 1803b28

Browse files
authored
perf(api-gateway): Return granularityHierarchies only related to query time dimensions (#10129)
1 parent a462b41 commit 1803b28

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1623,10 +1623,11 @@ class ApiGateway {
16231623
normalizedQueries.map(
16241624
async (normalizedQuery, index) => {
16251625
const loadRequestSQLStarted = new Date();
1626-
const sqlQuery = await (await this.getCompilerApi(context))
1626+
const sqlQueryRaw = await (await this.getCompilerApi(context))
16271627
.getSql(
16281628
this.coerceForSqlQuery(normalizedQuery, context)
16291629
);
1630+
const sqlQuery = this.sanitizeSqlQuery(sqlQueryRaw);
16301631

16311632
this.log({
16321633
type: 'Load Request SQL',
@@ -1642,6 +1643,26 @@ class ApiGateway {
16421643
return sqlQueries;
16431644
}
16441645

1646+
private sanitizeSqlQuery(sqlQuery: any): any {
1647+
if (sqlQuery.canUseTransformedQuery) {
1648+
// Keep only granularityHierarchies related to the query time dimensions
1649+
const tdArr = sqlQuery.canUseTransformedQuery.timeDimensions.map(([m, _g]) => m);
1650+
if (tdArr.length > 0) {
1651+
sqlQuery.canUseTransformedQuery.granularityHierarchies =
1652+
Object.fromEntries(
1653+
Object.entries(sqlQuery.canUseTransformedQuery.granularityHierarchies)
1654+
.filter(
1655+
([key]) => tdArr.some((prefix: string) => key.startsWith(prefix))
1656+
)
1657+
);
1658+
} else {
1659+
sqlQuery.canUseTransformedQuery.granularityHierarchies = {};
1660+
}
1661+
}
1662+
1663+
return sqlQuery;
1664+
}
1665+
16451666
private sanitizeQueryForLogging(query: NormalizedQuery): NormalizedQuery {
16461667
const res: NormalizedQuery = { ...query };
16471668
delete res.cacheMode;

0 commit comments

Comments
 (0)