Ребята, а есть ли какие нить альтернативы, как сделать подобный запрос:
Хочется выбрать первые строки по каждому пользователю, из довольно увесистого лога.
select
user,
createdAt,
at as first_log_at,
abs(first_log_at - createdAt) as create_time_lag_sec,
country,
platform,
version as start_version
from isp
where createdAt between toDate('2020-01-01') and today()
order by at
limit 1 by user
Текущий вылетает по памяти:
Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 9.31 GiB (attempt to allocate chunk of 4195401 bytes), maximum: 9.31 GiB: (avg_value_size_hint = 14.086669921875, avg_chars_size = 7.304003906249999, limit = 8192): (while reading column version): (while reading from part /var/lib/clickhouse/data/raven/log_r/4383f25745ae9ef993e861ad0c5bed11_0_26_48/ from mark 192 with max_rows_to_read = 8192): While executing MergeTreeThread (version
20.11.3.3 (official build))
Вот такой вот запрос работает без проблем: но min(version) != version на первой записи
select user,
country,
platform,
createdAt,
min(version) as start_version,
min(at) as first_log_at,
abs(first_log_at - createdAt) as create_time_lag_sec
from raven.isp
where isp.createdAt > toDate('2020-01-01')
group by user, country, platform, createdAt;