From 8025859b6d51848902dd66c77c86274fb0d111ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Wed, 24 Jul 2024 00:19:09 +0200 Subject: [PATCH] improve queries with limit --- packages/db/src/clickhouse-client.ts | 5 +++++ packages/db/src/services/chart.service.ts | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/packages/db/src/clickhouse-client.ts b/packages/db/src/clickhouse-client.ts index b01656dc..edae6867 100644 --- a/packages/db/src/clickhouse-client.ts +++ b/packages/db/src/clickhouse-client.ts @@ -56,6 +56,11 @@ export const ch = new Proxy(originalCh, { throw retryError; // Rethrow or handle as needed } } else { + if (args[0].query) { + console.log('FAILED QUERY:'); + console.log(args[0].query); + } + // Handle other errors or rethrow them throw error; } diff --git a/packages/db/src/services/chart.service.ts b/packages/db/src/services/chart.service.ts index a2a9ebf4..630ada49 100644 --- a/packages/db/src/services/chart.service.ts +++ b/packages/db/src/services/chart.service.ts @@ -16,6 +16,8 @@ export function getChartSql({ startDate, endDate, projectId, + chartType, + limit, }: IGetChartDataInput) { const { sb, join, getWhere, getFrom, getSelect, getOrderBy, getGroupBy } = createSqlBuilder(); @@ -59,6 +61,17 @@ export function getChartSql({ sb.where.endDate = `created_at <= '${formatClickhouseDate(endDate)}'`; } + if (breakdowns.length > 0 && limit) { + sb.where.bar = `(${breakdowns.map((b) => b.name).join(',')}) IN ( + SELECT ${breakdowns.map((b) => b.name).join(',')} + FROM ${TABLE_NAMES.events} + ${getWhere()} + GROUP BY ${breakdowns.map((b) => b.name).join(',')} + ORDER BY count(*) DESC + LIMIT ${limit} + )`; + } + breakdowns.forEach((breakdown, index) => { const key = `label_${index}`; const value = breakdown.name.startsWith('properties.')