Здравствуйте.
Приведу пример (моей) задачи но максимально приближу её к задачам Метрики.
Буду признателен за советы.
Существует таблица
UserId(UInt64) | UserGroup(UInt16) | URL(String) | Domain(String) | dt(DateTime)
Таблица содержит десятки миллиардов записей. Количество пользователей - сотни миллионов. Групп пользователей - миллионы. Задача - для определенной группы пользователей (UserGroup) определить ПОСЛЕДНИЙ Domain, для каждого пользователя и посчитать их количество. В принципе - задача довольно простая (используя limit 1 by UserId, или argMax(UserId, dt), или движок AggregatingMergeTree) - у меня не получается достичь приемлемой производительности(< 1 сек) на 8 ядрах и 256 операивки (без кластера) - ClickHouse server version 18.10.3 revision 54405.
Create table user_visits(UserId UInt64, UserGroup UInt16, URL String, Domain String, dt DateTime) Engine=MergeTree parttition by toYYYYMM(dt) order by UserGroup
select -- query execution time > 16 sec
last_domain
, count() as qty
from
(
select
UserId
, argMax(Domain, dt) as last_domain
from user_visits
where UserGroup = 0
group by UserId
)
order by qty
---------------------------
select -- query execution time > 50 sec
Domain as last_domain
, count() as qty
from
(
select
Domain
, UserId
from user_visits
where UserGroup = 0
order by dt desc
)
limit 1 by UserId
----------------------------
Помогите пожалуйста найти самый быстрый способ подсчета последнего домена.
Спасибо.