бывает так что строки с идентичным первичным ключом не до конца аггрегированы.
Например такое
id1, 2
id1, 3
А ожидаю
id1, 5
Чтобы уменьшить такую вероятность, хочу запускать по крону OPTIMIZE TABLE, раз в 10 минут.
Вопрос: Какой запрос дает гарантии того что не осталось неслитых данных?
Это не вариант, только хуже сделаете если так часто запускать optimize. Запросы к AggregatingMergeTree делаются только с доагрегацией, она для этого и создавалась
Напрямую запрос занимает 17 сек, с аггрегацией 3 минуты, из изначальной таблицы 10 минут. С потреблением памяти тоже похожая зависимость. вот я и думаю как лучше, что будет плохо? замедилтся вставка? чтение? блокировки какие-то будут?
А как вы делаете доагрегацию? Через group by? Замедлится всё, и чтение и запись. Проще делать пересчёт данных с нуля чем optimize final каждые 10 минут запускать
Да, group by по первичным ключам + groupArrayMerge()
Обсуждают сегодня