Skip to content

Commit 90d0d72

Browse files
committed
MV for main page
1 parent b5e19d0 commit 90d0d72

File tree

2 files changed

+48
-14
lines changed

2 files changed

+48
-14
lines changed

packages/db/src/clickhouse/schema.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,24 @@ TTL toDateTime(hour) + INTERVAL 1 YEAR
322322
SETTINGS index_granularity = 8192
323323
`;
324324

325+
/**
326+
* Daily aggregated pageviews for mini-charts
327+
*/
328+
const CREATE_DAILY_PAGEVIEWS_TABLE = `
329+
CREATE TABLE IF NOT EXISTS ${DATABASES.ANALYTICS}.daily_pageviews (
330+
client_id String CODEC(ZSTD(1)),
331+
date Date CODEC(Delta(2), ZSTD(1)),
332+
333+
pageviews UInt64 CODEC(ZSTD(1)),
334+
335+
INDEX idx_client_id client_id TYPE bloom_filter(0.01) GRANULARITY 1
336+
) ENGINE = SummingMergeTree
337+
PARTITION BY toYYYYMM(date)
338+
ORDER BY (client_id, date)
339+
TTL toDateTime(date) + INTERVAL 1 YEAR
340+
SETTINGS index_granularity = 8192
341+
`;
342+
325343
/**
326344
* Materialized view for custom events hourly aggregation
327345
*/
@@ -340,6 +358,20 @@ FROM ${DATABASES.ANALYTICS}.custom_event_spans
340358
GROUP BY client_id, path, event_name, hour
341359
`;
342360

361+
/**
362+
* Materialized view for daily pageviews aggregation
363+
*/
364+
const CREATE_DAILY_PAGEVIEWS_MV = `
365+
CREATE MATERIALIZED VIEW IF NOT EXISTS ${DATABASES.ANALYTICS}.daily_pageviews_mv
366+
TO ${DATABASES.ANALYTICS}.daily_pageviews
367+
AS SELECT
368+
client_id,
369+
toDate(time) AS date,
370+
countIf(event_name = 'screen_view') AS pageviews
371+
FROM ${DATABASES.ANALYTICS}.events
372+
GROUP BY client_id, date
373+
`;
374+
343375
const CREATE_CUSTOM_OUTGOING_LINKS_TABLE = `
344376
CREATE TABLE IF NOT EXISTS ${DATABASES.ANALYTICS}.outgoing_links (
345377
id UUID,
@@ -566,6 +598,15 @@ export interface CustomEventsHourlyAggregate {
566598
unique_sessions: number;
567599
}
568600

601+
/**
602+
* Daily pageviews aggregate type
603+
*/
604+
export interface DailyPageviewsAggregate {
605+
client_id: string;
606+
date: string;
607+
pageviews: number;
608+
}
609+
569610
export interface CustomOutgoingLink {
570611
id: string;
571612
client_id: string;
@@ -718,6 +759,7 @@ export async function initClickHouseSchema() {
718759
name: "custom_events_hourly",
719760
query: CREATE_CUSTOM_EVENTS_HOURLY_TABLE,
720761
},
762+
{ name: "daily_pageviews", query: CREATE_DAILY_PAGEVIEWS_TABLE },
721763
{ name: "blocked_traffic", query: CREATE_BLOCKED_TRAFFIC_TABLE },
722764
{ name: "email_events", query: CREATE_EMAIL_EVENTS_TABLE },
723765
{ name: "outgoing_links", query: CREATE_CUSTOM_OUTGOING_LINKS_TABLE },
@@ -732,6 +774,7 @@ export async function initClickHouseSchema() {
732774
name: "custom_events_hourly_mv",
733775
query: CREATE_CUSTOM_EVENTS_HOURLY_MV,
734776
},
777+
{ name: "daily_pageviews_mv", query: CREATE_DAILY_PAGEVIEWS_MV },
735778
];
736779

737780
// Uptime tables

packages/rpc/src/routers/websites.ts

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -174,21 +174,10 @@ const fetchChartData = async (
174174
date_range AS (
175175
SELECT arrayJoin(arrayMap(d -> toDate(today()) - d, range(7))) AS date
176176
),
177-
daily_pageviews AS (
178-
SELECT
179-
client_id,
180-
toDate(time) as event_date,
181-
countIf(event_name = 'screen_view') as pageviews
182-
FROM analytics.events
183-
WHERE
184-
client_id IN {websiteIds:Array(String)}
185-
AND toDate(time) >= (today() - 6)
186-
GROUP BY client_id, event_date
187-
),
188177
has_any_data AS (
189178
SELECT client_id, 1 AS hasData
190-
FROM analytics.events
191-
WHERE client_id IN {websiteIds:Array(String)} AND event_name = 'screen_view'
179+
FROM analytics.daily_pageviews
180+
WHERE client_id IN {websiteIds:Array(String)} AND pageviews > 0
192181
GROUP BY client_id
193182
)
194183
SELECT
@@ -201,9 +190,11 @@ const fetchChartData = async (
201190
CROSS JOIN
202191
date_range
203192
LEFT JOIN
204-
daily_pageviews ON all_websites.website_id = daily_pageviews.client_id AND date_range.date = daily_pageviews.event_date
193+
analytics.daily_pageviews ON all_websites.website_id = daily_pageviews.client_id AND date_range.date = daily_pageviews.date
205194
LEFT JOIN
206195
has_any_data ON all_websites.website_id = has_any_data.client_id
196+
WHERE
197+
date_range.date >= (today() - 6)
207198
ORDER BY
208199
websiteId,
209200
date ASC

0 commit comments

Comments
 (0)