*
FROM (
SELECT
timestamp,
rid,
bs,
h,
count() OVER w AS cnt,
row_number() OVER w AS rn
FROM table
WHERE
timestamp BETWEEN '2021-08-25 00:00:00' AND '2021-08-25 23:59:59'
AND component != 'ec'
AND notEmpty(rid)
AND tt = 'u'
WINDOW w AS (PARTITION BY timestamp, rid, c, cr)
)
WHERE cnt > 1
Сейчас работает более-менее ок (жрёт 20 гб памяти), но при добавлении более тяжёлых колонок выжирает всю память.
таблица отсортирована по timestamp, хочу найти дубликаты по timestamp, rid, c, cr
а чем вам обычный group by не угодил? SELECT timestamp, rid, c, cr, any(bs), any(h) FROM ( SELECT timestamp, rid, c, cr bs, h FROM table WHERE timestamp BETWEEN '2021-08-25 00:00:00' AND '2021-08-25 23:59:59' AND component != 'ec' AND notEmpty(rid) AND tt = 'u' ) group by timestamp, rid, c, cr WHERE count() > 1 Не очень понятно чего вы ожидаете от bs & h но если нужны все значения, то можно сделать groupArray/arrayJoin
в память не влезает практически моментально
set distributed_aggregation_memory_efficient=1 (default from 21.3) set max_bytes_before_external_group_by='40G' max_threads=1
пыщь
А версия какая?
21.3 последняя
Обсуждают сегодня