使用 Clickhouse 计算跳出率
Calculate bounce rate with Clickhouse
我正在尝试将 Clickhouse 用于我的一个小型分析应用程序,我有一个 table 将原始点击记录为:
CREATE TABLE hits (
sessionId LowCardinality(String),
page LowCardinality(String),
timestamp DateTime,
projectId UInt16
) ENGINE = MergeTree() PARTITION BY toYYYYMM(timestamp)
ORDER BY (projectId, page, toStartOfHour(timestamp)) --
SETTINGS index_granularity = 8192;
之后我可以添加一些示例数据:
sessionId page timestamp projectId
xxx / 2021-03-12 13:51:12 1
yyy / 2021-03-12 13:51:12 1
xxx /cool 2021-03-12 13:52:12 1
fff / 2021-03-12 13:53:12 1
我想要实现的是计算跳出次数(出现唯一的 sessionId)和每页的浏览量,例如:
page bounces views projectId
/ 2 3 1
/cool 0 1 1
我可以轻松计算每页的浏览量,但由于 GROUP BY
子句,唯一 sessionId
计数失败:
SELECT page,
projectId,
count(*) as views,
count(DISTINCT sessionId) as bounces --fail
from hits
GROUP BY (page, projectId);
任何关于更改 Clickhouse 架构或什至使用 Clickhouse 的引擎进行聚合的想法、变通方法都将不胜感激。
select projectId, p[1] page, countIf(length(p)=1) bounce
from (
SELECT
projectId, sessionId,
groupArray( page ) p
from hits
GROUP BY sessionId, projectId )
group by projectId,page
我正在尝试将 Clickhouse 用于我的一个小型分析应用程序,我有一个 table 将原始点击记录为:
CREATE TABLE hits (
sessionId LowCardinality(String),
page LowCardinality(String),
timestamp DateTime,
projectId UInt16
) ENGINE = MergeTree() PARTITION BY toYYYYMM(timestamp)
ORDER BY (projectId, page, toStartOfHour(timestamp)) --
SETTINGS index_granularity = 8192;
之后我可以添加一些示例数据:
sessionId page timestamp projectId
xxx / 2021-03-12 13:51:12 1
yyy / 2021-03-12 13:51:12 1
xxx /cool 2021-03-12 13:52:12 1
fff / 2021-03-12 13:53:12 1
我想要实现的是计算跳出次数(出现唯一的 sessionId)和每页的浏览量,例如:
page bounces views projectId
/ 2 3 1
/cool 0 1 1
我可以轻松计算每页的浏览量,但由于 GROUP BY
子句,唯一 sessionId
计数失败:
SELECT page,
projectId,
count(*) as views,
count(DISTINCT sessionId) as bounces --fail
from hits
GROUP BY (page, projectId);
任何关于更改 Clickhouse 架构或什至使用 Clickhouse 的引擎进行聚合的想法、变通方法都将不胜感激。
select projectId, p[1] page, countIf(length(p)=1) bounce
from (
SELECT
projectId, sessionId,
groupArray( page ) p
from hits
GROUP BY sessionId, projectId )
group by projectId,page